зеркало из https://github.com/microsoft/clang-1.git
Fix -Wuninitialized to catch the case of a class being initialized with a call
to its own member function. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152276 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
29f98b40ca
Коммит
ffea6b4560
|
@ -5993,7 +5993,8 @@ namespace {
|
|||
|
||||
void VisitMemberExpr(MemberExpr *E) {
|
||||
if (E->getType()->canDecayToPointerType()) return;
|
||||
if (isa<FieldDecl>(E->getMemberDecl()))
|
||||
ValueDecl *VD = E->getMemberDecl();
|
||||
if (isa<FieldDecl>(VD) || isa<CXXMethodDecl>(VD))
|
||||
if (DeclRefExpr *DRE
|
||||
= dyn_cast<DeclRefExpr>(E->getBase()->IgnoreParenImpCasts())) {
|
||||
HandleDeclRefExpr(DRE);
|
||||
|
|
|
@ -33,6 +33,7 @@ class A {
|
|||
int num;
|
||||
static int count;
|
||||
int get() const { return num; }
|
||||
int get2() { return num; }
|
||||
void set(int x) { num = x; }
|
||||
static int zero() { return 0; }
|
||||
|
||||
|
@ -67,6 +68,7 @@ void setupA() {
|
|||
A a14 = A(a14); // expected-warning {{variable 'a14' is uninitialized when used within its own initialization}}
|
||||
A a15 = getA(a15.num); // expected-warning {{variable 'a15' is uninitialized when used within its own initialization}}
|
||||
A a16(&a16.num); // expected-warning {{variable 'a16' is uninitialized when used within its own initialization}}
|
||||
A a17(a17.get2()); // expected-warning {{variable 'a17' is uninitialized when used within its own initialization}}
|
||||
}
|
||||
|
||||
struct B {
|
||||
|
|
Загрузка…
Ссылка в новой задаче