Skip to content

Commit

Permalink
[clang] Fix null dereference on return in lambda attribute statement …
Browse files Browse the repository at this point in the history
…expr (#66643)

clang was crashing on a lambda attribute with a statement expression
that contained a `return`.
It attempted to access the lambda type which was unknown at that point.

Fixes #48527
  • Loading branch information
pfusik committed Sep 19, 2023
1 parent 7db4a6f commit c724ac9
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 0 deletions.
4 changes: 4 additions & 0 deletions clang/docs/ReleaseNotes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -301,6 +301,10 @@ Bug Fixes to C++ Support
makes an invalid call to an immediate function.
(`#66324 <https://github.com/llvm/llvm-project/issues/66324>`_)

- Fix crash for a lambda attribute with a statement expression
that contains a `return`.
(`#48527 <https://github.com/llvm/llvm-project/issues/48527>`_)

Bug Fixes to AST Handling
^^^^^^^^^^^^^^^^^^^^^^^^^
- Fixed an import failure of recursive friend class template.
Expand Down
2 changes: 2 additions & 0 deletions clang/lib/Sema/SemaStmt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3577,6 +3577,8 @@ StmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc,
CapturingScopeInfo *CurCap = cast<CapturingScopeInfo>(getCurFunction());
QualType FnRetType = CurCap->ReturnType;
LambdaScopeInfo *CurLambda = dyn_cast<LambdaScopeInfo>(CurCap);
if (CurLambda && CurLambda->CallOperator->getType().isNull())
return StmtError();
bool HasDeducedReturnType =
CurLambda && hasDeducedReturnType(CurLambda->CallOperator);

Expand Down
10 changes: 10 additions & 0 deletions clang/test/Parser/gh48527.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// RUN: %clang_cc1 -fsyntax-only -verify %s

int main() { // expected-note {{to match this '{'}}
auto a = [](void)__attribute__((b(({ // expected-note {{to match this '('}}
return 0;
} // expected-error 3 {{expected ')'}} \
// expected-error {{expected ';' at end of declaration}}
// expected-error@+2 {{expected ')'}}
// expected-error@+1 {{expected body of lambda expression}}
// expected-error {{expected '}'}}
4 changes: 4 additions & 0 deletions clang/test/SemaCXX/lambda-expressions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -714,3 +714,7 @@ void foo() {
// CHECK-NEXT: ConstantExpr
// CHECK-NEXT: value: Int 2
}

void GH48527() {
auto a = []()__attribute__((b(({ return 0; })))){}; // expected-warning {{unknown attribute 'b' ignored}}
}

0 comments on commit c724ac9

Please sign in to comment.