diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/mangle.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/auto-mangle1.C | 12 |
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>(); |