forked from OSchip/llvm-project
Pass additional information around the uninitialized field visitor.
llvm-svn: 190805
This commit is contained in:
parent
81e3294e7e
commit
fd68777c7b
|
@ -2085,7 +2085,10 @@ namespace {
|
||||||
isReferenceType = this->VD->getType()->isReferenceType();
|
isReferenceType = this->VD->getType()->isReferenceType();
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandleMemberExpr(MemberExpr *ME) {
|
void HandleMemberExpr(MemberExpr *ME, bool CheckReferenceOnly) {
|
||||||
|
if (CheckReferenceOnly && !isReferenceType)
|
||||||
|
return;
|
||||||
|
|
||||||
if (isa<EnumConstantDecl>(ME->getMemberDecl()))
|
if (isa<EnumConstantDecl>(ME->getMemberDecl()))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -2107,8 +2110,11 @@ namespace {
|
||||||
Base = ME->getBase();
|
Base = ME->getBase();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (VD == FieldME->getMemberDecl() && isa<CXXThisExpr>(Base)) {
|
if (!isa<CXXThisExpr>(Base))
|
||||||
unsigned diag = VD->getType()->isReferenceType()
|
return;
|
||||||
|
|
||||||
|
if (VD == FieldME->getMemberDecl()) {
|
||||||
|
unsigned diag = isReferenceType
|
||||||
? diag::warn_reference_field_is_uninit
|
? diag::warn_reference_field_is_uninit
|
||||||
: diag::warn_field_is_uninit;
|
: diag::warn_field_is_uninit;
|
||||||
S.Diag(FieldME->getExprLoc(), diag) << VD;
|
S.Diag(FieldME->getExprLoc(), diag) << VD;
|
||||||
|
@ -2119,7 +2125,7 @@ namespace {
|
||||||
E = E->IgnoreParens();
|
E = E->IgnoreParens();
|
||||||
|
|
||||||
if (MemberExpr *ME = dyn_cast<MemberExpr>(E)) {
|
if (MemberExpr *ME = dyn_cast<MemberExpr>(E)) {
|
||||||
HandleMemberExpr(ME);
|
HandleMemberExpr(ME, false /*CheckReferenceOnly*/);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2152,8 +2158,7 @@ namespace {
|
||||||
}
|
}
|
||||||
|
|
||||||
void VisitMemberExpr(MemberExpr *ME) {
|
void VisitMemberExpr(MemberExpr *ME) {
|
||||||
if (isReferenceType)
|
HandleMemberExpr(ME, true /*CheckReferenceOnly*/);
|
||||||
HandleMemberExpr(ME);
|
|
||||||
|
|
||||||
Inherited::VisitMemberExpr(ME);
|
Inherited::VisitMemberExpr(ME);
|
||||||
}
|
}
|
||||||
|
@ -2170,7 +2175,7 @@ namespace {
|
||||||
if (ImplicitCastExpr* ICE = dyn_cast<ImplicitCastExpr>(E->getArg(0)))
|
if (ImplicitCastExpr* ICE = dyn_cast<ImplicitCastExpr>(E->getArg(0)))
|
||||||
if (ICE->getCastKind() == CK_NoOp)
|
if (ICE->getCastKind() == CK_NoOp)
|
||||||
if (MemberExpr *ME = dyn_cast<MemberExpr>(ICE->getSubExpr()))
|
if (MemberExpr *ME = dyn_cast<MemberExpr>(ICE->getSubExpr()))
|
||||||
HandleMemberExpr(ME);
|
HandleMemberExpr(ME, false /*CheckReferenceOnly*/);
|
||||||
|
|
||||||
Inherited::VisitCXXConstructExpr(E);
|
Inherited::VisitCXXConstructExpr(E);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue