diff --git a/clang/lib/AST/Interp/Program.cpp b/clang/lib/AST/Interp/Program.cpp index ec6cdebcd820f..61293a3fef470 100644 --- a/clang/lib/AST/Interp/Program.cpp +++ b/clang/lib/AST/Interp/Program.cpp @@ -232,6 +232,9 @@ Record *Program::getOrCreateRecord(const RecordDecl *RD) { if (!RD) return nullptr; + if (!RD->isCompleteDefinition()) + return nullptr; + // Deduplicate records. if (auto It = Records.find(RD); It != Records.end()) return It->second; diff --git a/clang/test/AST/Interp/lambda.cpp b/clang/test/AST/Interp/lambda.cpp index 3040e6a1e386c..a5e0d0f1fd9f4 100644 --- a/clang/test/AST/Interp/lambda.cpp +++ b/clang/test/AST/Interp/lambda.cpp @@ -222,3 +222,16 @@ namespace GH62611 { return 0; } } + +namespace LambdaToAPValue { + void wrapper() { + constexpr auto f = []() constexpr { + return 0; + }; + + constexpr auto g = [f]() constexpr { + return f(); + }; + static_assert(g() == f(), ""); + } +}