]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR c/64778 (ICE on invalid code on x86_64-linux-gnu: tree check: expecte...
authorJakub Jelinek <jakub@redhat.com>
Sun, 1 Feb 2015 17:35:40 +0000 (18:35 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Sun, 1 Feb 2015 17:35:40 +0000 (18:35 +0100)
Backported from mainline
2015-01-26  Jakub Jelinek  <jakub@redhat.com>

PR c/64778
* c-typeck.c (convert_arguments): Return -1 if there are
error_args, even if we've diagnosed too many arguments.

* gcc.dg/pr64778.c: New test.

From-SVN: r220326

gcc/c/ChangeLog
gcc/c/c-typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr64778.c [new file with mode: 0644]

index deb70eb7251bf29a6320adc8f5da7f72161c7324..4185d98365984a37af24ac801d26a786323810be 100644 (file)
@@ -1,3 +1,12 @@
+2015-02-01  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2015-01-26  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/64778
+       * c-typeck.c (convert_arguments): Return -1 if there are
+       error_args, even if we've diagnosed too many arguments.
+
 2014-10-30  Release Manager
 
        * GCC 4.9.2 released.
index d096ad405dc5d4e175f29e91d40dfda3c793dd8f..166c4d57401a90b1987c2549676b2594d5106e0b 100644 (file)
@@ -3085,7 +3085,7 @@ convert_arguments (location_t loc, vec<location_t> arg_loc, tree typelist,
          else
            error_at (loc, "too many arguments to function %qE", function);
          inform_declaration (fundecl);
-         return parmnum;
+         return error_args ? -1 : (int) parmnum;
        }
 
       if (selector && argnum > 2)
index 7e1df70e0972706ba2c4f3afbc27aaa85dcf1f00..8cab2d3fd6949584bb935ae473e4570a92ddf632 100644 (file)
@@ -3,6 +3,9 @@
        Backported from mainline
        2015-01-26  Jakub Jelinek  <jakub@redhat.com>
 
+       PR c/64778
+       * gcc.dg/pr64778.c: New test.
+
        PR middle-end/64421
        * gcc.dg/vect/pr64421.c: New test.
 
diff --git a/gcc/testsuite/gcc.dg/pr64778.c b/gcc/testsuite/gcc.dg/pr64778.c
new file mode 100644 (file)
index 0000000..71a2607
--- /dev/null
@@ -0,0 +1,10 @@
+/* PR c/64778 */
+/* { dg-do compile } */
+
+int
+foo (int p)
+{
+  int a;
+  a ^= foo (,);        /* { dg-error "expected expression before|too many arguments" } */
+  return a;
+}