diff options
author | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-04-08 16:08:15 +0000 |
---|---|---|
committer | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-04-08 16:08:15 +0000 |
commit | d0391daf761602b79315cca7045316515171dbbc (patch) | |
tree | 79752b2a66e9422d70efe39125b3a379bbca76e9 | |
parent | fc75802adc763956992cceb1c25ca375f96975f6 (diff) | |
download | gcc-d0391daf761602b79315cca7045316515171dbbc.tar.gz |
PR c++/25185
* error.c (dump_aggr_type): Chase template typedefs if
-fno-pretty-templates.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@145753 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/error.c | 14 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/error40.C | 11 |
4 files changed, 33 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 22d1ced46dd..b11e0049796 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2009-04-08 Jason Merrill <jason@redhat.com> + + PR c++/25185 + * error.c (dump_aggr_type): Chase template typedefs if + -fno-pretty-templates. + 2009-04-08 Dodji Seketeli <dodji@redhat.com> PR c++/39637 diff --git a/gcc/cp/error.c b/gcc/cp/error.c index fc32d99b50e..9c2e7e5a865 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -537,14 +537,22 @@ dump_aggr_type (tree t, int flags) if (flags & TFF_CLASS_KEY_OR_ENUM) pp_cxx_identifier (cxx_pp, variety); - if (flags & TFF_CHASE_TYPEDEF) - t = TYPE_MAIN_VARIANT (t); - name = TYPE_NAME (t); if (name) { typdef = !DECL_ARTIFICIAL (name); + + if (typdef + && ((flags & TFF_CHASE_TYPEDEF) + || (!flag_pretty_templates && DECL_LANG_SPECIFIC (name) + && DECL_TEMPLATE_INFO (name)))) + { + t = TYPE_MAIN_VARIANT (t); + name = TYPE_NAME (t); + typdef = 0; + } + tmplate = !typdef && TREE_CODE (t) != ENUMERAL_TYPE && TYPE_LANG_SPECIFIC (t) && CLASSTYPE_TEMPLATE_INFO (t) && (TREE_CODE (CLASSTYPE_TI_TEMPLATE (t)) != TEMPLATE_DECL diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 48269e9d7d9..646ee1f04c7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-04-08 Jason Merrill <jason@redhat.com> + + PR c++/25185 + * g++.dg/template/error40.C: Add another test. + 2009-04-08 Joseph Myers <joseph@codesourcery.com> PR c/39614 diff --git a/gcc/testsuite/g++.dg/template/error40.C b/gcc/testsuite/g++.dg/template/error40.C index f449832063f..c5df56fc1be 100644 --- a/gcc/testsuite/g++.dg/template/error40.C +++ b/gcc/testsuite/g++.dg/template/error40.C @@ -3,6 +3,7 @@ template <class T, int N=0, int X=1> struct A { + struct AN; }; void foo(void) @@ -13,7 +14,17 @@ void foo(void) template <class T> T f(T); // { dg-message "int f<int>.int." } template <class T> T f(T, int = 0); // { dg-message "" } +template <class T> +struct B +{ + typedef typename T::AN BN; + + BN f(); // { dg-message "AN" } + BN f(int = 0); // { dg-message "" } +}; + int main() { f(1); // { dg-error "" } + B<A<int> >().f(); // { dg-error "" } } |