aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2012-03-03 19:55:31 -0500
committerJason Merrill <jason@gcc.gnu.org>2012-03-03 19:55:31 -0500
commit77d4d7c577db67e9c831d4aab154549f8e96fe3b (patch)
tree568dda02d6d59cba304d6ad57b988014e0e7c25e
parent57910f3a9a81e9ad122a814255197f6f24c6af08 (diff)
downloadgcc-77d4d7c577db67e9c831d4aab154549f8e96fe3b.zip
gcc-77d4d7c577db67e9c831d4aab154549f8e96fe3b.tar.gz
gcc-77d4d7c577db67e9c831d4aab154549f8e96fe3b.tar.bz2
re PR c++/36797 (ICE mangling __is_empty)
PR c++/36797 * mangle.c (write_expression): Improve diagnostic for TRAIT_EXPR. From-SVN: r184874
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/mangle.c12
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/ext/is_empty2.C11
4 files changed, 30 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 4674ba7..af3434d 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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.
diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c
index 34f19ef..04f4344 100644
--- a/gcc/cp/mangle.c
+++ b/gcc/cp/mangle.c
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 090be61..595bc98 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..d1bf64c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/is_empty2.C
@@ -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>();
+}