re PR c++/12397 (two-stage name lookup argument shadowed by global type)
authorMark Mitchell <mark@codesourcery.com>
Mon, 22 Dec 2003 20:52:55 +0000 (20:52 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Mon, 22 Dec 2003 20:52:55 +0000 (20:52 +0000)
PR c++/12397
* typeck.c (finish_class_member_access_expr): Don't tree
IDENTIFIER_NODEs as non-dependent expressions.

PR c++/12397
* g++.dg/template/lookup3.C: New test.

From-SVN: r74949

gcc/cp/ChangeLog
gcc/cp/typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/lookup3.C [new file with mode: 0644]

index defadd5d34f0af6d42800491f0af768629548534..4e4864fd24ad329d018129fe4c1abe7fc7c0ab1b 100644 (file)
@@ -1,3 +1,9 @@
+2003-12-22  Mark Mitchell  <mark@codesourcery.com>
+
+       PR c++/12397
+       * typeck.c (finish_class_member_access_expr): Don't tree
+       IDENTIFIER_NODEs as non-dependent expressions.
+
 2003-12-22  Andrew Pinski  <pinskia@physics.uc.edu>
 
        PR c++/5050
index b76d5360e12a28d8582155f353f3bde64530f52c..3cdfdc297d8404afd31429f0bc6b04f475372a67 100644 (file)
@@ -1809,6 +1809,9 @@ finish_class_member_access_expr (tree object, tree name)
     {
       if (/* If OBJECT_TYPE is dependent, so is OBJECT.NAME.  */
          dependent_type_p (object_type)
+         /* If NAME is just an IDENTIFIER_NODE, then the expression
+            is dependent.  */
+         || TREE_CODE (object) == IDENTIFIER_NODE
          /* If NAME is "f<args>", where either 'f' or 'args' is
             dependent, then the expression is dependent.  */
          || (TREE_CODE (name) == TEMPLATE_ID_EXPR
index 640c307d2b7a9c1a0cd24a08a574d8bd6d181ffb..f3765698ea9a0f160b391419120d54ac8fe151e3 100644 (file)
@@ -1,3 +1,8 @@
+2003-12-22  Mark Mitchell  <mark@codesourcery.com>
+
+       PR c++/12397
+       * g++.dg/template/lookup3.C: New test.
+
 2003-12-22  Andrew Pinski  <pinskia@physics.uc.edu>
 
        * g++.dg/template/recurse1.C: New test
diff --git a/gcc/testsuite/g++.dg/template/lookup3.C b/gcc/testsuite/g++.dg/template/lookup3.C
new file mode 100644 (file)
index 0000000..c96a0b0
--- /dev/null
@@ -0,0 +1,16 @@
+// PR c++/12397
+
+struct foo { }; 
+template <typename T> struct bar 
+{ 
+  bar(){} 
+  int i; 
+  bar (const bar<T>& foo) : i (foo.i) {} 
+}; 
+int main() 
+{ 
+  bar<int> b1; 
+  bar<int> b2(b1); 
+}