Fix metadata load for a Type template arg
- This would cause an assert when you store, write to bitcode, load from bitcode, store to bitcode again, then load again, when using the Type template arg metadata.
This commit is contained in:
Родитель
f0bab7f861
Коммит
b637b8ebab
|
@ -814,11 +814,12 @@ void DxilMDHelper::LoadDxilTemplateArgAnnotation(const llvm::MDOperand &MDO, Dxi
|
||||||
IFTBOOL(pTupleMD->getNumOperands() >= 1, DXC_E_INCORRECT_DXIL_METADATA);
|
IFTBOOL(pTupleMD->getNumOperands() >= 1, DXC_E_INCORRECT_DXIL_METADATA);
|
||||||
unsigned Tag = ConstMDToUint32(pTupleMD->getOperand(0));
|
unsigned Tag = ConstMDToUint32(pTupleMD->getOperand(0));
|
||||||
switch (Tag) {
|
switch (Tag) {
|
||||||
case kDxilTemplateArgTypeTag:
|
case kDxilTemplateArgTypeTag: {
|
||||||
IFTBOOL(pTupleMD->getNumOperands() == 2, DXC_E_INCORRECT_DXIL_METADATA);
|
IFTBOOL(pTupleMD->getNumOperands() == 2, DXC_E_INCORRECT_DXIL_METADATA);
|
||||||
annotation.SetType(MetadataAsValue::get(m_Ctx,
|
Constant *C = dyn_cast<Constant>(ValueMDToValue(pTupleMD->getOperand(kDxilTemplateArgValue)));
|
||||||
pTupleMD->getOperand(kDxilTemplateArgValue))->getType());
|
IFTBOOL(C != nullptr, DXC_E_INCORRECT_DXIL_METADATA);
|
||||||
break;
|
annotation.SetType(C->getType());
|
||||||
|
} break;
|
||||||
case kDxilTemplateArgIntegralTag:
|
case kDxilTemplateArgIntegralTag:
|
||||||
IFTBOOL(pTupleMD->getNumOperands() == 2, DXC_E_INCORRECT_DXIL_METADATA);
|
IFTBOOL(pTupleMD->getNumOperands() == 2, DXC_E_INCORRECT_DXIL_METADATA);
|
||||||
annotation.SetIntegral((int64_t)ConstMDToUint64(pTupleMD->getOperand(kDxilTemplateArgValue)));
|
annotation.SetIntegral((int64_t)ConstMDToUint64(pTupleMD->getOperand(kDxilTemplateArgValue)));
|
||||||
|
|
Загрузка…
Ссылка в новой задаче