middle-end/100509 - avoid folding constant to aggregate type
When folding a constant initializer looking through aliases to incompatible types can lead to us trying to fold a constant to an aggregate type which can't work. Simply avoid trying to constant fold non-register typed symbols. 2021-05-11 Richard Biener <rguenther@suse.de> PR middle-end/100509 * gimple-fold.c (fold_gimple_assign): Only call get_symbol_constant_value on register type symbols. * gcc.dg/pr100509.c: New testcase.
This commit is contained in:
parent
9b905ba9eb
commit
ca8e830118
@ -547,7 +547,8 @@ fold_gimple_assign (gimple_stmt_iterator *si)
|
||||
CONSTRUCTOR_ELTS (rhs));
|
||||
}
|
||||
|
||||
else if (DECL_P (rhs))
|
||||
else if (DECL_P (rhs)
|
||||
&& is_gimple_reg_type (TREE_TYPE (rhs)))
|
||||
return get_symbol_constant_value (rhs);
|
||||
}
|
||||
break;
|
||||
|
9
gcc/testsuite/gcc.dg/pr100509.c
Normal file
9
gcc/testsuite/gcc.dg/pr100509.c
Normal file
@ -0,0 +1,9 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O" } */
|
||||
|
||||
struct X {
|
||||
int a;
|
||||
};
|
||||
const int a = 0;
|
||||
static struct X A __attribute__((alias("a")));
|
||||
void foo() { struct X b = A; }
|
Loading…
Reference in New Issue
Block a user