aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Sebor <msebor@redhat.com>2020-10-23 12:30:20 -0600
committerMartin Sebor <msebor@redhat.com>2020-10-23 12:30:20 -0600
commit7991e963239160624b22a12caaacce95d3667e49 (patch)
tree1076ec6d81f7538459ab5165b355f59b20b3f52a /gcc
parentc7c4a2787bae1a3eb239f5e69826727ff5c44373 (diff)
downloadgcc-7991e963239160624b22a12caaacce95d3667e49.zip
gcc-7991e963239160624b22a12caaacce95d3667e49.tar.gz
gcc-7991e963239160624b22a12caaacce95d3667e49.tar.bz2
PR c/97463 - ICE in warn_parm_ptrarray_mismatch on an incompatible function redeclaration
gcc/c-family/ChangeLog: PR c/97463 * c-warn.c (warn_parm_ptrarray_mismatch): Move null test earlier. gcc/testsuite/ChangeLog: PR c/97463 * gcc.dg/pr97463.c: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-family/c-warn.c8
-rw-r--r--gcc/testsuite/gcc.dg/pr97463.c7
2 files changed, 11 insertions, 4 deletions
diff --git a/gcc/c-family/c-warn.c b/gcc/c-family/c-warn.c
index ebd011d..a1b9450 100644
--- a/gcc/c-family/c-warn.c
+++ b/gcc/c-family/c-warn.c
@@ -3177,14 +3177,14 @@ warn_parm_ptrarray_mismatch (location_t origloc, tree curparms, tree newparms)
{
curtyp = TREE_TYPE (curtyp);
newtyp = TREE_TYPE (newtyp);
+
+ if (!newtyp)
+ /* Bail on error. */
+ return;
}
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)
{
diff --git a/gcc/testsuite/gcc.dg/pr97463.c b/gcc/testsuite/gcc.dg/pr97463.c
new file mode 100644
index 0000000..f93b07c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr97463.c
@@ -0,0 +1,7 @@
+/* PR c/97463 - ICE in warn_parm_ptrarray_mismatch on an incompatible
+ function redeclaration
+ { dg-do compile }
+ { dg-options "-Wall" } */
+
+void f (void**);
+void f (int n) { } // { dg-error "conflicting types" }