r311855 - revert changes from r311851.
Faisal Vali via cfe-commits
cfe-commits at lists.llvm.org
Sun Aug 27 12:00:08 PDT 2017
Author: faisalv
Date: Sun Aug 27 12:00:08 2017
New Revision: 311855
URL: http://llvm.org/viewvc/llvm-project?rev=311855&view=rev
Log:
revert changes from r311851.
The right answers here (and how clang needs to be tweaked) require further analysis (ongoing cwg thread).
sorry.
Modified:
cfe/trunk/lib/Sema/SemaExprMember.cpp
cfe/trunk/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp
Modified: cfe/trunk/lib/Sema/SemaExprMember.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprMember.cpp?rev=311855&r1=311854&r2=311855&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExprMember.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExprMember.cpp Sun Aug 27 12:00:08 2017
@@ -102,15 +102,15 @@ static IMAKind ClassifyImplicitMemberAcc
bool hasNonInstance = false;
bool isField = false;
BaseSet Classes;
- for (const NamedDecl *const D : R) {
+ for (NamedDecl *D : R) {
+ // Look through any using decls.
+ D = D->getUnderlyingDecl();
+
if (D->isCXXInstanceMember()) {
- // Look through any using decls.
- const NamedDecl *const UnderlyingDecl = D->getUnderlyingDecl();
- isField |= isa<FieldDecl>(UnderlyingDecl) ||
- isa<MSPropertyDecl>(UnderlyingDecl) ||
- isa<IndirectFieldDecl>(UnderlyingDecl);
+ isField |= isa<FieldDecl>(D) || isa<MSPropertyDecl>(D) ||
+ isa<IndirectFieldDecl>(D);
- const CXXRecordDecl *R = cast<CXXRecordDecl>(D->getDeclContext());
+ CXXRecordDecl *R = cast<CXXRecordDecl>(D->getDeclContext());
Classes.insert(R->getCanonicalDecl());
} else
hasNonInstance = true;
Modified: cfe/trunk/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp?rev=311855&r1=311854&r2=311855&view=diff
==============================================================================
--- cfe/trunk/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp (original)
+++ cfe/trunk/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp Sun Aug 27 12:00:08 2017
@@ -64,26 +64,17 @@ namespace test2 {
template <class T> struct A {
void foo();
- void foo2();
- static void static_foo();
- static void static_foo2();
-
+
void test0() {
Unrelated::foo(); // expected-error {{call to non-static member function without an object argument}}
}
void test1() {
B<T>::foo();
- B<T>::foo2(); // expected-error {{call to non-static member function without an object argument}}
- B<T>::static_foo();
- B<T>::static_foo2();
}
static void test2() {
B<T>::foo(); // expected-error {{call to non-static member function without an object argument}}
- B<T>::foo2(); // expected-error {{call to non-static member function without an object argument}}
- B<T>::static_foo();
- B<T>::static_foo2();
}
void test3() {
@@ -92,17 +83,15 @@ namespace test2 {
};
template <class T> struct B : A<T> {
- using A<T>::foo2;
- using A<T>::static_foo2;
};
-
+
template <class T> struct C {
};
int test() {
A<int> a;
a.test0(); // no instantiation note here, decl is ill-formed
- a.test1(); // expected-note {{in instantiation}}
+ a.test1();
a.test2(); // expected-note {{in instantiation}}
a.test3(); // expected-note {{in instantiation}}
}
More information about the cfe-commits
mailing list