re PR tree-optimization/43164 (ice in completely_scalarize_record, at tree-sra.c:85)
2010-03-04 Martin Jambor <mjambor@suse.cz> PR tree-optimization/43164 PR tree-optimization/43191 * tree-sra.c (type_consists_of_records_p): Reject records with zero-size bit-fields at the end. * testsuite/gcc.c-torture/compile/pr43164.c: New test. * testsuite/gcc.c-torture/compile/pr43191.c: Likewise. From-SVN: r157232
This commit is contained in:
parent
83ff92fb26
commit
76f76cd0e5
@ -1,3 +1,10 @@
|
||||
2010-03-04 Martin Jambor <mjambor@suse.cz>
|
||||
|
||||
PR tree-optimization/43164
|
||||
PR tree-optimization/43191
|
||||
* tree-sra.c (type_consists_of_records_p): Reject records with
|
||||
zero-size bit-fields at the end.
|
||||
|
||||
2010-03-04 Mike Stump <mikestump@comcast.net>
|
||||
|
||||
* Makefile.in (TAGS): Remove *.y.
|
||||
|
@ -1,3 +1,10 @@
|
||||
2010-03-04 Martin Jambor <mjambor@suse.cz>
|
||||
|
||||
PR tree-optimization/43164
|
||||
PR tree-optimization/43191
|
||||
* gcc.c-torture/compile/pr43164.c: New test.
|
||||
* gcc.c-torture/compile/pr43191.c: Likewise.
|
||||
|
||||
2010-03-04 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
PR fortran/43244
|
||||
|
16
gcc/testsuite/gcc.c-torture/compile/pr43164.c
Normal file
16
gcc/testsuite/gcc.c-torture/compile/pr43164.c
Normal file
@ -0,0 +1,16 @@
|
||||
struct S0
|
||||
{
|
||||
unsigned char f0;
|
||||
int:0;
|
||||
};
|
||||
|
||||
struct S1
|
||||
{
|
||||
struct S0 f0;
|
||||
};
|
||||
|
||||
struct S1 func_34 (void)
|
||||
{
|
||||
struct S1 l_221 = { { 1 } };
|
||||
return l_221;
|
||||
}
|
46
gcc/testsuite/gcc.c-torture/compile/pr43191.c
Normal file
46
gcc/testsuite/gcc.c-torture/compile/pr43191.c
Normal file
@ -0,0 +1,46 @@
|
||||
struct S0
|
||||
{
|
||||
};
|
||||
|
||||
struct S1
|
||||
{
|
||||
unsigned f0:27;
|
||||
const unsigned:0;
|
||||
};
|
||||
|
||||
struct S2
|
||||
{
|
||||
unsigned f2:1;
|
||||
};
|
||||
|
||||
unsigned char g_4[1][8][3][1][1][1];
|
||||
unsigned char *g_17;
|
||||
unsigned char **g_16[1][10][7];
|
||||
|
||||
struct S2 g_35 = {
|
||||
0
|
||||
};
|
||||
|
||||
struct S2 *g_34 = &g_35;
|
||||
|
||||
struct S1 func_86 (unsigned char p_87, struct S2 **p_89)
|
||||
{
|
||||
struct S1 l_92[6][8][1][1] = {
|
||||
16143586
|
||||
}
|
||||
;
|
||||
return l_92[0][0][0][0];
|
||||
}
|
||||
|
||||
void func_28 (struct S1 p_30, const struct S1 p_32)
|
||||
{
|
||||
}
|
||||
|
||||
void func_70 (unsigned char p_72)
|
||||
{
|
||||
unsigned char *const *l_93 = &g_17;
|
||||
struct S2 **l_94;
|
||||
unsigned char *const *l_97 = &g_17;
|
||||
func_28 (func_86 (p_72, 0),
|
||||
func_86 (p_72, &g_34));
|
||||
}
|
@ -802,13 +802,15 @@ create_access (tree expr, gimple stmt, bool write)
|
||||
|
||||
|
||||
/* Return true iff TYPE is a RECORD_TYPE with fields that are either of gimple
|
||||
register types or (recursively) records with only these two kinds of
|
||||
fields. */
|
||||
register types or (recursively) records with only these two kinds of fields.
|
||||
It also returns false if any of these records has a zero-size field as its
|
||||
last field. */
|
||||
|
||||
static bool
|
||||
type_consists_of_records_p (tree type)
|
||||
{
|
||||
tree fld;
|
||||
bool last_fld_has_zero_size = false;
|
||||
|
||||
if (TREE_CODE (type) != RECORD_TYPE)
|
||||
return false;
|
||||
@ -821,7 +823,13 @@ type_consists_of_records_p (tree type)
|
||||
if (!is_gimple_reg_type (ft)
|
||||
&& !type_consists_of_records_p (ft))
|
||||
return false;
|
||||
|
||||
last_fld_has_zero_size = tree_low_cst (DECL_SIZE (fld), 1) == 0;
|
||||
}
|
||||
|
||||
if (last_fld_has_zero_size)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user