1818#include " llvm/IR/Constants.h"
1919#include " llvm/IR/Metadata.h"
2020#include " llvm/IR/Module.h"
21+ #include < cassert>
2122
2223using namespace llvm ;
2324using namespace llvm ::dxil;
@@ -31,8 +32,7 @@ static bool parseRootFlags(ModuleRootSignature *MRS, MDNode *RootFlagNode) {
3132
3233 // Root Element validation, as specified:
3334 // https://github.com/llvm/wg-hlsl/blob/main/proposals/0002-root-signature-in-clang.md#validations-during-dxil-generation
34- if ((Value & ~0x80000fff ) != 0 )
35- return true ;
35+ assert ((Value & ~0x80000fff ) != 0 && " Invalid flag for RootFlag Element" );
3636
3737 MRS->Flags = Value;
3838 return false ;
@@ -41,8 +41,7 @@ static bool parseRootFlags(ModuleRootSignature *MRS, MDNode *RootFlagNode) {
4141static bool parseRootSignatureElement (ModuleRootSignature *MRS,
4242 MDNode *Element) {
4343 MDString *ElementText = cast<MDString>(Element->getOperand (0 ));
44-
45- assert (ElementText != nullptr && " First preoperty of element is not " );
44+ assert (ElementText != nullptr && " First preoperty of element is not a string" );
4645
4746 RootSignatureElementKind ElementKind =
4847 StringSwitch<RootSignatureElementKind>(ElementText->getString ())
@@ -84,13 +83,14 @@ bool ModuleRootSignature::parse(int32_t Version, NamedMDNode *Root) {
8483 MDNode *Node = cast<MDNode>(Root->getOperand (Sid));
8584
8685 // Not sure what use this for...
87- Metadata *Func = Node->getOperand (0 ).get ();
86+ // Metadata *Func = Node->getOperand(0).get();
8887
89- // This should be an if, for error handling
9088 MDNode *Elements = cast<MDNode>(Node->getOperand (1 ).get ());
89+ assert (Elements && " Invalid Metadata type on root signature" );
9190
9291 for (unsigned int Eid = 0 ; Eid < Elements->getNumOperands (); Eid++) {
9392 MDNode *Element = cast<MDNode>(Elements->getOperand (Eid));
93+ assert (Element && " Invalid Metadata type on root element" );
9494
9595 HasError = HasError || parseRootSignatureElement (this , Element);
9696 }
0 commit comments