mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-12 01:18:53 +00:00
[Sema] Fix crash in unused-lambda-capture warning for VLAs
Summary: Clang was crashing when diagnosing an unused-lambda-capture for a VLA because From.getVariable() is null for the capture of a VLA bound. Warning about the VLA bound capture is not helpful, so only warn for the VLA itself. Fixes: PR35555 Reviewers: aaron.ballman, dim, rsmith Reviewed By: aaron.ballman, dim Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D41016 llvm-svn: 320396
This commit is contained in:
parent
dbe6c45fcd
commit
d900a0c4e2
@ -560,6 +560,7 @@ public:
|
||||
void markUsed(bool IsODRUse) { (IsODRUse ? ODRUsed : NonODRUsed) = true; }
|
||||
|
||||
VarDecl *getVariable() const {
|
||||
assert(isVariableCapture());
|
||||
return VarAndNestedAndThis.getPointer();
|
||||
}
|
||||
|
||||
|
@ -1481,6 +1481,9 @@ void Sema::DiagnoseUnusedLambdaCapture(const LambdaScopeInfo::Capture &From) {
|
||||
if (CaptureHasSideEffects(From))
|
||||
return;
|
||||
|
||||
if (From.isVLATypeCapture())
|
||||
return;
|
||||
|
||||
auto diag = Diag(From.getLocation(), diag::warn_unused_lambda_capture);
|
||||
if (From.isThisCapture())
|
||||
diag << "'this'";
|
||||
|
@ -191,3 +191,12 @@ void test_templated() {
|
||||
void test_use_template() {
|
||||
test_templated<int>(); // expected-note{{in instantiation of function template specialization 'test_templated<int>' requested here}}
|
||||
}
|
||||
|
||||
namespace pr35555 {
|
||||
int a;
|
||||
void b() {
|
||||
int c[a];
|
||||
auto vla_used = [&c] { return c[0]; };
|
||||
auto vla_unused = [&c] {}; // expected-warning{{lambda capture 'c' is not used}}
|
||||
}
|
||||
} // namespace pr35555
|
||||
|
Loading…
Reference in New Issue
Block a user