aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2016-07-29 17:36:46 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2016-07-29 17:36:46 +0000
commite00dceafd2de848a7735dbce48922aa2304a0f94 (patch)
treefeeb7bcc2ca33fc90b3d2193ab87d8641f9730a2
parentefd0786f218626c25adde976a9f83121b0c45342 (diff)
downloadgcc-e00dceafd2de848a7735dbce48922aa2304a0f94.zip
gcc-e00dceafd2de848a7735dbce48922aa2304a0f94.tar.gz
gcc-e00dceafd2de848a7735dbce48922aa2304a0f94.tar.bz2
re PR c/71573 (ICE on invalid C code on x86_64-linux-gnu (tree check: expected function_decl, have var_decl in implicitly_declare))
PR c/71573 * c-decl.c (implicitly_declare): Return decl early not only for error_mark_nodes, but for anything that is not a FUNCTION_DECL. * gcc.dg/noncompile/pr71573.c: New test. From-SVN: r238885
-rw-r--r--gcc/c/ChangeLog4
-rw-r--r--gcc/c/c-decl.c2
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.dg/noncompile/pr71573.c14
4 files changed, 22 insertions, 1 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index ec680d3..0650758 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -7,6 +7,10 @@
* c-parser.c (c_parser_switch_statement): Initialize ce.original_type
to error node for invalid code.
+ PR c/71573
+ * c-decl.c (implicitly_declare): Return decl early not only for
+ error_mark_nodes, but for anything that is not a FUNCTION_DECL.
+
2016-07-29 Jakub Jelinek <jakub@redhat.com>
PR c/71969
diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c
index 9a922cc..5f38985 100644
--- a/gcc/c/c-decl.c
+++ b/gcc/c/c-decl.c
@@ -3327,7 +3327,7 @@ implicitly_declare (location_t loc, tree functionid)
if (decl)
{
- if (decl == error_mark_node)
+ if (TREE_CODE (decl) != FUNCTION_DECL)
return decl;
/* FIXME: Objective-C has weird not-really-builtin functions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index dbe2a3a..e29c07c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -8,6 +8,9 @@
PR c/71853
* gcc.dg/noncompile/pr71853.c: New test.
+ PR c/71573
+ * gcc.dg/noncompile/pr71573.c: New test.
+
2016-07-29 Uros Bizjak <ubizjak@gmail.com>
* gcc.dg/pr59833.c: Use dg-add-options ieee.
diff --git a/gcc/testsuite/gcc.dg/noncompile/pr71573.c b/gcc/testsuite/gcc.dg/noncompile/pr71573.c
new file mode 100644
index 0000000..8ace94a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/noncompile/pr71573.c
@@ -0,0 +1,14 @@
+/* PR c/71573 */
+/* { dg-do compile } */
+
+void
+f1 (void)
+{
+ extern int t;
+}
+
+void
+f2 (void)
+{
+ t (0); /* { dg-error "called object .t. is not a function or function pointer" } */
+}