[clang] d61864f - [clang][Interp] Don't create Records for incomplete decls
Timm Bäder via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 19 00:36:34 PST 2024
Author: Timm Bäder
Date: 2024-02-19T09:23:53+01:00
New Revision: d61864f813e33b4228e56f391ec53566aab9efda
URL: https://github.com/llvm/llvm-project/commit/d61864f813e33b4228e56f391ec53566aab9efda
DIFF: https://github.com/llvm/llvm-project/commit/d61864f813e33b4228e56f391ec53566aab9efda.diff
LOG: [clang][Interp] Don't create Records for incomplete decls
We would previously create the Record instance with 0 fields,
which is incorrect. We later see it again with 1 field.
Fixes #82203
Added:
Modified:
clang/lib/AST/Interp/Program.cpp
clang/test/AST/Interp/lambda.cpp
Removed:
################################################################################
diff --git a/clang/lib/AST/Interp/Program.cpp b/clang/lib/AST/Interp/Program.cpp
index ec6cdebcd820fa..61293a3fef4709 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 3040e6a1e386c7..a5e0d0f1fd9f48 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(), "");
+ }
+}
More information about the cfe-commits
mailing list