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:
Roger Sayle 2023-07-21 20:37:59 +01:00
parent 77d0f9ec38
commit cfe53af093
2 changed files with 17 additions and 0 deletions

View file

@ -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

View 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" } */
}