|
@@ -6616,7 +6616,7 @@ static void handleGslAnnotatedTypes(IndirectLocalPath &Path, Expr *Call,
|
|
return;
|
|
return;
|
|
} else if (auto *OCE = dyn_cast<CXXOperatorCallExpr>(Call)) {
|
|
} else if (auto *OCE = dyn_cast<CXXOperatorCallExpr>(Call)) {
|
|
FunctionDecl *Callee = OCE->getDirectCallee();
|
|
FunctionDecl *Callee = OCE->getDirectCallee();
|
|
- if (Callee->isCXXInstanceMember() &&
|
|
|
|
|
|
+ if (Callee && Callee->isCXXInstanceMember() &&
|
|
shouldTrackImplicitObjectArg(cast<CXXMethodDecl>(Callee)))
|
|
shouldTrackImplicitObjectArg(cast<CXXMethodDecl>(Callee)))
|
|
VisitPointerArg(Callee, OCE->getArg(0));
|
|
VisitPointerArg(Callee, OCE->getArg(0));
|
|
return;
|
|
return;
|
|
@@ -7070,8 +7070,11 @@ static SourceRange nextPathEntryRange(const IndirectLocalPath &Path, unsigned I,
|
|
// supporting lifetime extension.
|
|
// supporting lifetime extension.
|
|
break;
|
|
break;
|
|
|
|
|
|
- case IndirectLocalPathEntry::DefaultInit:
|
|
|
|
case IndirectLocalPathEntry::VarInit:
|
|
case IndirectLocalPathEntry::VarInit:
|
|
|
|
+ if (cast<VarDecl>(Path[I].D)->isImplicit())
|
|
|
|
+ return SourceRange();
|
|
|
|
+ LLVM_FALLTHROUGH;
|
|
|
|
+ case IndirectLocalPathEntry::DefaultInit:
|
|
return Path[I].E->getSourceRange();
|
|
return Path[I].E->getSourceRange();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -7133,7 +7136,7 @@ void Sema::checkInitializerLifetime(const InitializedEntity &Entity,
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
- if (IsGslPtrInitWithGslTempOwner) {
|
|
|
|
|
|
+ if (IsGslPtrInitWithGslTempOwner && DiagLoc.isValid()) {
|
|
Diag(DiagLoc, diag::warn_dangling_lifetime_pointer) << DiagRange;
|
|
Diag(DiagLoc, diag::warn_dangling_lifetime_pointer) << DiagRange;
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|