aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2014-02-21 09:56:38 -0500
committerJason Merrill <jason@gcc.gnu.org>2014-02-21 09:56:38 -0500
commit1ea32974525999aa5b4a4550a74bef7849d9e9e1 (patch)
tree864102dc7e919b56136302a4168daf69a9723e9a
parent1c195d2a8fcc6161198e2be68293cd824051b063 (diff)
downloadgcc-1ea32974525999aa5b4a4550a74bef7849d9e9e1.zip
gcc-1ea32974525999aa5b4a4550a74bef7849d9e9e1.tar.gz
gcc-1ea32974525999aa5b4a4550a74bef7849d9e9e1.tar.bz2
re PR c++/60248 ([C++11] ICE specializing variadic template)
PR c++/60248 * mangle.c (mangle_decl): Don't make an alias for a TYPE_DECL. From-SVN: r208000
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/mangle.c1
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic149.C11
3 files changed, 15 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 28ce725..0dff516 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2014-02-21 Jason Merrill <jason@redhat.com>
+ PR c++/60248
+ * mangle.c (mangle_decl): Don't make an alias for a TYPE_DECL.
+
PR c++/60252
* lambda.c (maybe_resolve_dummy): Don't try to capture this
in declaration context.
diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c
index 7bb6f4b..251edb1 100644
--- a/gcc/cp/mangle.c
+++ b/gcc/cp/mangle.c
@@ -3485,6 +3485,7 @@ mangle_decl (const tree decl)
if (G.need_abi_warning
/* Don't do this for a fake symbol we aren't going to emit anyway. */
+ && TREE_CODE (decl) != TYPE_DECL
&& !DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
&& !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
{
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic149.C b/gcc/testsuite/g++.dg/cpp0x/variadic149.C
new file mode 100644
index 0000000..a250e7c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic149.C
@@ -0,0 +1,11 @@
+// PR c++/60248
+// { dg-options "-std=c++11 -g -fabi-version=2" }
+
+template<int...> struct A {};
+
+template<> struct A<0>
+{
+ typedef enum { e } B;
+};
+
+A<0> a;