aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2014-01-16 11:42:56 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2014-01-16 11:42:56 +0000
commit5147d10aa4b2b608a02fb885a5510c983e148f06 (patch)
tree3412b82ff000734c2ddf28a21879ef44862b1e6a
parent1a22d3cb982c29f0481169519c4edadf8c6ac694 (diff)
downloadgcc-5147d10aa4b2b608a02fb885a5510c983e148f06.zip
gcc-5147d10aa4b2b608a02fb885a5510c983e148f06.tar.gz
gcc-5147d10aa4b2b608a02fb885a5510c983e148f06.tar.bz2
re PR middle-end/59827 (ICE on array with incomplete element type)
PR middle-end/59827 * cgraph.c (gimple_check_call_args): Don't use DECL_ARG_TYPE if it is error_mark_node. testsuite/ * gcc.dg/pr59827.c: New test. From-SVN: r206660
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cgraph.c1
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr59827.c15
4 files changed, 27 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 255597f..0580d16 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2014-01-16 Marek Polacek <polacek@redhat.com>
+
+ PR middle-end/59827
+ * cgraph.c (gimple_check_call_args): Don't use DECL_ARG_TYPE if
+ it is error_mark_node.
+
2014-01-15 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.c (ix86_hard_regno_mode_ok): Use
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index 09fb4cb..92b31b9 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -3035,6 +3035,7 @@ gimple_check_call_args (gimple stmt, tree fndecl, bool args_count_match)
break;
arg = gimple_call_arg (stmt, i);
if (p == error_mark_node
+ || DECL_ARG_TYPE (p) == error_mark_node
|| arg == error_mark_node
|| (!types_compatible_p (DECL_ARG_TYPE (p), TREE_TYPE (arg))
&& !fold_convertible_p (DECL_ARG_TYPE (p), arg)))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a533d4f..7db83e6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2014-01-16 Marek Polacek <polacek@redhat.com>
+
+ PR middle-end/59827
+ * gcc.dg/pr59827.c: New test.
+
2014-01-16 Andreas Schwab <schwab@linux-m68k.org>
* gcc.c-torture/execute/pr59747.c (fn1): Return a value.
diff --git a/gcc/testsuite/gcc.dg/pr59827.c b/gcc/testsuite/gcc.dg/pr59827.c
new file mode 100644
index 0000000..77e1e9c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr59827.c
@@ -0,0 +1,15 @@
+/* PR middle-end/59827 */
+/* { dg-do compile } */
+
+int
+foo (int p[2][]) /* { dg-error "array type has incomplete element type" } */
+{
+ return p[0][0];
+}
+
+void
+bar (void)
+{
+ int p[2][1];
+ foo (p); /* { dg-error "type of formal parameter 1 is incomplete" } */
+}