PR c/110699: Defend against error_mark_node in gimplify.cc.
This patch resolves PR c/110669, an ICE-after-error regression, by adding a check that the array type isn't error_mark_node in gimplify_compound_lval. 2023-07-21 Roger Sayle <roger@nextmovesoftware.com> Richard Biener <rguenther@suse.de> gcc/ChangeLog PR c/110699 * gimplify.cc (gimplify_compound_lval): If the array's type is error_mark_node then return GS_ERROR. gcc/testsuite/ChangeLog PR c/110699 * gcc.dg/pr110699.c: New test case.
This commit is contained in:
parent
77d0f9ec38
commit
cfe53af093
2 changed files with 17 additions and 0 deletions
|
@ -3209,6 +3209,9 @@ gimplify_compound_lval (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
|
|||
{
|
||||
tree t = expr_stack[i];
|
||||
|
||||
if (error_operand_p (TREE_OPERAND (t, 0)))
|
||||
return GS_ERROR;
|
||||
|
||||
if (TREE_CODE (t) == ARRAY_REF || TREE_CODE (t) == ARRAY_RANGE_REF)
|
||||
{
|
||||
/* Deal with the low bound and element type size and put them into
|
||||
|
|
14
gcc/testsuite/gcc.dg/pr110699.c
Normal file
14
gcc/testsuite/gcc.dg/pr110699.c
Normal file
|
@ -0,0 +1,14 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
|
||||
typedef __attribute__((__vector_size__(64))) int T;
|
||||
|
||||
void f(void) {
|
||||
extern char a[64], b[64]; /* { dg-message "previous" "note" } */
|
||||
void *p = a;
|
||||
T q = *(T *)&b[0];
|
||||
}
|
||||
|
||||
void g() {
|
||||
extern char b; /* { dg-error "conflicting types" } */
|
||||
}
|
Loading…
Add table
Reference in a new issue