diff --git a/tools/clang/lib/SPIRV/SpirvEmitter.cpp b/tools/clang/lib/SPIRV/SpirvEmitter.cpp index 3a67257da7..3aaa91d50a 100644 --- a/tools/clang/lib/SPIRV/SpirvEmitter.cpp +++ b/tools/clang/lib/SPIRV/SpirvEmitter.cpp @@ -3657,14 +3657,16 @@ SpirvInstruction *SpirvEmitter::doCastExpr(const CastExpr *expr, emitError("implicit cast kind '%0' unimplemented", expr->getExprLoc()) << expr->getCastKindName() << expr->getSourceRange(); expr->dump(); - return 0; + return nullptr; } } + case CastKind::CK_ToVoid: + return nullptr; default: emitError("implicit cast kind '%0' unimplemented", expr->getExprLoc()) << expr->getCastKindName() << expr->getSourceRange(); expr->dump(); - return 0; + return nullptr; } } diff --git a/tools/clang/test/CodeGenSPIRV/cast.to.void.hlsl b/tools/clang/test/CodeGenSPIRV/cast.to.void.hlsl new file mode 100644 index 0000000000..19a37d071c --- /dev/null +++ b/tools/clang/test/CodeGenSPIRV/cast.to.void.hlsl @@ -0,0 +1,18 @@ +// RUN: %dxc dxc -T cs_6_6 -E Main -spirv %s -fcgl | FileCheck %s + + +// Make sure no code is generated for the cast to void. + +// CHECK: %src_Main = OpFunction %void None +// CHECK-NEXT: OpLabel +// CHECK-NEXT: %x = OpVariable +// CHECK-NEXT: OpStore %x %false +// CHECK-NEXT: OpReturn +// CHECK-NEXT: OpFunctionEnd + +[numthreads(1, 1, 1)] +void Main() +{ + bool x = false; + (void)x; +}