diff options
author | Jason Merrill <jason@redhat.com> | 2012-03-03 19:55:31 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2012-03-03 19:55:31 -0500 |
commit | 77d4d7c577db67e9c831d4aab154549f8e96fe3b (patch) | |
tree | 568dda02d6d59cba304d6ad57b988014e0e7c25e | |
parent | 57910f3a9a81e9ad122a814255197f6f24c6af08 (diff) | |
download | gcc-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/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/mangle.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/is_empty2.C | 11 |
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>(); +} |