re PR target/78849 (ICE on initialization of global struct containing __int20 array at varasm.c:4968)

PR target/78849
	* gcc/tree.c (build_common_tree_nodes): Dont set TYPE_SIZE for __intN
	types.

	PR target/78849
	* gcc.target/msp430/msp430.exp: Remove -pedantic-errors from
	DEFAULT_CFLAGS.
	* gcc.target/msp430/pr78849.c: New test.

From-SVN: r260627
This commit is contained in:
Jeff Law 2018-05-23 16:33:36 -06:00
parent 54fd159056
commit 2aece9c199
5 changed files with 73 additions and 7 deletions

View File

@ -1,4 +1,10 @@
2017-05-23 Segher Boessenkool <segher@kernel.crashing.org>
2018-05-23 Jozef Lawrynowicz <jozef.l@somniumtech.com>
PR target/78849
* gcc/tree.c (build_common_tree_nodes): Dont set TYPE_SIZE for __intN
types.
2018-05-23 Segher Boessenkool <segher@kernel.crashing.org>
* doc/sourcebuild.texi (Endianness): New subsubsection.

View File

@ -1,3 +1,10 @@
2018-05-23 Jozef Lawrynowicz <jozef.l@somniumtech.com>
PR target/78849
* gcc.target/msp430/msp430.exp: Remove -pedantic-errors from
DEFAULT_CFLAGS.
* gcc.target/msp430/pr78849.c: New test.
2018-05-23 Marek Polacek <polacek@redhat.com>
* g++.dg/cpp2a/range-for8.C: New test.

View File

@ -24,10 +24,15 @@ if { ![istarget msp430-*-*] } then {
# Load support procs.
load_lib gcc-dg.exp
# If a testcase doesn't have special options, use these.
# The '-pedantic-errors' option in the global variable DEFAULT_CFLAGS that is
# set by other drivers causes an error when the __int20 type is used, so remove
# this option from DEFAULT_CFLAGS for the msp430 tests.
global DEFAULT_CFLAGS
if ![info exists DEFAULT_CFLAGS] then {
set DEFAULT_CFLAGS ""
if [info exists DEFAULT_CFLAGS] then {
set MSP430_DEFAULT_CFLAGS \
[ string map { "-pedantic-errors" "" } $DEFAULT_CFLAGS ]
} else {
set MSP430_DEFAULT_CFLAGS ""
}
# Initialize `dg'.
@ -35,7 +40,7 @@ dg-init
# Main loop.
dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cCS\]]] \
"" $DEFAULT_CFLAGS
"" $MSP430_DEFAULT_CFLAGS
# All done.
dg-finish

View File

@ -0,0 +1,50 @@
/* { dg-do compile } */
/* { dg-final { scan-assembler ".size.*instance.*52" } } */
struct t_inner
{
__int20 a;
char val1;
__int20 b[3];
char val2;
};
struct t_full
{
__int20 array[2];
char val1;
struct t_inner bb[2];
char val2;
};
struct t_full instance =
{
{
4231,
3212,
},
5,
{
{
87680,
20,
{
2534,
3,
41,
},
55,
},
{
567,
4,
{
43522,
5433,
454,
},
88,
},
},
8,
};

View File

@ -9785,8 +9785,6 @@ build_common_tree_nodes (bool signed_char)
{
int_n_trees[i].signed_type = make_signed_type (int_n_data[i].bitsize);
int_n_trees[i].unsigned_type = make_unsigned_type (int_n_data[i].bitsize);
TYPE_SIZE (int_n_trees[i].signed_type) = bitsize_int (int_n_data[i].bitsize);
TYPE_SIZE (int_n_trees[i].unsigned_type) = bitsize_int (int_n_data[i].bitsize);
if (int_n_data[i].bitsize > LONG_LONG_TYPE_SIZE
&& int_n_enabled_p[i])