[-Wunsafe-buffer-usage] Replace assert that declarations are always found

Differential Revision: https://reviews.llvm.org/D157018
This commit is contained in:
Rashmi Mudduluru 2023-08-07 17:10:32 -07:00
parent d687caae00
commit cf1c64b94d
2 changed files with 18 additions and 2 deletions

View File

@ -888,7 +888,8 @@ public:
const DeclStmt *lookupDecl(const VarDecl *VD) const {
auto It = Defs.find(VD);
assert(It != Defs.end() && "Definition never discovered!");
if (It == Defs.end())
return nullptr;
return It->second;
}
};
@ -2053,7 +2054,10 @@ static FixItList fixVariableWithSpan(const VarDecl *VD,
ASTContext &Ctx,
UnsafeBufferUsageHandler &Handler) {
const DeclStmt *DS = Tracker.lookupDecl(VD);
assert(DS && "Fixing non-local variables not implemented yet!");
if (!DS) {
DEBUG_NOTE_DECL_FAIL(VD, " : variables declared this way not implemented yet");
return {};
}
if (!DS->isSingleDecl()) {
// FIXME: to support handling multiple `VarDecl`s in a single `DeclStmt`
DEBUG_NOTE_DECL_FAIL(VD, " : multiple VarDecls");

View File

@ -66,3 +66,15 @@ void implied_unclaimed_var(int *b) { // expected-warning{{'b' is an unsafe poin
b++; // expected-note{{used in pointer arithmetic here}} \
// debug-note{{safe buffers debug: failed to produce fixit for 'b' : has an unclaimed use}}
}
int *a = new int[3]; // expected-warning{{'a' is an unsafe pointer used for buffer access}} \
// debug-note{{safe buffers debug: failed to produce fixit for 'a' : neither local nor a parameter}}
void test_globals() {
a[7] = 4; // expected-note{{used in buffer access here}}
}
void test_decomp_decl() {
int a[2] = {1, 2};
auto [x, y] = a;
x = 9;
}