diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/mangle.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/mangle49.C | 22 |
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_" } } |