aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/mangle.c7
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/abi/mangle49.C22
4 files changed, 35 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 6dda726..4ce77d4 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2011-08-01 Jason Merrill <jason@redhat.com>
+ PR c++/49932
+ * mangle.c (write_prefix): Handle decltype.
+
PR c++/49924
* semantics.c (cxx_eval_vec_init_1): Fix logic.
diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c
index 4a83c9a..eb3f144 100644
--- a/gcc/cp/mangle.c
+++ b/gcc/cp/mangle.c
@@ -952,6 +952,7 @@ write_nested_name (const tree decl)
/* <prefix> ::= <prefix> <unqualified-name>
::= <template-param>
::= <template-prefix> <template-args>
+ ::= <decltype>
::= # empty
::= <substitution> */
@@ -968,6 +969,12 @@ write_prefix (const tree node)
MANGLE_TRACE_TREE ("prefix", node);
+ if (TREE_CODE (node) == DECLTYPE_TYPE)
+ {
+ write_type (node);
+ return;
+ }
+
if (find_substitution (node))
return;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e362644..4ff8a10 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2011-08-01 Jason Merrill <jason@redhat.com>
+ PR c++/49932
+ * g++.dg/abi/mangle49.C: New.
+
PR c++/49924
* g++.dg/cpp0x/constexpr-array4.C: New.
diff --git a/gcc/testsuite/g++.dg/abi/mangle49.C b/gcc/testsuite/g++.dg/abi/mangle49.C
new file mode 100644
index 0000000..a258dc2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/abi/mangle49.C
@@ -0,0 +1,22 @@
+// PR c++/49932
+// { dg-options "-std=c++0x -fabi-version=0" }
+
+template < typename T >
+auto
+f1( T x ) // ICE on here
+ -> typename decltype( x )::type {}
+
+template < typename T >
+typename decltype( T() )::type
+f2( T x ) {} // ICE on here
+
+struct S { typedef void type; };
+
+void g()
+{
+ f1( S() );
+ f2( S() );
+}
+
+// { dg-final { scan-assembler "_Z2f1I1SENDtfp_E4typeET_" } }
+// { dg-final { scan-assembler "_Z2f2I1SENDTcvT__EE4typeES1_" } }