[clang] 6e47330 - [clang][Interp] Ignore FunctionDecls in compound statements

Timm Bäder via cfe-commits cfe-commits at lists.llvm.org
Mon Apr 29 05:34:18 PDT 2024


Author: Timm Bäder
Date: 2024-04-29T14:34:03+02:00
New Revision: 6e473307ab74263e3b72e67b592579e36cee5b6b

URL: https://github.com/llvm/llvm-project/commit/6e473307ab74263e3b72e67b592579e36cee5b6b
DIFF: https://github.com/llvm/llvm-project/commit/6e473307ab74263e3b72e67b592579e36cee5b6b.diff

LOG: [clang][Interp] Ignore FunctionDecls in compound statements

Added: 
    

Modified: 
    clang/lib/AST/Interp/ByteCodeStmtGen.cpp
    clang/test/AST/Interp/functions.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/Interp/ByteCodeStmtGen.cpp b/clang/lib/AST/Interp/ByteCodeStmtGen.cpp
index ec2fe39a8aeae9..ff91baf595f1b1 100644
--- a/clang/lib/AST/Interp/ByteCodeStmtGen.cpp
+++ b/clang/lib/AST/Interp/ByteCodeStmtGen.cpp
@@ -332,7 +332,8 @@ bool ByteCodeStmtGen<Emitter>::visitCompoundStmt(
 template <class Emitter>
 bool ByteCodeStmtGen<Emitter>::visitDeclStmt(const DeclStmt *DS) {
   for (auto *D : DS->decls()) {
-    if (isa<StaticAssertDecl, TagDecl, TypedefNameDecl, UsingEnumDecl>(D))
+    if (isa<StaticAssertDecl, TagDecl, TypedefNameDecl, UsingEnumDecl,
+            FunctionDecl>(D))
       continue;
 
     const auto *VD = dyn_cast<VarDecl>(D);

diff  --git a/clang/test/AST/Interp/functions.cpp b/clang/test/AST/Interp/functions.cpp
index f9bb5d53634e0b..a4ae73e423e74c 100644
--- a/clang/test/AST/Interp/functions.cpp
+++ b/clang/test/AST/Interp/functions.cpp
@@ -601,3 +601,13 @@ namespace FromIntegral {
                                            // both-warning {{variable length arrays}}
 #endif
 }
+
+namespace {
+  template <typename T> using id = T;
+  template <typename T>
+  constexpr void g() {
+    constexpr id<void (T)> f;
+  }
+
+  static_assert((g<int>(), true), "");
+}


        


More information about the cfe-commits mailing list