aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/decl2.c1
-rw-r--r--gcc/cp/parser.c11
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-debug-0.C11
5 files changed, 32 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 58241a8..6445bef 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2011-11-09 Dodji Seketeli <dodji@redhat.com>
+
+ PR debug/51032
+ * decl2.c (check_member_template): Accept alias templates and ...
+ * parser.c (cp_parser_alias_declaration): ... use it here.
+
2011-11-08 Jason Merrill <jason@redhat.com>
PR c++/50835
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 3dc5a69..4e24755 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -495,6 +495,7 @@ check_member_template (tree tmpl)
decl = DECL_TEMPLATE_RESULT (tmpl);
if (TREE_CODE (decl) == FUNCTION_DECL
+ || DECL_ALIAS_TEMPLATE_P (tmpl)
|| (TREE_CODE (decl) == TYPE_DECL
&& MAYBE_CLASS_TYPE_P (TREE_TYPE (decl))))
{
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 12f3c40..fde4c6d 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -14932,6 +14932,7 @@ cp_parser_alias_declaration (cp_parser* parser)
location_t id_location;
cp_declarator *declarator;
cp_decl_specifier_seq decl_specs;
+ bool member_p;
/* Look for the `using' keyword. */
cp_parser_require_keyword (parser, RID_USING, RT_USING);
@@ -14957,7 +14958,8 @@ cp_parser_alias_declaration (cp_parser* parser)
declarator = make_id_declarator (NULL_TREE, id, sfk_none);
declarator->id_loc = id_location;
- if (at_class_scope_p ())
+ member_p = at_class_scope_p ();
+ if (member_p)
decl = grokfield (declarator, &decl_specs, NULL_TREE, false,
NULL_TREE, attributes);
else
@@ -14976,7 +14978,12 @@ cp_parser_alias_declaration (cp_parser* parser)
if (DECL_LANG_SPECIFIC (decl)
&& DECL_TEMPLATE_INFO (decl)
&& PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
- decl = DECL_TI_TEMPLATE (decl);
+ {
+ decl = DECL_TI_TEMPLATE (decl);
+ if (member_p)
+ check_member_template (decl);
+ }
+
return decl;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 80a3662..4abcf07 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-11-09 Dodji Seketeli <dodji@redhat.com>
+
+ PR debug/51032
+ * g++.dg/cpp0x/alias-decl-debug-0.C: New test.
+
2011-11-09 Ira Rosen <ira.rosen@linaro.org>
PR tree-optimization/51015
diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-debug-0.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-debug-0.C
new file mode 100644
index 0000000..4c00bdd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-debug-0.C
@@ -0,0 +1,11 @@
+// Origin: PR c++/51032
+// { dg-options "-std=c++0x -gstabs+" }
+
+template <class C>
+struct A {
+ template<class U> using B = U*;
+ int a;
+};
+
+A<int> a;
+