Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion clang/lib/Interpreter/IncrementalParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ void IncrementalParser::CleanUpPTU(TranslationUnitDecl *MostRecentTU) {
// FIXME: We should de-allocate MostRecentTU
for (Decl *D : MostRecentTU->decls()) {
auto *ND = dyn_cast<NamedDecl>(D);
if (!ND)
if (!ND || ND->getDeclName().isEmpty())
continue;
// Check if we need to clean up the IdResolver chain.
if (ND->getDeclName().getFETokenInfo() && !D->getLangOpts().ObjC &&
Expand Down
14 changes: 12 additions & 2 deletions clang/test/Interpreter/lambda.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
// REQUIRES: host-supports-jit
// UNSUPPORTED: system-aix
// RUN: cat %s | clang-repl | FileCheck %s
// RUN: cat %s | clang-repl -Xcc -O2 | FileCheck %s
// RUN: cat %s | clang-repl -Xcc -Xclang -Xcc -verify -Xcc -O2 | FileCheck %s

extern "C" int printf(const char *, ...);

auto l1 = []() { printf("ONE\n"); return 42; };
Expand All @@ -14,4 +15,13 @@ auto r2 = l2();
auto r3 = l2();
// CHECK: TWO

%quit
// Verify non-local lambda capture error is correctly reported
int x = 42;

// expected-error {{non-local lambda expression cannot have a capture-default}}
auto capture = [&]() { return x * 2; };

// Ensure valid C++ code before exiting
x = 100;

%quit