re PR c++/54913 (qualified lookup in ctor of class template fails to find static...
authorJason Merrill <jason@redhat.com>
Thu, 6 Dec 2012 20:20:52 +0000 (15:20 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 6 Dec 2012 20:20:52 +0000 (15:20 -0500)
PR c++/54913
* semantics.c (finish_qualified_id_expr): convert_from_reference
after building a SCOPE_REF.

From-SVN: r194266

gcc/cp/ChangeLog
gcc/cp/semantics.c
gcc/testsuite/g++.dg/template/qualified-id6.C [new file with mode: 0644]

index d228fe2b2e98bf7c1d9861b5d89525769a4c875d..28f8c674d76e461fd8e15f55ead0499418a46f11 100644 (file)
@@ -1,3 +1,9 @@
+2012-12-06  Jason Merrill  <jason@redhat.com>
+
+       PR c++/54913
+       * semantics.c (finish_qualified_id_expr): convert_from_reference
+       after building a SCOPE_REF.
+
 2012-12-06  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/54207
index 248326733860cd0425157e49b247b6f73349e6f6..491d97c581aff037262af8a11abfc92befb1f33f 100644 (file)
@@ -1778,8 +1778,6 @@ finish_qualified_id_expr (tree qualifying_class,
     ;
   else
     {
-      expr = convert_from_reference (expr);
-
       /* In a template, return a SCOPE_REF for most qualified-ids
         so that we can check access at instantiation time.  But if
         we're looking at a member of the current instantiation, we
@@ -1790,6 +1788,8 @@ finish_qualified_id_expr (tree qualifying_class,
        expr = build_qualified_name (TREE_TYPE (expr),
                                     qualifying_class, expr,
                                     template_p);
+
+      expr = convert_from_reference (expr);
     }
 
   return expr;
diff --git a/gcc/testsuite/g++.dg/template/qualified-id6.C b/gcc/testsuite/g++.dg/template/qualified-id6.C
new file mode 100644 (file)
index 0000000..83be874
--- /dev/null
@@ -0,0 +1,14 @@
+// PR c++/54913
+
+struct E
+{
+  static const int& e;
+};
+
+template<typename>
+struct R
+{
+  R() { E::e; }
+};
+
+R<int> r;