re PR c++/2184 (using declarations for classes in function templates)
authorNathan Sidwell <nathan@codesourcery.com>
Thu, 24 May 2001 12:00:52 +0000 (12:00 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Thu, 24 May 2001 12:00:52 +0000 (12:00 +0000)
cp:
PR c++/2184
* decl2.c (do_local_using_decl): Push the decls, even in a
template.
testsuite:
* g++.old-deja/g++.pt/using1.C: Adjust.
* g++.old-deja/g++.pt/using2.C: New test.

From-SVN: r42526

gcc/cp/ChangeLog
gcc/cp/decl2.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.old-deja/g++.pt/using1.C
gcc/testsuite/g++.old-deja/g++.pt/using2.C [new file with mode: 0644]

index 4f3391eca8a62942f79d1063f795106e4c0fd882..577cf532fa9031b3a108d0dafd8e50572f5d643f 100644 (file)
@@ -1,3 +1,9 @@
+2001-05-24  Nathan Sidwell  <nathan@codesourcery.com>
+
+       PR c++/2184
+       * decl2.c (do_local_using_decl): Push the decls, even in a
+       template.
+
 2001-05-22  Mark Mitchell  <mark@codesourcery.com>
 
        * optimize.c (initialize_inlined_parameters): Don't set
index ba98dc5e7e798817fe7c558023d81e1078b9b72d..0245bc0755c97ee7c1178e88aeb86422dd241706 100644 (file)
@@ -5136,8 +5136,6 @@ do_local_using_decl (decl)
   if (building_stmt_tree ()
       && at_function_scope_p ())
     add_decl_stmt (decl);
-  if (processing_template_decl)
-    return;
 
   oldval = lookup_name_current_level (name);
   oldtype = lookup_type_current_level (name);
index 826918ea64e18a6ee55ac4240787bd6255c79ede..8f74ba35143ed7b0a5cd3568841f0fe261e633ea 100644 (file)
@@ -1,3 +1,8 @@
+2001-05-24  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * g++.old-deja/g++.pt/using1.C: Adjust.
+       * g++.old-deja/g++.pt/using2.C: New test.
+
 2001-05-23  Neil Booth  <neil@daikokuya.demon.co.uk>
 
        * gcc.dg/cpp/charconst.c: New tests.
index eca6c5012144f0c5f3337b91be09f59d4ba5158f..632fca00a45e82ce51d104f8ca869d49028af30a 100644 (file)
@@ -15,6 +15,8 @@ template <class T> void f()
 
 template void f<float> ();
 
+int foo (int) { return 0;}
+
 namespace B
 {
   int foo (int) { return 1;}
@@ -28,8 +30,6 @@ namespace B
   template int baz<float> ();
 };
 
-int foo (int) { return 0;}
-
 int main ()
 {
   return B::baz<float> ();
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/using2.C b/gcc/testsuite/g++.old-deja/g++.pt/using2.C
new file mode 100644 (file)
index 0000000..5d47b75
--- /dev/null
@@ -0,0 +1,26 @@
+// Build don't link:
+// 
+// Copyright (C) 2001 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 22 May 2001 <nathan@codesourcery.com>
+
+// Bug 2184. Using decls in templates weren't doing the right thing.
+
+namespace N {
+  template <class T>
+  class vector {};
+}
+
+void g(const int&) {
+  using N::vector;
+  typedef vector<int> V;
+}
+
+template <class J>
+void f(const J&) {
+  using N::vector;
+  typedef vector<int> V;
+}
+
+int main() {
+  f(0);
+}