Avoid assuming input corresponds to valid source code (PR c/97131).

gcc/c-family/ChangeLog:

	PR c/97131
	* c-warn.c (warn_parm_ptrarray_mismatch): Handle more invalid input.

gcc/testsuite/ChangeLog:

	PR c/97131
	* gcc.dg/Warray-parameter-6.c: New test.
This commit is contained in:
Martin Sebor 2020-09-23 15:02:01 -06:00
parent 37c3c29739
commit e92779db33
2 changed files with 14 additions and 0 deletions

View File

@ -3181,11 +3181,16 @@ warn_parm_ptrarray_mismatch (location_t origloc, tree curparms, tree newparms)
while (TREE_CODE (curtyp) == POINTER_TYPE
&& TREE_CODE (newtyp) == POINTER_TYPE);
if (!newtyp)
/* Bail on error. */
return;
if (TREE_CODE (curtyp) != ARRAY_TYPE
|| TREE_CODE (newtyp) != ARRAY_TYPE)
{
if (curtyp == error_mark_node
|| newtyp == error_mark_node)
/* Bail on error. */
return;
continue;

View File

@ -0,0 +1,9 @@
/* PR c/97131 - ICE: Segmentation fault in warn_parm_ptrarray_mismatch
{ dg-do compile }
{ dg-options "-Wall" } */
struct bm { };
void ms (struct bm (*at)[1]) { }
void ms (int f1) { } // { dg-error "conflicting types for 'ms'" }