forked from OSchip/llvm-project
Bugfix: bogus warning -- "invalid use of non-static data member",
when a class is forward declared, and the reference to the data member in question does not occur within a method body. llvm-svn: 151413
This commit is contained in:
parent
78e72f08ec
commit
5b330db270
|
@ -173,7 +173,8 @@ static IMAKind ClassifyImplicitMemberAccess(Sema &SemaRef,
|
|||
// ...if C is not X or a base class of X, the class member access expression
|
||||
// is ill-formed.
|
||||
if (R.getNamingClass() &&
|
||||
contextClass != R.getNamingClass()->getCanonicalDecl() &&
|
||||
contextClass->getCanonicalDecl() !=
|
||||
R.getNamingClass()->getCanonicalDecl() &&
|
||||
contextClass->isProvablyNotDerivedFrom(R.getNamingClass()))
|
||||
return (hasNonInstance ? IMA_Mixed_Unrelated : IMA_Error_Unrelated);
|
||||
|
||||
|
|
|
@ -26,3 +26,14 @@ namespace rdar8367341 {
|
|||
static constexpr float y2 = foo(); // expected-error {{must be initialized by a constant expression}} expected-note {{non-constexpr function 'foo'}}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
namespace Foo {
|
||||
// Regression test -- forward declaration of Foo should not cause error about
|
||||
// nonstatic data member.
|
||||
class Foo;
|
||||
class Foo {
|
||||
int x;
|
||||
int y = x;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -2100,3 +2100,17 @@ public:
|
|||
} // end namespace SelfLockingTest
|
||||
|
||||
|
||||
namespace InvalidNonstatic {
|
||||
|
||||
// Forward decl here causes bogus "invalid use of non-static data member"
|
||||
// on reference to mutex_ in guarded_by attribute.
|
||||
class Foo;
|
||||
|
||||
class Foo {
|
||||
Mutex* mutex_;
|
||||
|
||||
int foo __attribute__((guarded_by(mutex_)));
|
||||
};
|
||||
|
||||
} // end namespace InvalidNonStatic
|
||||
|
||||
|
|
Loading…
Reference in New Issue