summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2009-04-08 16:08:15 +0000
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2009-04-08 16:08:15 +0000
commitd0391daf761602b79315cca7045316515171dbbc (patch)
tree79752b2a66e9422d70efe39125b3a379bbca76e9
parentfc75802adc763956992cceb1c25ca375f96975f6 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/cp/error.c14
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/template/error40.C11
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 "" }
}