Author: Aiden Grossman
Date: 2026-01-04T08:37:02Z
New Revision: 22390cd7410f093528b95141d1d4d93ccf3573d9

URL: 
https://github.com/llvm/llvm-project/commit/22390cd7410f093528b95141d1d4d93ccf3573d9
DIFF: 
https://github.com/llvm/llvm-project/commit/22390cd7410f093528b95141d1d4d93ccf3573d9.diff

LOG: Revert "[clang][bytecode] Check if block is initialized before invoking 
destructor (#174082)"

This reverts commit 7976ac990000a58a7474269a3ca95e16aed8c35b.

This is causing msan failures. msan-track-origins stack trace:

==9441==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x55c20df74ad3 in 
clang::interp::Pointer::operator=(clang::interp::Pointer&&) 
llvm-project/clang/lib/AST/ByteCode/Pointer.cpp:137:7
    #1 0x55c20db81010 in bool 
clang::interp::InitGlobal<(clang::interp::PrimType)13, 
clang::interp::Pointer>(clang::interp::InterpState&, clang::interp::CodePtr, 
unsigned int) llvm-project/clang/lib/AST/ByteCode/Interp.h:1478:16
    #2 0x55c20db7ec56 in emitInitGlobalPtr 
blaze-out/k8-fastbuild-msan/bin/llvm-project/clang/_virtual_includes/ast_bytecode_opcodes_gen/Opcodes.inc:26162:10
    #3 0x55c20db7ec56 in 
clang::interp::EvalEmitter::emitInitGlobal(clang::interp::PrimType, unsigned 
int, clang::interp::SourceInfo) 
blaze-out/k8-fastbuild-msan/bin/llvm-project/clang/_virtual_includes/ast_bytecode_opcodes_gen/Opcodes.inc:26042:12
    #4 0x55c20da58b87 in 
clang::interp::Compiler<clang::interp::EvalEmitter>::visitVarDecl(clang::VarDecl
 const*, clang::Expr const*, bool, bool) 
llvm-project/clang/lib/AST/ByteCode/Compiler.cpp:4924:20
    #5 0x55c20da64a61 in 
clang::interp::Compiler<clang::interp::EvalEmitter>::visitDeclAndReturn(clang::VarDecl
 const*, clang::Expr const*, bool) 
llvm-project/clang/lib/AST/ByteCode/Compiler.cpp:4831:14
    #6 0x55c20da7f290 in 
clang::interp::EvalEmitter::interpretDecl(clang::VarDecl const*, clang::Expr 
const*, bool) llvm-project/clang/lib/AST/ByteCode/EvalEmitter.cpp:66:14
    #7 0x55c20d970d23 in 
clang::interp::Context::evaluateAsInitializer(clang::interp::State&, 
clang::VarDecl const*, clang::Expr const*, clang::APValue&) 
llvm-project/clang/lib/AST/ByteCode/Context.cpp:141:16
    #8 0x55c20e25b8de in clang::Expr::EvaluateAsInitializer(clang::APValue&, 
clang::ASTContext const&, clang::VarDecl const*, 
llvm::SmallVectorImpl<std::__msan::pair<clang::SourceLocation, 
clang::PartialDiagnostic>>&, bool) const 
llvm-project/clang/lib/AST/ExprConstant.cpp:20754:20
    #9 0x55c20da368d5 in 
clang::interp::Compiler<clang::interp::EvalEmitter>::visitDeclRef(clang::ValueDecl
 const*, clang::Expr const*) 
llvm-project/clang/lib/AST/ByteCode/Compiler.cpp:7162:19
    #10 0x55c20da34986 in 
clang::interp::Compiler<clang::interp::EvalEmitter>::VisitDeclRefExpr(clang::DeclRefExpr
 const*) llvm-project/clang/lib/AST/ByteCode/Compiler.cpp:7192:16
    #11 0x55c20da66666 in clang::StmtVisitorBase<llvm::make_const_ptr, 
clang::interp::Compiler<clang::interp::EvalEmitter>, bool>::Visit(clang::Stmt 
const*) 
blaze-out/k8-fastbuild-msan/bin/llvm-project/clang/include/clang/AST/StmtNodes.inc:474:1
    #12 0x55c20da65d3f in 
clang::interp::Compiler<clang::interp::EvalEmitter>::visit(clang::Expr const*) 
llvm-project/clang/lib/AST/ByteCode/Compiler.cpp:4293:16
    #13 0x55c20da57348 in 
clang::interp::Compiler<clang::interp::EvalEmitter>::VisitCXXTypeidExpr(clang::CXXTypeidExpr
 const*) llvm-project/clang/lib/AST/ByteCode/Compiler.cpp:3893:14
    #14 0x55c20da66760 in clang::StmtVisitorBase<llvm::make_const_ptr, 
clang::interp::Compiler<clang::interp::EvalEmitter>, bool>::Visit(clang::Stmt 
const*) 
blaze-out/k8-fastbuild-msan/bin/llvm-project/clang/include/clang/AST/StmtNodes.inc:658:1
    #15 0x55c20da65d3f in 
clang::interp::Compiler<clang::interp::EvalEmitter>::visit(clang::Expr const*) 
llvm-project/clang/lib/AST/ByteCode/Compiler.cpp:4293:16
    #16 0x55c20da58afc in 
clang::interp::Compiler<clang::interp::EvalEmitter>::visitVarDecl(clang::VarDecl
 const*, clang::Expr const*, bool, bool) 
llvm-project/clang/lib/AST/ByteCode/Compiler.cpp:4921:18
    #17 0x55c20da64a61 in 
clang::interp::Compiler<clang::interp::EvalEmitter>::visitDeclAndReturn(clang::VarDecl
 const*, clang::Expr const*, bool) 
llvm-project/clang/lib/AST/ByteCode/Compiler.cpp:4831:14
    #18 0x55c20da7f290 in 
clang::interp::EvalEmitter::interpretDecl(clang::VarDecl const*, clang::Expr 
const*, bool) llvm-project/clang/lib/AST/ByteCode/EvalEmitter.cpp:66:14
    #19 0x55c20d970d23 in 
clang::interp::Context::evaluateAsInitializer(clang::interp::State&, 
clang::VarDecl const*, clang::Expr const*, clang::APValue&) 
llvm-project/clang/lib/AST/ByteCode/Context.cpp:141:16
    #20 0x55c20e25b8de in clang::Expr::EvaluateAsInitializer(clang::APValue&, 
clang::ASTContext const&, clang::VarDecl const*, 
llvm::SmallVectorImpl<std::__msan::pair<clang::SourceLocation, 
clang::PartialDiagnostic>>&, bool) const 
llvm-project/clang/lib/AST/ExprConstant.cpp:20754:20
    #21 0x55c20dfdcc38 in 
clang::VarDecl::evaluateValueImpl(llvm::SmallVectorImpl<std::__msan::pair<clang::SourceLocation,
 clang::PartialDiagnostic>>&, bool) const 
llvm-project/clang/lib/AST/Decl.cpp:2608:23
    #22 0x55c20dfdd1a2 in 
clang::VarDecl::checkForConstantInitialization(llvm::SmallVectorImpl<std::__msan::pair<clang::SourceLocation,
 clang::PartialDiagnostic>>&) const llvm-project/clang/lib/AST/Decl.cpp:2687:7
    #23 0x55c20b9154da in 
clang::Sema::CheckCompleteVariableDeclaration(clang::VarDecl*) 
llvm-project/clang/lib/Sema/SemaDecl.cpp:14941:27
    #24 0x55c20b910f36 in clang::Sema::AddInitializerToDecl(clang::Decl*, 
clang::Expr*, bool) llvm-project/clang/lib/Sema/SemaDecl.cpp:14280:3
    #25 0x55c20ad044ee in 
clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&, 
clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*) 
llvm-project/clang/lib/Parse/ParseDecl.cpp:2639:17
    #26 0x55c20acfe9f8 in 
clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, 
clang::DeclaratorContext, clang::ParsedAttributes&, 
clang::Parser::ParsedTemplateInfo&, clang::SourceLocation*, 
clang::Parser::ForRangeInit*) llvm-project/clang/lib/Parse/ParseDecl.cpp:2356:7
    #27 0x55c20abd8a43 in 
clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, 
clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) 
llvm-project/clang/lib/Parse/Parser.cpp:1181:10
    #28 0x55c20abd7654 in 
clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, 
clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) 
llvm-project/clang/lib/Parse/Parser.cpp:1203:12
    #29 0x55c20abd4d9c in 
clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, 
clang::ParsedAttributes&, clang::ParsingDeclSpec*) 
llvm-project/clang/lib/Parse/Parser.cpp:1031:14
    #30 0x55c20ac96f31 in 
clang::Parser::ParseInnerNamespace(llvm::SmallVector<clang::Parser::InnerNamespaceInfo,
 4u> const&, unsigned int, clang::SourceLocation&, clang::ParsedAttributes&, 
clang::BalancedDelimiterTracker&) 
llvm-project/clang/lib/Parse/ParseDeclCXX.cpp:240:7
    #31 0x55c20ac950c7 in 
clang::Parser::ParseNamespace(clang::DeclaratorContext, clang::SourceLocation&, 
clang::SourceLocation) llvm-project/clang/lib/Parse/ParseDeclCXX.cpp:218:3
    #32 0x55c20acfb09b in 
clang::Parser::ParseDeclaration(clang::DeclaratorContext, 
clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, 
clang::SourceLocation*) llvm-project/clang/lib/Parse/ParseDecl.cpp:1909:12
    #33 0x55c20abd3f88 in 
clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, 
clang::ParsedAttributes&, clang::ParsingDeclSpec*) 
llvm-project/clang/lib/Parse/Parser.cpp
    #34 0x55c20abcfe33 in 
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, 
clang::Sema::ModuleImportState&) llvm-project/clang/lib/Parse/Parser.cpp:744:12
    #35 0x55c20abb214e in clang::ParseAST(clang::Sema&, bool, bool) 
llvm-project/clang/lib/Parse/ParseAST.cpp:170:20
    #36 0x55c20a90adaa in clang::ASTFrontendAction::ExecuteAction() 
llvm-project/clang/lib/Frontend/FrontendAction.cpp:1432:3
    #37 0x55c20a9095bf in clang::FrontendAction::Execute() 
llvm-project/clang/lib/Frontend/FrontendAction.cpp:1312:3
    #38 0x55c20a76cdc7 in 
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) 
llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1004:33
    #39 0x55c20805aab0 in 
clang::ExecuteCompilerInvocation(clang::CompilerInstance*) 
llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:310:25
    #40 0x55c20802e823 in cc1_main(llvm::ArrayRef<char const*>, char const*, 
void*) llvm-project/clang/tools/driver/cc1_main.cpp:304:15
    #41 0x55c2080218ec in ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, 
llvm::ToolContext const&, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>) 
llvm-project/clang/tools/driver/driver.cpp:225:12
    #42 0x55c20801ea91 in clang_main(int, char**, llvm::ToolContext const&) 
llvm-project/clang/tools/driver/driver.cpp:268:12
    #43 0x55c20801a6af in main 
blaze-out/k8-fastbuild-msan/bin/llvm-project/clang/clang-driver.cpp:17:10
    #44 0x7f79c4214351 in __libc_start_main (/usr/libc/lib64/libc.so.6+0x61351) 
(BuildId: ca23ec6d935352118622ce674a8bb52d)
    #45 0x55c207f8c2e9 in _start 
/usr/libc/debug-src/src/csu/../sysdeps/x86_64/start.S:120

  Member fields were destroyed
    #0 0x55c207f9f5fd in __sanitizer_dtor_callback_fields 
llvm-project/compiler-rt/lib/msan/msan_interceptors.cpp:1074:5
    #1 0x55c20df74380 in ~Pointer 
llvm-project/clang/lib/AST/ByteCode/Pointer.h:826:12
    #2 0x55c20df74380 in clang::interp::Pointer::~Pointer() 
llvm-project/clang/lib/AST/ByteCode/Pointer.cpp:93:1
    #3 0x55c20da7c5ab in void 
dtorTy<clang::interp::Pointer>(clang::interp::Block*, std::byte*, 
clang::interp::Descriptor const*) 
llvm-project/clang/lib/AST/ByteCode/Descriptor.cpp:49:32
    #4 0x55c20d976b91 in clang::interp::Block::invokeDtor() 
llvm-project/clang/lib/AST/ByteCode/InterpBlock.h:149:7
    #5 0x55c20da651a1 in 
clang::interp::Compiler<clang::interp::EvalEmitter>::visitDeclAndReturn(clang::VarDecl
 const*, clang::Expr const*, bool) 
llvm-project/clang/lib/AST/ByteCode/Compiler.cpp:4869:22
    #6 0x55c20da7f290 in 
clang::interp::EvalEmitter::interpretDecl(clang::VarDecl const*, clang::Expr 
const*, bool) llvm-project/clang/lib/AST/ByteCode/EvalEmitter.cpp:66:14
    #7 0x55c20d970d23 in 
clang::interp::Context::evaluateAsInitializer(clang::interp::State&, 
clang::VarDecl const*, clang::Expr const*, clang::APValue&) 
llvm-project/clang/lib/AST/ByteCode/Context.cpp:141:16
    #8 0x55c20e25b8de in clang::Expr::EvaluateAsInitializer(clang::APValue&, 
clang::ASTContext const&, clang::VarDecl const*, 
llvm::SmallVectorImpl<std::__msan::pair<clang::SourceLocation, 
clang::PartialDiagnostic>>&, bool) const 
llvm-project/clang/lib/AST/ExprConstant.cpp:20754:20
    #9 0x55c20dfdcc38 in 
clang::VarDecl::evaluateValueImpl(llvm::SmallVectorImpl<std::__msan::pair<clang::SourceLocation,
 clang::PartialDiagnostic>>&, bool) const 
llvm-project/clang/lib/AST/Decl.cpp:2608:23
    #10 0x55c20dfdd1a2 in 
clang::VarDecl::checkForConstantInitialization(llvm::SmallVectorImpl<std::__msan::pair<clang::SourceLocation,
 clang::PartialDiagnostic>>&) const llvm-project/clang/lib/AST/Decl.cpp:2687:7
    #11 0x55c20b9154da in 
clang::Sema::CheckCompleteVariableDeclaration(clang::VarDecl*) 
llvm-project/clang/lib/Sema/SemaDecl.cpp:14941:27
    #12 0x55c20b910f36 in clang::Sema::AddInitializerToDecl(clang::Decl*, 
clang::Expr*, bool) llvm-project/clang/lib/Sema/SemaDecl.cpp:14280:3
    #13 0x55c20ad044ee in 
clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&, 
clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*) 
llvm-project/clang/lib/Parse/ParseDecl.cpp:2639:17
    #14 0x55c20acfe9f8 in 
clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, 
clang::DeclaratorContext, clang::ParsedAttributes&, 
clang::Parser::ParsedTemplateInfo&, clang::SourceLocation*, 
clang::Parser::ForRangeInit*) llvm-project/clang/lib/Parse/ParseDecl.cpp:2356:7
    #15 0x55c20abd8a43 in 
clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, 
clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) 
llvm-project/clang/lib/Parse/Parser.cpp:1181:10
    #16 0x55c20abd7654 in 
clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, 
clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) 
llvm-project/clang/lib/Parse/Parser.cpp:1203:12
    #17 0x55c20abd4d9c in 
clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, 
clang::ParsedAttributes&, clang::ParsingDeclSpec*) 
llvm-project/clang/lib/Parse/Parser.cpp:1031:14
    #18 0x55c20ac96f31 in 
clang::Parser::ParseInnerNamespace(llvm::SmallVector<clang::Parser::InnerNamespaceInfo,
 4u> const&, unsigned int, clang::SourceLocation&, clang::ParsedAttributes&, 
clang::BalancedDelimiterTracker&) 
llvm-project/clang/lib/Parse/ParseDeclCXX.cpp:240:7
    #19 0x55c20ac950c7 in 
clang::Parser::ParseNamespace(clang::DeclaratorContext, clang::SourceLocation&, 
clang::SourceLocation) llvm-project/clang/lib/Parse/ParseDeclCXX.cpp:218:3
    #20 0x55c20acfb09b in 
clang::Parser::ParseDeclaration(clang::DeclaratorContext, 
clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, 
clang::SourceLocation*) llvm-project/clang/lib/Parse/ParseDecl.cpp:1909:12

Added: 
    

Modified: 
    clang/lib/AST/ByteCode/Compiler.cpp
    clang/test/AST/ByteCode/typeid.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/ByteCode/Compiler.cpp 
b/clang/lib/AST/ByteCode/Compiler.cpp
index 4518c587ceca7..67980676dcd30 100644
--- a/clang/lib/AST/ByteCode/Compiler.cpp
+++ b/clang/lib/AST/ByteCode/Compiler.cpp
@@ -4803,8 +4803,7 @@ VarCreationState Compiler<Emitter>::visitDecl(const 
VarDecl *VD,
       auto &GD = GlobalBlock->getBlockDesc<GlobalInlineDescriptor>();
 
       GD.InitState = GlobalInitState::InitializerFailed;
-      if (GlobalBlock->isInitialized())
-        GlobalBlock->invokeDtor();
+      GlobalBlock->invokeDtor();
     }
   }
 
@@ -4865,8 +4864,7 @@ bool Compiler<Emitter>::visitDeclAndReturn(const VarDecl 
*VD, const Expr *Init,
       auto &GD = GlobalBlock->getBlockDesc<GlobalInlineDescriptor>();
 
       GD.InitState = GlobalInitState::InitializerFailed;
-      if (GlobalBlock->isInitialized())
-        GlobalBlock->invokeDtor();
+      GlobalBlock->invokeDtor();
     }
     return false;
   }

diff  --git a/clang/test/AST/ByteCode/typeid.cpp 
b/clang/test/AST/ByteCode/typeid.cpp
index f4183691993d8..aca18d4e25277 100644
--- a/clang/test/AST/ByteCode/typeid.cpp
+++ b/clang/test/AST/ByteCode/typeid.cpp
@@ -72,16 +72,3 @@ namespace TypeidPtrRegression {
   }
 }
 
-
-// Regression test for assertion failure in invokeDtor(). GH-173950
-namespace GH173950 {
-  struct A {
-    virtual void f();
-  };
-
-  static A &a = *new A;
-  extern A &a;
-
-  // This used to crash with: Assertion `IsInitialized' failed in invokeDtor()
-  const std::type_info &a_ti = typeid(a);
-}


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to