forked from OSchip/llvm-project
Updating a comment related to the implementation of -Woverloaded-virtual, and adding a FIXME to a test case. (Drive-by removal of trailing whitespace in the test case as well.)
No functional changes. llvm-svn: 214362
This commit is contained in:
parent
293cbf6ffe
commit
04559a7941
|
@ -5945,7 +5945,14 @@ static bool FindHiddenVirtualMethod(const CXXBaseSpecifier *Specifier,
|
|||
if (!MD->isVirtual())
|
||||
continue;
|
||||
// If the method we are checking overrides a method from its base
|
||||
// don't warn about the other overloaded methods.
|
||||
// don't warn about the other overloaded methods. Clang deviates from GCC
|
||||
// by only diagnosing overloads of inherited virtual functions that do not
|
||||
// override any other virtual functions in the base. GCC's
|
||||
// -Woverloaded-virtual diagnoses any derived function hiding a virtual
|
||||
// function from a base class. These cases may be better served by a
|
||||
// warning (not specific to virtual functions) on call sites when the call
|
||||
// would select a different function from the base class, were it visible.
|
||||
// See FIXME in test/SemaCXX/warn-overload-virtual.cpp for an example.
|
||||
if (!Data.S->IsOverload(Data.Method, MD, false))
|
||||
return true;
|
||||
// Collect the overload only if its hidden.
|
||||
|
|
|
@ -48,8 +48,8 @@ struct Base {
|
|||
void Base::foo(int) { }
|
||||
|
||||
struct Derived : public Base {
|
||||
virtual void foo(int);
|
||||
void foo(int, int);
|
||||
virtual void foo(int);
|
||||
void foo(int, int);
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -138,3 +138,21 @@ namespace {
|
|||
// expected-warning@-1{{hides overloaded virtual functions}}
|
||||
};
|
||||
}
|
||||
|
||||
namespace {
|
||||
struct base {
|
||||
void f(char) {}
|
||||
};
|
||||
|
||||
struct derived : base {
|
||||
void f(int) {}
|
||||
};
|
||||
|
||||
void foo(derived &d) {
|
||||
d.f('1'); // FIXME: this should warn about calling (anonymous namespace)::derived::f(int)
|
||||
// instead of (anonymous namespace)::base::f(char).
|
||||
// Note: this should be under a new diagnostic flag and eventually moved to a
|
||||
// new test case since it's not strictly related to virtual functions.
|
||||
d.f(12); // This should not warn.
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue