re PR c++/36797 (ICE mangling __is_empty)
authorJason Merrill <jason@redhat.com>
Sun, 4 Mar 2012 00:55:31 +0000 (19:55 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Sun, 4 Mar 2012 00:55:31 +0000 (19:55 -0500)
PR c++/36797
* mangle.c (write_expression): Improve diagnostic for TRAIT_EXPR.

From-SVN: r184874

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

index 4674ba7b4395a37e93c9c0fe25a3de4b5be8a1e1..af3434d6d223f2e46d694bc552bb09effd4de8ac 100644 (file)
@@ -1,5 +1,8 @@
 2012-03-03  Jason Merrill  <jason@redhat.com>
 
+       PR c++/36797
+       * mangle.c (write_expression): Improve diagnostic for TRAIT_EXPR.
+
        * class.c (add_method): Always build an OVERLOAD for using-decls.
        * search.c (lookup_member): Handle getting an OVERLOAD for a
        single function.
index 34f19efc42e0432237ed333e11e4dc6c3d696b07..04f434436a2c7ad51fd0f3ae8ddd1e610fbd012c 100644 (file)
@@ -2808,7 +2808,17 @@ write_expression (tree expr)
 
       if (name == NULL)
        {
-         sorry ("mangling %C", code);
+         switch (code)
+           {
+           case TRAIT_EXPR:
+             error ("use of built-in trait %qE in function signature; "
+                    "use library traits instead", expr);
+             break;
+
+           default:
+             sorry ("mangling %C", code);
+             break;
+           }
          return;
        }
       else
index 090be6120aac49f9f37088db3197228b2b335c01..595bc982c718a672ed917a1c19eeb0e423fd317e 100644 (file)
@@ -1,3 +1,8 @@
+2012-03-03  Jason Merrill  <jason@redhat.com>
+
+       PR c++/36797
+       * g++.dg/ext/is_empty2.C: New.
+
 2012-03-03  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/48820
diff --git a/gcc/testsuite/g++.dg/ext/is_empty2.C b/gcc/testsuite/g++.dg/ext/is_empty2.C
new file mode 100644 (file)
index 0000000..d1bf64c
--- /dev/null
@@ -0,0 +1,11 @@
+// PR c++/36797
+
+template <int> struct A { };
+
+template <class T>
+int foo (A<__is_empty (T)>* = 0); // { dg-error "built-in trait" }
+
+int main ()
+{
+    foo<int>();
+}