forked from OSchip/llvm-project
Fixed Use-Nullptr when replacing return(0)
Before fix, the paren expression was being replaced resulting in returnnullptr. ParenExpr and implicit casts now ignored so we get return(nullptr) instead. Added new test cases. Fixes PR15398 Author: Ariel Bernal <ariel.j.bernal@intel.com> llvm-svn: 176551
This commit is contained in:
parent
a1c0a2a2c6
commit
105963d17c
|
@ -110,8 +110,10 @@ void NullptrFixer::run(const ast_matchers::MatchFinder::MatchResult &Result) {
|
|||
|
||||
const CastExpr *Cast = Result.Nodes.getNodeAs<CastExpr>(ImplicitCastNode);
|
||||
if (Cast) {
|
||||
SourceLocation StartLoc = Cast->getLocStart();
|
||||
SourceLocation EndLoc = Cast->getLocEnd();
|
||||
const Expr *E = Cast->IgnoreParenImpCasts();
|
||||
|
||||
SourceLocation StartLoc = E->getLocStart();
|
||||
SourceLocation EndLoc = E->getLocEnd();
|
||||
|
||||
// If the start/end location is a macro, get the expansion location.
|
||||
StartLoc = SM.getFileLoc(StartLoc);
|
||||
|
|
|
@ -204,3 +204,34 @@ void test_function_like_macro2() {
|
|||
// CHECK: my_macro(p != nullptr);
|
||||
#undef my_macro
|
||||
}
|
||||
|
||||
// Test parentheses expressions resulting in a nullptr.
|
||||
int *test_parentheses_expression1() {
|
||||
return(0);
|
||||
// CHECK: return(nullptr);
|
||||
}
|
||||
|
||||
int *test_parentheses_expression2() {
|
||||
return(int(0.f));
|
||||
// CHECK: return(nullptr);
|
||||
}
|
||||
|
||||
int *test_nested_parentheses_expression() {
|
||||
return((((0))));
|
||||
// CHECK: return((((nullptr))));
|
||||
}
|
||||
|
||||
void *test_parentheses_explicit_cast() {
|
||||
return(static_cast<void*>(0));
|
||||
// CHECK: return(nullptr);
|
||||
}
|
||||
|
||||
void *test_parentheses_explicit_cast_sequence1() {
|
||||
return(static_cast<void*>(static_cast<int*>((void*)NULL)));
|
||||
// CHECK: return(nullptr);
|
||||
}
|
||||
|
||||
void *test_parentheses_explicit_cast_sequence2() {
|
||||
return(static_cast<void*>(reinterpret_cast<int*>((float*)int(0.f))));
|
||||
// CHECK: return(nullptr);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue