18
18
#include " llvm/IR/Constants.h"
19
19
#include " llvm/IR/Metadata.h"
20
20
#include " llvm/IR/Module.h"
21
+ #include < cassert>
21
22
22
23
using namespace llvm ;
23
24
using namespace llvm ::dxil;
@@ -31,8 +32,7 @@ static bool parseRootFlags(ModuleRootSignature *MRS, MDNode *RootFlagNode) {
31
32
32
33
// Root Element validation, as specified:
33
34
// 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" );
36
36
37
37
MRS->Flags = Value;
38
38
return false ;
@@ -41,8 +41,7 @@ static bool parseRootFlags(ModuleRootSignature *MRS, MDNode *RootFlagNode) {
41
41
static bool parseRootSignatureElement (ModuleRootSignature *MRS,
42
42
MDNode *Element) {
43
43
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" );
46
45
47
46
RootSignatureElementKind ElementKind =
48
47
StringSwitch<RootSignatureElementKind>(ElementText->getString ())
@@ -84,13 +83,14 @@ bool ModuleRootSignature::parse(int32_t Version, NamedMDNode *Root) {
84
83
MDNode *Node = cast<MDNode>(Root->getOperand (Sid));
85
84
86
85
// Not sure what use this for...
87
- Metadata *Func = Node->getOperand (0 ).get ();
86
+ // Metadata *Func = Node->getOperand(0).get();
88
87
89
- // This should be an if, for error handling
90
88
MDNode *Elements = cast<MDNode>(Node->getOperand (1 ).get ());
89
+ assert (Elements && " Invalid Metadata type on root signature" );
91
90
92
91
for (unsigned int Eid = 0 ; Eid < Elements->getNumOperands (); Eid++) {
93
92
MDNode *Element = cast<MDNode>(Elements->getOperand (Eid));
93
+ assert (Element && " Invalid Metadata type on root element" );
94
94
95
95
HasError = HasError || parseRootSignatureElement (this , Element);
96
96
}
0 commit comments