[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