Revert the attempted fix for c++/69855, it breaks bootstrap.
authorVille Voutilainen <ville@gcc.gnu.org>
Sat, 28 May 2016 08:22:15 +0000 (11:22 +0300)
committerVille Voutilainen <ville@gcc.gnu.org>
Sat, 28 May 2016 08:22:15 +0000 (11:22 +0300)
From-SVN: r236844

gcc/cp/name-lookup.c
gcc/testsuite/g++.dg/overload/69855.C [deleted file]
gcc/testsuite/g++.old-deja/g++.law/missed-error2.C
gcc/testsuite/g++.old-deja/g++.pt/crash3.C

index 11733700627575b1f4f812648df60de7f730204a..cbd520955751dea6ec833bc43e8ee91ef950b2c7 100644 (file)
@@ -929,24 +929,6 @@ pushdecl_maybe_friend_1 (tree x, bool is_friend)
              DECL_ANTICIPATED (t) = 1;
              DECL_HIDDEN_FRIEND_P (t) = 1;
            }
-
-         if (TREE_CODE (x) == FUNCTION_DECL
-             && DECL_LOCAL_FUNCTION_P (x)
-             && !DECL_OMP_DECLARE_REDUCTION_P (x)
-             && !type_dependent_expression_p (x))
-           {
-             /* PR c++/69855, a local function declaration
-                is stripped from template info and pushed to
-                the local scope as a hidden declaration. This
-                allows ill-formed overloads even in other scopes
-                to be diagnosed both at the local declaration site
-                and after it.  */
-             tree t2 = copy_decl (t);
-             DECL_USE_TEMPLATE (t2) = 0;
-             DECL_TEMPLATE_INFO (t2) = NULL_TREE;
-             DECL_ANTICIPATED (t2) = 1;
-             push_overloaded_decl (t2, PUSH_GLOBAL, is_friend);
-           }
        }
 
       if (t != x || DECL_FUNCTION_TEMPLATE_P (t))
diff --git a/gcc/testsuite/g++.dg/overload/69855.C b/gcc/testsuite/g++.dg/overload/69855.C
deleted file mode 100644 (file)
index dc2d733..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-// PR c++/69855
-// { dg-do compile }
-
-int get();
-void f() {
-  char get(); // { dg-error "ambiguating" }
-}
-
-int get2();
-char get2(int);
-void f2() {
-  char get2(); // { dg-error "ambiguating" }
-}
-
-char get3(int);
-void f3() {
-  char get3();
-}
-
-void f4() {
-  char get4();
-}
-int get4(); // { dg-error "ambiguating" }
-
-void get5();
-
-template <class T> struct X
-{
-  void g()
-  {
-    int get5(); // { dg-error "ambiguating" }
-  }
-};
-
-
-template <class T> struct X2
-{
-  void g()
-  {
-    int get6();
-  }
-};
-
-void get6(); // { dg-error "ambiguating" }
index 26ae87d7a2e0930fbed5732e740ea109eb5d200f..42f70aeb997d6188b96fa8c89ea555237a85d746 100644 (file)
@@ -25,10 +25,9 @@ int main() {
    foo(4, -37, 14.39, 14.38);
 }
 
-// 971006 we no longer gave an error for this since we emit a hard error
-// about the declaration above, but after the fix for PR c++/69855
-// this declaration emits a diagnostic again
-static void foo(int i, int j, double x, double y) { // { dg-error "extern|static" }
+// 971006 we no longer give an error for this since we emit a hard error
+// about the declaration above
+static void foo(int i, int j, double x, double y) { 
 
    std::cout << "Max(int): " << max(i,j) << " Max(double): " <<
 max(x,y) << '\n';
index 2ba61d9cdb973a20586798d258da62b3db3369a8..160cbe541a112a1b433ae6114900315bfec3264a 100644 (file)
@@ -10,7 +10,7 @@ public:
     }
     CVector<long> g() const
     {
-       CVector<long> v2();
-       return v2;
+       CVector<long> v();
+       return v;
     }
 };