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), ""); +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits