mirror of git://gcc.gnu.org/git/gcc.git
Revert the attempted fix for c++/69855, it breaks bootstrap.
From-SVN: r236844
This commit is contained in:
parent
f3c82ff9a9
commit
cdfa2b24d2
|
|
@ -929,24 +929,6 @@ pushdecl_maybe_friend_1 (tree x, bool is_friend)
|
||||||
DECL_ANTICIPATED (t) = 1;
|
DECL_ANTICIPATED (t) = 1;
|
||||||
DECL_HIDDEN_FRIEND_P (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))
|
if (t != x || DECL_FUNCTION_TEMPLATE_P (t))
|
||||||
|
|
|
||||||
|
|
@ -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" }
|
|
||||||
|
|
@ -25,10 +25,9 @@ int main() {
|
||||||
foo(4, -37, 14.39, 14.38);
|
foo(4, -37, 14.39, 14.38);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 971006 we no longer gave an error for this since we emit a hard error
|
// 971006 we no longer give an error for this since we emit a hard error
|
||||||
// about the declaration above, but after the fix for PR c++/69855
|
// about the declaration above
|
||||||
// this declaration emits a diagnostic again
|
static void foo(int i, int j, double x, double y) {
|
||||||
static void foo(int i, int j, double x, double y) { // { dg-error "extern|static" }
|
|
||||||
|
|
||||||
std::cout << "Max(int): " << max(i,j) << " Max(double): " <<
|
std::cout << "Max(int): " << max(i,j) << " Max(double): " <<
|
||||||
max(x,y) << '\n';
|
max(x,y) << '\n';
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ public:
|
||||||
}
|
}
|
||||||
CVector<long> g() const
|
CVector<long> g() const
|
||||||
{
|
{
|
||||||
CVector<long> v2();
|
CVector<long> v();
|
||||||
return v2;
|
return v;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue