Issue |
136408
|
Summary |
[DirectX] Initializing an HLSL vector with a function call results in an assert
|
Labels |
new issue,
HLSL
|
Assignees |
|
Reporter |
farzonl
|
The assert is in CodeGenFunction::getOrCreateOpaqueRValueMapping
https://github.com/llvm/llvm-project/blob/ee4c8b556c5cf42c55ce9540bbb0e29c11894a71/clang/lib/CodeGen/CGExpr.cpp#L5645
The code to trigger the assert is below.
```hlsl
uint GetInputState(uint x) {
return x;
}
export uint4 fn() {
uint4 counter = { GetInputState(0), GetInputState(1), GetInputState(2), GetInputState(3) };
return counter;
}
```
If you instead switch counter to be
` uint4 counter = { 0,1,2,3};`
we get codegen
https://hlsl.godbolt.org/z/1TYo61nxE
## Crash dump
```gdb
* frame #0: 0x0000000103eeb77c clang-dxc`clang::CodeGen::CodeGenFunction::getOrCreateOpaqueRValueMapping(this=0x000000016fdf1298, e=0x000000012c91a6f8) at CGExpr.cpp:5664:3
frame #1: 0x0000000103f87a80 clang-dxc`(anonymous namespace)::ScalarExprEmitter::VisitOpaqueValueExpr(this=0x000000016fdee048, E=0x000000012c91a6f8) at CGExprScalar.cpp:545:16
frame #2: 0x0000000103f814cc clang-dxc`clang::StmtVisitorBase<std::__1::add_pointer, (anonymous namespace)::ScalarExprEmitter, llvm::Value*>::Visit(this=0x000000016fdee048, S=0x000000012c91a6f8) at StmtNodes.inc:196:1
frame #3: 0x0000000103f77b3c clang-dxc`(anonymous namespace)::ScalarExprEmitter::Visit(this=0x000000016fdee048, E=0x000000012c91a6f8) at CGExprScalar.cpp:449:52
frame #4: 0x0000000103f88fb8 clang-dxc`(anonymous namespace)::ScalarExprEmitter::VisitInitListExpr(this=0x000000016fdee048, E=0x000000012c91a7b8) at CGExprScalar.cpp:2143:19
frame #5: 0x0000000103f816e8 clang-dxc`clang::StmtVisitorBase<std::__1::add_pointer, (anonymous namespace)::ScalarExprEmitter, llvm::Value*>::Visit(this=0x000000016fdee048, S=0x000000012c91a7b8) at StmtNodes.inc:358:1
frame #6: 0x0000000103f77b3c clang-dxc`(anonymous namespace)::ScalarExprEmitter::Visit(this=0x000000016fdee048, E=0x000000012c91a7b8) at CGExprScalar.cpp:449:52
frame #7: 0x0000000103f77920 clang-dxc`clang::CodeGen::CodeGenFunction::EmitScalarExpr(this=0x000000016fdf1298, E=0x000000012c91a7b8, IgnoreResultAssign=false) at CGExprScalar.cpp:5748:8
frame #8: 0x0000000103e89e18 clang-dxc`clang::CodeGen::CodeGenFunction::EmitScalarInit(this=0x000000016fdf1298, init=0x000000012c91a7b8, D=0x000000012c91a2b0, lvalue=LValue @ 0x000000016fdeeb28, capturedByInit=false) at CGDecl.cpp:784:15
frame #9: 0x0000000103e91518 clang-dxc`clang::CodeGen::CodeGenFunction::EmitExprAsInit(this=0x000000016fdf1298, init=0x000000012c91a7b8, D=0x000000012c91a2b0, lvalue=LValue @ 0x000000016fdef020, capturedByInit=false) at CGDecl.cpp:2093:5
frame #10: 0x0000000103e8dd30 clang-dxc`clang::CodeGen::CodeGenFunction::EmitAutoVarInit(this=0x000000016fdf1298, emission=0x000000016fdef410) at CGDecl.cpp:2045:12
frame #11: 0x0000000103e885a4 clang-dxc`clang::CodeGen::CodeGenFunction::EmitAutoVarDecl(this=0x000000016fdf1298, D=0x000000012c91a2b0) at CGDecl.cpp:1333:3
frame #12: 0x0000000103e8794c clang-dxc`clang::CodeGen::CodeGenFunction::EmitVarDecl(this=0x000000016fdf1298, D=0x000000012c91a2b0) at CGDecl.cpp:225:10
frame #13: 0x0000000103e870bc clang-dxc`clang::CodeGen::CodeGenFunction::EmitDecl(this=0x000000016fdf1298, D=0x000000012c91a2b0, EvaluateConditionDecl=true) at CGDecl.cpp:166:5
frame #14: 0x00000001041f0304 clang-dxc`clang::CodeGen::CodeGenFunction::EmitDeclStmt(this=0x000000016fdf1298, S=0x000000012c91a830) at CGStmt.cpp:1674:5
frame #15: 0x00000001041e6bbc clang-dxc`clang::CodeGen::CodeGenFunction::EmitSimpleStmt(this=0x000000016fdf1298, S=0x000000012c91a830, Attrs=ArrayRef<const clang::Attr *> @ 0x000000016fdef6f0) at CGStmt.cpp:515:5
frame #16: 0x00000001041e5874 clang-dxc`clang::CodeGen::CodeGenFunction::EmitStmt(this=0x000000016fdf1298, S=0x000000012c91a830, Attrs=ArrayRef<const clang::Attr *> @ 0x000000016fdef860) at CGStmt.cpp:65:7
frame #17: 0x00000001041f1958 clang-dxc`clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(this=0x000000016fdf1298, S=0x000000012c91c2e0, GetLast=false, AggSlot=AggValueSlot @ 0x000000016fdefb38) at CGStmt.cpp:622:7
frame #18: 0x00000001041f021c clang-dxc`clang::CodeGen::CodeGenFunction::EmitCompoundStmt(this=0x000000016fdf1298, S=0x000000012c91c2e0, GetLast=false, AggSlot=AggValueSlot @ 0x000000016fdefcc8) at CGStmt.cpp:573:10
frame #19: 0x00000001041e6ba4 clang-dxc`clang::CodeGen::CodeGenFunction::EmitSimpleStmt(this=0x000000016fdf1298, S=0x000000012c91c2e0, Attrs=ArrayRef<const clang::Attr *> @ 0x000000016fdefc80) at CGStmt.cpp:512:5
frame #20: 0x00000001041e5874 clang-dxc`clang::CodeGen::CodeGenFunction::EmitStmt(this=0x000000016fdf1298, S=0x000000012c91c2e0, Attrs=ArrayRef<const clang::Attr *> @ 0x000000016fdefdf0) at CGStmt.cpp:65:7
frame #21: 0x00000001041e73f8 clang-dxc`clang::CodeGen::CodeGenFunction::EmitIfStmt(this=0x000000016fdf1298, S=0x000000012c91c340) at CGStmt.cpp:974:5
frame #22: 0x00000001041e5b64 clang-dxc`clang::CodeGen::CodeGenFunction::EmitStmt(this=0x000000016fdf1298, S=0x000000012c91c340, Attrs=ArrayRef<const clang::Attr *> @ 0x000000016fdf02a0) at CGStmt.cpp:157:32
frame #23: 0x00000001041f1958 clang-dxc`clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(this=0x000000016fdf1298, S=0x000000012c91c360, GetLast=false, AggSlot=AggValueSlot @ 0x000000016fdf0548) at CGStmt.cpp:622:7
frame #24: 0x00000001042cac14 clang-dxc`clang::CodeGen::CodeGenFunction::EmitFunctionBody(this=0x000000016fdf1298, Body=0x000000012c91c360) at CodeGenFunction.cpp:1373:5
frame #25: 0x00000001042cbc9c clang-dxc`clang::CodeGen::CodeGenFunction::GenerateCode(this=0x000000016fdf1298, GD=GlobalDecl @ 0x000000016fdf11c8, Fn=0x000000012c6233e8, FnInfo=0x000000012c623360) at CodeGenFunction.cpp:1619:5
frame #26: 0x0000000104300ab4 clang-dxc`clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(this=0x000000012c827600, GD=GlobalDecl @ 0x000000016fdf2cc8, GV=0x000000012c6233e8) at CodeGenModule.cpp:6176:26
frame #27: 0x00000001042f622c clang-dxc`clang::CodeGen::CodeGenModule::EmitGlobalDefinition(this=0x000000012c827600, GD=GlobalDecl @ 0x000000016fdf2e48, GV=0x0000000000000000) at CodeGenModule.cpp:4290:12
frame #28: 0x00000001042fb8e8 clang-dxc`clang::CodeGen::CodeGenModule::EmitGlobal(this=0x000000012c827600, GD=GlobalDecl @ 0x000000016fdf30d8) at CodeGenModule.cpp:4000:5
frame #29: 0x00000001042f48c8 clang-dxc`clang::CodeGen::CodeGenModule::EmitTopLevelDecl(this=0x000000012c827600, D=0x000000012c919f60) at CodeGenModule.cpp:7061:5
frame #30: 0x000000010451463c clang-dxc`(anonymous namespace)::CodeGeneratorImpl::HandleTopLevelDecl(this=0x000000012c60e990, DG=DeclGroupRef @ 0x000000016fdf50f0) at ModuleBuilder.cpp:190:18
frame #31: 0x00000001042a9f90 clang-dxc`clang::BackendConsumer::HandleTopLevelDecl(this=0x000000012c60ea80, D=DeclGroupRef @ 0x000000016fdf5178) at CodeGenAction.cpp:170:8
frame #32: 0x0000000106ac9fa8 clang-dxc`clang::ParseAST(S=0x000000012c83de00, PrintStats=false, SkipFunctionBodies=false) at ParseAST.cpp:175:31
frame #33: 0x0000000104e2175c clang-dxc`clang::ASTFrontendAction::ExecuteAction(this=0x000000012c726c50) at FrontendAction.cpp:1345:3
frame #34: 0x00000001042b06f0 clang-dxc`clang::CodeGenAction::ExecuteAction(this=0x000000012c726c50) at CodeGenAction.cpp:1111:30
frame #35: 0x0000000104e20fd4 clang-dxc`clang::FrontendAction::Execute(this=0x000000012c726c50) at FrontendAction.cpp:1227:3
frame #36: 0x0000000104d3ac18 clang-dxc`clang::CompilerInstance::ExecuteAction(this=0x000000012c723580, Act=0x000000012c726c50) at CompilerInstance.cpp:1056:33
frame #37: 0x0000000104f5dbf4 clang-dxc`clang::ExecuteCompilerInvocation(Clang=0x000000012c723580) at ExecuteCompilerInvocation.cpp:300:25
frame #38: 0x0000000100014a60 clang-dxc`cc1_main(Argv=ArrayRef<const char *> @ 0x000000016fdf5eb8, Argv0="/Users/farzonlotfi/Projects/llvm_debug_build/bin/clang-20", MainAddr=0x0000000100004980) at cc1_main.cpp:294:15
frame #39: 0x0000000100006328 clang-dxc`ExecuteCC1Tool(ArgV=0x000000016fdf96a8, ToolContext=0x000000016fdfe658) at driver.cpp:218:12
frame #40: 0x00000001000133dc clang-dxc`clang_main(int, char**, llvm::ToolContext const&)::$_0::operator()(this=0x000000016fdfa1e8, ArgV=0x000000016fdf96a8) const at driver.cpp:364:16
frame #41: 0x00000001000133ac clang-dxc`int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::$_0>(callable=6171894248, params=0x000000016fdf96a8) at STLFunctionalExtras.h:46:12
frame #42: 0x0000000104a43890 clang-dxc`llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::operator()(this=0x000000016fdfa870, params=0x000000016fdf96a8) const at STLFunctionalExtras.h:69:12
frame #43: 0x0000000104a43850 clang-dxc`clang::driver::CC1Command::Execute(llvm::ArrayRef<std::__1::optional<llvm::StringRef>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*, bool*) const::$_0::operator()(this=0x000000016fdf9608) const at Job.cpp:435:34
frame #44: 0x0000000104a4381c clang-dxc`void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::__1::optional<llvm::StringRef>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*, bool*) const::$_0>(callable=6171891208) at STLFunctionalExtras.h:46:12
frame #45: 0x00000001011764b4 clang-dxc`llvm::function_ref<void ()>::operator()(this=0x000000016fdf95a8) const at STLFunctionalExtras.h:69:12
frame #46: 0x00000001030a683c clang-dxc`llvm::CrashRecoveryContext::RunSafely(this=0x000000016fdf9648, Fn=function_ref<void ()> @ 0x000000016fdf95a8) at CrashRecoveryContext.cpp:426:3
frame #47: 0x0000000104a3fd40 clang-dxc`clang::driver::CC1Command::Execute(this=0x000000012c7237d0, Redirects=ArrayRef<std::__1::optional<llvm::StringRef> > @ 0x000000016fdf9690, ErrMsg="", ExecutionFailed=0x000000016fdf9b9f) const at Job.cpp:435:12
frame #48: 0x00000001049d5754 clang-dxc`clang::driver::Compilation::ExecuteCommand(this=0x000000012c722320, C=0x000000012c7237d0, FailingCommand=0x000000016fdf9cb8, LogOnly=false) const at Compilation.cpp:196:15
frame #49: 0x00000001049d59e0 clang-dxc`clang::driver::Compilation::ExecuteJobs(this=0x000000012c722320, Jobs=0x000000012c7223a0, FailingCommands=0x000000016fdfa548, LogOnly=false) const at Compilation.cpp:251:19
frame #50: 0x00000001049f3f5c clang-dxc`clang::driver::Driver::ExecuteCompilation(this=0x000000016fdfa598, C=0x000000012c722320, FailingCommands=0x000000016fdfa548) at Driver.cpp:2220:5
frame #51: 0x0000000100005aa4 clang-dxc`clang_main(Argc=15, Argv=0x000000016fdfed90, ToolContext=0x000000016fdfe658) at driver.cpp:402:21
frame #52: 0x00000001000401c0 clang-dxc`main(argc=15, argv=0x000000016fdfed90) at clang-driver.cpp:17:10
frame #53: 0x0000000185c86b4c dyld`start + 6000
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs