Pull in r320396 from upstream clang trunk (by Malcolm Parsons):

[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

This fixes a segfault when building recent audio/zynaddsubfx port
versions.

Reported by:	hps
MFC after:	3 days
This commit is contained in:
Dimitry Andric 2017-12-11 20:04:40 +00:00
parent 06c47d48dc
commit 9ce629675f
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=326776
2 changed files with 4 additions and 0 deletions

View file

@ -560,6 +560,7 @@ class CapturingScopeInfo : public FunctionScopeInfo {
void markUsed(bool IsODRUse) { (IsODRUse ? ODRUsed : NonODRUsed) = true; }
VarDecl *getVariable() const {
assert(isVariableCapture());
return VarAndNestedAndThis.getPointer();
}

View file

@ -1469,6 +1469,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'";