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:
DeLesley Hutchins 2012-02-25 00:11:55 +00:00
parent 78e72f08ec
commit 5b330db270
3 changed files with 27 additions and 1 deletions

View File

@ -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);

View File

@ -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;
};
}

View File

@ -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