aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2013-04-22 14:49:01 -0400
committerJason Merrill <jason@gcc.gnu.org>2013-04-22 14:49:01 -0400
commita7ddca92d62bca781fd6825829f76e12b0b66096 (patch)
tree8a11dc6ab64d648474542ee2af8d8c257161eec3 /gcc
parente973d6dda096c7eb417b7872d7e8299b4b7f5ef9 (diff)
downloadgcc-a7ddca92d62bca781fd6825829f76e12b0b66096.zip
gcc-a7ddca92d62bca781fd6825829f76e12b0b66096.tar.gz
gcc-a7ddca92d62bca781fd6825829f76e12b0b66096.tar.bz2
* mangle.c (write_type): Mangle decltype(auto).
From-SVN: r198150
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/mangle.c5
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/auto-mangle1.C12
3 files changed, 20 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 7e224ae..b4680c2 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,7 @@
+2013-04-22 Jason Merrill <jason@redhat.com>
+
+ * mangle.c (write_type): Mangle decltype(auto).
+
2013-04-19 Jason Merrill <jason@redhat.com>
N3638 changes to return type deduction
diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c
index 83c3e62..8da62b5 100644
--- a/gcc/cp/mangle.c
+++ b/gcc/cp/mangle.c
@@ -2019,7 +2019,10 @@ write_type (tree type)
case TEMPLATE_TYPE_PARM:
if (is_auto (type))
{
- write_identifier ("Da");
+ if (AUTO_IS_DECLTYPE (type))
+ write_identifier ("Dc");
+ else
+ write_identifier ("Da");
++is_builtin_type;
break;
}
diff --git a/gcc/testsuite/g++.dg/cpp1y/auto-mangle1.C b/gcc/testsuite/g++.dg/cpp1y/auto-mangle1.C
new file mode 100644
index 0000000..834cfc3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/auto-mangle1.C
@@ -0,0 +1,12 @@
+// Mangling for decltype(auto)
+// { dg-options "-std=c++1y" }
+
+void f();
+
+// { dg-final { scan-assembler "_Z2g1IiEDcv" } }
+template <class T> decltype(auto) g1() { return &f; }
+template decltype(auto) g1<int>();
+
+// { dg-final { scan-assembler "_Z2g2IiEDav" } }
+template <class T> auto g2() { return &f; }
+template auto g2<int>();