]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/37554 (ICE with invalid cast)
authorPaolo Carlini <paolo.carlini@oracle.com>
Tue, 27 Jan 2009 19:47:28 +0000 (19:47 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Tue, 27 Jan 2009 19:47:28 +0000 (19:47 +0000)
/cp
2009-01-27  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/37554
* call.c (build_over_call): If convert_for_arg_passing returns
error_mark_node unconditionally return it.

/testsuite
2009-01-27  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/37554
* g++.dg/parse/crash51.C: New.
* g++.old-deja/g++.pt/crash9.C: Adjust.

From-SVN: r143711

gcc/cp/ChangeLog
gcc/cp/call.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/parse/crash51.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.pt/crash9.C

index 876cb7fa6d7326a0b9351bc830332dbcbf55084c..ff63c619a7ae741a80ef66ee86537db93c0f7632 100644 (file)
@@ -1,3 +1,9 @@
+2009-01-27  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/37554
+       * call.c (build_over_call): If convert_for_arg_passing returns
+       error_mark_node unconditionally return it.
+
 2009-01-22  Adam Nemet  <anemet@caviumnetworks.com>
 
        * class.c (check_field_decls): Also inherit packed for bitfields
index 09dc57d7a252c95615c4f0da84ceb5cc86a90d72..f13e3bdb8e29e36a76bae1906211a3c7d6ad26b9 100644 (file)
@@ -5276,7 +5276,7 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
        (conv, TREE_VALUE (arg), fn, i - is_method, complain);
 
       val = convert_for_arg_passing (type, val);
-      if ((complain == tf_none) && val == error_mark_node)
+      if (val == error_mark_node)
         return error_mark_node;
       else
         argarray[j++] = val;
index e1c767a7e697ae76ac5faaf12b4c05ffbb8bc466..8f1ceb8d2a07c1a2ff272d839cfc11718353354c 100644 (file)
@@ -1,3 +1,9 @@
+2009-01-27  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/37554
+       * g++.dg/parse/crash51.C: New.
+       * g++.old-deja/g++.pt/crash9.C: Adjust.
+
 2009-01-27  Daniel Kraft  <d@domob.eu>
 
        PR fortran/38883
diff --git a/gcc/testsuite/g++.dg/parse/crash51.C b/gcc/testsuite/g++.dg/parse/crash51.C
new file mode 100644 (file)
index 0000000..03fcd36
--- /dev/null
@@ -0,0 +1,9 @@
+// PR c++/37554
+
+struct A {};
+class B : A {};
+
+void foo(B b)
+{
+  (A)b; // { dg-error "inaccessible base" }
+}
index dab0e4c2824fe61193be465f232d7a5189d11c8c..20bd7584fdd8aae56b9817032c8844982d8f19a6 100644 (file)
@@ -1,11 +1,11 @@
 // { dg-do assemble  }
 
 template <class T>
-void f(T) {} // { dg-error "" } parameter has incomplete type
+void f(T) {}
 
-class C;    // { dg-error "" } forward declaration
+class C;    // { dg-error "forward declaration" }
 
 void g(const C& c)
 {
-  f(c); // { dg-error "" } invalid use of undefined type
+  f(c); // { dg-error "invalid use of incomplete type|initializing argument" }
 }