Issue |
81792
|
Summary |
[-Wunsafe-buffer-usage] Incorrect fixit for unsafe pointer initialized with nullptr
|
Labels |
new issue
|
Assignees |
jkorous-apple
|
Reporter |
jkorous-apple
|
There is a typo in test file
https://github.com/llvm/llvm-project/blob/main/clang/test/SemaCXX/warn-unsafe-buffer-usage-fixits-local-var-span.cpp#L117
`{{^3}}` should be `{{[^3]}}`
(It is copy-pasted to 3 more places in the test file.)
Some of the test cases fail when fixed and unfortunately it masks a real bug in `FixVarInitializerWithSpan`.
```
// If `Init` has a constant value that is (or equivalent to) a
// NULL pointer, we use the default constructor to initialize the span
// object, i.e., a `std:span` variable declaration with no initializer.
// So the fix-it is just to remove the initializer.
if (Init->isNullPointerConstant(Ctx,
// FIXME: Why does this function not ask for `const ASTContext
// &`? It should. Maybe worth an NFC patch later.
Expr::NullPointerConstantValueDependence::
NPC_ValueDependentIsNotNull)) {
std::optional<SourceLocation> InitLocation =
getEndCharLoc(Init, SM, LangOpts);
if (!InitLocation)
return {};
SourceRange SR(Init->getBeginLoc(), *InitLocation);
```
The problem is that for this form of initialization `int * ptr = nullptr;` the fixit removes only the "nullptr" but leaves "=" which makes the code syntactically invalid.
I can't think of a simple-enough solution that would cover all cases so filing issue for later.
`int * ptr = nullptr;`
`int * ptr {nullptr};`
The latter form is likely very uncommon but we still need to account for it.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs