alexfh wrote: Before this change the cast was added here: ``` * thread #1, name = 'clang', stop reason = step over frame #0: 0x00005555667e8ff2 clang`clang::Sema::BuildCXXNew(this=0x00005092ffd24000, Range=SourceRange @ 0x00007ffffffef4f8, UseGlobal=false, PlacementLParen=(ID = 94), PlacementArgs=clang::MultiExprArg @ 0x00007ffffffef4e0, PlacementRParen=(ID = 94), TypeIdParens=SourceRange @ 0x00007ffffffef548, AllocType=QualType @ 0x00007ffffffef4d0, AllocTypeInfo=0x00005092ffd23a28, ArraySize= Has Value=false , DirectInitRange=SourceRange @ 0x00007ffffffef570, Initializer=0x00005092ffd66230) at SemaExprCXX.cpp:2591:18 2588 = InitializedEntity::InitializeNew(StartLoc, InitType); 2589 InitializationSequence InitSeq(*this, Entity, Kind, Exprs); 2590 ExprResult FullInit = InitSeq.Perform(*this, Entity, Kind, Exprs); -> 2591 if (FullInit.isInvalid()) 2592 return ExprError(); 2593 2594 // FullInit is our initializer; strip off CXXBindTemporaryExprs, because (lldb) p Exprs[0]->dump() IntegerLiteral 0x5092ffd239e8 'int' 0 (lldb) p FullInit.get()->dump() CXXParenListInitExpr 0x5092ffd66268 'Node':'struct Node' `-ImplicitCastExpr 0x5092ffd66250 'long' <IntegralCast> `-IntegerLiteral 0x5092ffd239e8 'int' 0 ``` Now this doesn't happen: ``` * thread #1, name = 'clang', stop reason = step over frame #0: 0x0000555566a23c92 clang`clang::Sema::BuildCXXNew(this=0x00005092ffd26000, Range=SourceRange @ 0x00007ffffffef458, UseGlobal=false, PlacementLParen=(ID = 94), PlacementArgs=clang::MultiExprArg @ 0x00007ffffffef440, PlacementRParen=(ID = 94), TypeIdParens=SourceRange @ 0x00007ffffffef4a8, AllocType=QualType @ 0x00007ffffffef430, AllocTypeInfo=0x00005092ffd25a28, ArraySize= Has Value=false , DirectInitRange=SourceRange @ 0x00007ffffffef4d0, Initializer=0x00005092ffd6b230) at SemaExprCXX.cpp:2584:18 2581 = InitializedEntity::InitializeNew(StartLoc, InitType); 2582 InitializationSequence InitSeq(*this, Entity, Kind, Exprs); 2583 ExprResult FullInit = InitSeq.Perform(*this, Entity, Kind, Exprs); -> 2584 if (FullInit.isInvalid()) 2585 return ExprError(); 2586 2587 // FullInit is our initializer; strip off CXXBindTemporaryExprs, because (lldb) p Exprs.size() (size_t) 1 (lldb) p Exprs[0]->dump() CXXParenListInitExpr 0x5092ffd6b230 'Node':'struct Node' `-IntegerLiteral 0x5092ffd259e8 'int' 0 (lldb) p FullInit.get()->dump() CXXParenListInitExpr 0x5092ffd6b230 'Node':'struct Node' `-IntegerLiteral 0x5092ffd259e8 'int' 0 ``` (probably because the argument of a `new` is a `CXXParenListInitExpr` rather than an `IntegerLiteral`).
In both cases this is happening here: ``` (lldb) bt * thread #1, name = 'clang', stop reason = step over * frame #0: 0x00005555667e8ff2 clang`clang::Sema::BuildCXXNew(this=0x00005092ffd24000, Range=SourceRange @ 0x00007ffffffef4f8, UseGlobal=false, PlacementLParen=(ID = 94), PlacementArgs=clang::MultiExprArg @ 0x00007ffffffef4e0, PlacementRParen=(ID = 94), TypeIdParens=SourceRange @ 0x00007ffffffef548, AllocType=QualType @ 0x00007ffffffef4d0, AllocTypeInfo=0x00005092ffd23a28, ArraySize= Has Value=false , DirectInitRange=SourceRange @ 0x00007ffffffef570, Initializer=0x00005092ffd66230) at SemaExprCXX.cpp:2591:18 frame #1: 0x000055556756d373 clang`clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::RebuildCXXNewExpr(this=0x00007fffffff1640, StartLoc=(ID = 94), UseGlobal=false, PlacementLParen=(ID = 94), PlacementArgs=clang::MultiExprArg @ 0x00007ffffffef610, PlacementRParen=(ID = 94), TypeIdParens=SourceRange @ 0x00007ffffffef668, AllocatedType=QualType @ 0x00007ffffffef600, AllocatedTypeInfo=0x00005092ffd23a28, ArraySize= Has Value=false , DirectInitRange=SourceRange @ 0x00007ffffffef690, Initializer=0x00005092ffd66230) at TreeTransform.h:3442:22 frame #2: 0x000055556754f773 clang`clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCXXNewExpr(this=0x00007fffffff1640, E=0x00005092ffd64cf8) at TreeTransform.h:14541:23 frame #3: 0x0000555567530256 clang`clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(this=0x00007fffffff1640, E=0x00005092ffd64cf8) at StmtNodes.inc:718:1 frame #4: 0x0000555567530f17 clang`clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformInitializer(this=0x00007fffffff1640, Init=0x00005092ffd64cf8, NotCopyInit=false) at TreeTransform.h:4375:25 frame #5: 0x000055556753212c clang`clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExprs(this=0x00007fffffff1640, Inputs=0x00005092ffd64df8, NumInputs=1, IsCall=true, Outputs=0x00007fffffff0628, ArgChanged=0x00007fffffff067f) at TreeTransform.h:4531:29 frame #6: 0x000055556754ae51 clang`clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(this=0x00007fffffff1640, E=0x00005092ffd64dd8) at TreeTransform.h:13380:20 frame #7: 0x000055556752fe5a clang`clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(this=0x00007fffffff1640, E=0x00005092ffd64dd8) at StmtNodes.inc:614:1 frame #8: 0x000055556752d68f clang`clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformStmt(this=0x00007fffffff1640, S=0x00005092ffd64dd8, SDK=Discarded) at TreeTransform.h:4294:35 frame #9: 0x00005555675572bd clang`clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(this=0x00007fffffff1640, S=0x00005092ffd64e00, IsStmtExpr=false) at TreeTransform.h:8088:38 frame #10: 0x00005555675a5a9a clang`clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(this=0x00007fffffff1640, S=0x00005092ffd64e00) at TreeTransform.h:8070:23 frame #11: 0x000055556752d4af clang`clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformStmt(this=0x00007fffffff1640, S=0x00005092ffd64e00, SDK=Discarded) at StmtNodes.inc:1652:1 frame #12: 0x000055556752b78e clang`clang::Sema::SubstStmt(this=0x00005092ffd24000, S=0x00005092ffd64e00, TemplateArgs=0x00007fffffff1b68) at SemaTemplateInstantiate.cpp:4357:23 frame #13: 0x0000555567633a63 clang`clang::Sema::InstantiateFunctionDefinition(this=0x00005092ffd24000, PointOfInstantiation=(ID = 138), Function=0x00005092ffd66088, Recursive=true, DefinitionRequired=false, AtEndOfTU=true) at SemaTemplateInstantiateDecl.cpp:5819:14 frame #14: 0x0000555567637ae3 clang`clang::Sema::PerformPendingInstantiations(this=0x00005092ffd24000, LocalOnly=false, AtEndOfTU=true) at SemaTemplateInstantiateDecl.cpp:7061:9 frame #15: 0x0000555565e12515 clang`clang::Sema::ActOnEndOfTranslationUnitFragment(this=0x00005092ffd24000, Kind=Normal) at Sema.cpp:1197:5 frame #16: 0x0000555565e12c1b clang`clang::Sema::ActOnEndOfTranslationUnit(this=0x00005092ffd24000) at Sema.cpp:1230:5 frame #17: 0x00005555656a82d2 clang`clang::Parser::ParseTopLevelDecl(this=0x00005092ffc06000, Result=0x00007fffffff4288, ImportState=0x00007fffffff4284) at Parser.cpp:749:13 frame #18: 0x00005555656a0bc6 clang`clang::ParseAST(S=0x00005092ffd24000, PrintStats=false, SkipFunctionBodies=false) at ParseAST.cpp:171:20 frame #19: 0x0000555565043c85 clang`clang::ASTFrontendAction::ExecuteAction(this=0x00005092ffe0daa0) at FrontendAction.cpp:1343:3 frame #20: 0x000055556504323b clang`clang::FrontendAction::Execute(this=0x00005092ffe0daa0) at FrontendAction.cpp:1225:3 frame #21: 0x0000555564ef050d clang`clang::CompilerInstance::ExecuteAction(this=0x00005092ffe0e6e0, Act=0x00005092ffe0daa0) at CompilerInstance.cpp:1056:33 frame #22: 0x0000555562960225 clang`clang::ExecuteCompilerInvocation(Clang=0x00005092ffe0e6e0) at ExecuteCompilerInvocation.cpp:300:25 frame #23: 0x000055556292d9d8 clang`cc1_main(Argv=ArrayRef @ 0x00007fffffff8028, Argv0="clang", MainAddr=0x0000555562919430) at cc1_main.cpp:297:15 ``` https://github.com/llvm/llvm-project/pull/138518 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits