Skip to content

[DirectX] External declaration 'switch.table.*' is unused #140420

Open
@farzonl

Description

@farzonl

Currently seeing 6 errors of this on DML shaders

lldb -- dxv validation/QLinearConvDp4a7x7x2_QLConvI8_u8u8.dat
error: External declaration 'switch.table.CSMain' is unused

Emited Error DeclNotUsedExternal:

https://github.com/microsoft/DirectXShaderCompiler/blob/adffd31eb02f690d9d1afe86c7fa6f12b4e70aa1/lib/DxilValidation/DxilValidation.cpp#L3798

Erroring Instruction

(lldb) expr GV->dump()
@switch.table.CSMain = private unnamed_addr constant [4 x i32] [i32 1, i32 257, i32 65793, i32 16843009], align 4

If we go beyond this breakpoint we eventually hit this assert:

Assert in:

https://github.com/microsoft/DirectXShaderCompiler/blob/adffd31eb02f690d9d1afe86c7fa6f12b4e70aa1/lib/IR/Globals.cpp#L210

void GlobalVariable::setInitializer(Constant *InitVal) {
  if (!InitVal) {
    if (hasInitializer()) {
      // Note, the num operands is used to compute the offset of the operand, so
      // the order here matters.  Clearing the operand then clearing the num
      // operands ensures we have the correct offset to the operand.
      Op<0>().set(nullptr);
      setGlobalVariableNumOperands(0);
    }
  } else {
    /*line 210 -->*/ assert(InitVal->getType() == getType()->getElementType() &&
           "Initializer type must match GlobalVariable type");
    // Note, the num operands is used to compute the offset of the operand, so
    // the order here matters.  We need to set num operands to 1 first so that
    // we get the correct offset to the first operand when we set it.
    if (!hasInitializer())
      setGlobalVariableNumOperands(1);
    Op<0>().set(InitVal);
  }
}

Metadata

Metadata

Assignees

Labels

backend:DirectXcrashPrefer [crash-on-valid] or [crash-on-invalid]

Type

Projects

Status

Planning

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions