]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/51854 (ICE in mangle.c with literal of complex floating type)
authorJakub Jelinek <jakub@redhat.com>
Mon, 16 Jan 2012 21:49:58 +0000 (16:49 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 16 Jan 2012 21:49:58 +0000 (16:49 -0500)
PR c++/51854
* mangle.c (write_template_arg_literal): Sorry instead of aborting.

From-SVN: r183224

gcc/cp/ChangeLog
gcc/cp/mangle.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/abi/mangle60.C [new file with mode: 0644]

index f302fc3b353be8f23924c75be6efe334f577624e..473571de0ce5d6c6a4730df6c1ca9ea2a8075048 100644 (file)
@@ -1,3 +1,8 @@
+2012-01-16  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/51854
+       * mangle.c (write_template_arg_literal): Sorry instead of aborting.
+
 2012-01-16  Jason Merrill  <jason@redhat.com>
 
        PR c++/51868
index 4f5185d740a20171e4e6f05aea55fa00926c59dc..37412968f2c18d90501d0f863ee21cc43b5ae86c 100644 (file)
@@ -2770,7 +2770,8 @@ write_template_arg_literal (const tree value)
       break;
 
     default:
-      gcc_unreachable ();
+      sorry ("mangling %C", TREE_CODE (value));
+      break;
     }
 
   write_char ('E');
index 5c13ce27f0260c9c7926a4ced80d25cf8f8799a0..40f207d92764df679695f8b8a7a130e4793b052b 100644 (file)
@@ -1,5 +1,8 @@
 2012-01-16  Jason Merrill  <jason@redhat.com>
 
+       PR c++/51854
+       * g++.dg/abi/mangle60.C: New.
+
        PR c++/51868
        * g++.dg/cpp0x/rv-bitfield.C: New.
        * g++.dg/cpp0x/rv-bitfield2.C: New.
diff --git a/gcc/testsuite/g++.dg/abi/mangle60.C b/gcc/testsuite/g++.dg/abi/mangle60.C
new file mode 100644 (file)
index 0000000..982ca45
--- /dev/null
@@ -0,0 +1,21 @@
+// PR c++/51854
+// { dg-options "" }
+// { dg-excess-errors "" { xfail *-*-* } }
+
+template <unsigned N> struct A;
+
+template <typename U, typename V>
+char foo(U, V);
+
+// { dg-final { scan-assembler "_Z3barIiEvP1AIXszcl3foocvT__ELCi0_42EEEE" } }
+template <typename U>
+void bar(A<sizeof(foo(U(), 42i))> *);
+
+// { dg-final { scan-assembler "_Z3bazIiEvP1AIXszcl3foocvT__ELCf00000000_00000000EEEE" } }
+template <typename U>
+void baz(A<sizeof(foo(U(), 0.0fj))> *);
+
+int main() {
+   bar<int>(0);
+   baz<int>(0);
+}