@@ -501,8 +501,6 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseRootConsantsTest) {
501501TEST_F (ParseHLSLRootSignatureTest, ValidParseRootFlagsTest) {
502502 using llvm::dxbc::RootFlags;
503503 const llvm::StringLiteral Source = R"cc(
504- RootFlags(),
505- RootFlags(0),
506504 RootFlags(
507505 deny_domain_shader_root_access |
508506 deny_pixel_shader_root_access |
@@ -533,18 +531,10 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseRootFlagsTest) {
533531 ASSERT_FALSE (Parser.parse ());
534532
535533 auto Elements = Parser.getElements ();
536- ASSERT_EQ (Elements.size (), 3u );
534+ ASSERT_EQ (Elements.size (), 1u );
537535
538536 RootElement Elem = Elements[0 ].getElement ();
539537 ASSERT_TRUE (std::holds_alternative<RootFlags>(Elem));
540- ASSERT_EQ (std::get<RootFlags>(Elem), RootFlags::None);
541-
542- Elem = Elements[1 ].getElement ();
543- ASSERT_TRUE (std::holds_alternative<RootFlags>(Elem));
544- ASSERT_EQ (std::get<RootFlags>(Elem), RootFlags::None);
545-
546- Elem = Elements[2 ].getElement ();
547- ASSERT_TRUE (std::holds_alternative<RootFlags>(Elem));
548538 auto ValidRootFlags = RootFlags::AllowInputAssemblerInputLayout |
549539 RootFlags::DenyVertexShaderRootAccess |
550540 RootFlags::DenyHullShaderRootAccess |
@@ -562,6 +552,64 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseRootFlagsTest) {
562552 ASSERT_TRUE (Consumer->isSatisfied ());
563553}
564554
555+ TEST_F (ParseHLSLRootSignatureTest, ValidParseEmptyRootFlagsTest) {
556+ using llvm::dxbc::RootFlags;
557+ const llvm::StringLiteral Source = R"cc(
558+ RootFlags(),
559+ )cc" ;
560+
561+ auto Ctx = createMinimalASTContext ();
562+ StringLiteral *Signature = wrapSource (Ctx, Source);
563+
564+ TrivialModuleLoader ModLoader;
565+ auto PP = createPP (Source, ModLoader);
566+
567+ hlsl::RootSignatureParser Parser (RootSignatureVersion::V1_1, Signature, *PP);
568+
569+ // Test no diagnostics produced
570+ Consumer->setNoDiag ();
571+
572+ ASSERT_FALSE (Parser.parse ());
573+
574+ auto Elements = Parser.getElements ();
575+ ASSERT_EQ (Elements.size (), 1u );
576+
577+ RootElement Elem = Elements[0 ].getElement ();
578+ ASSERT_TRUE (std::holds_alternative<RootFlags>(Elem));
579+ ASSERT_EQ (std::get<RootFlags>(Elem), RootFlags::None);
580+
581+ ASSERT_TRUE (Consumer->isSatisfied ());
582+ }
583+
584+ TEST_F (ParseHLSLRootSignatureTest, ValidParseZeroRootFlagsTest) {
585+ using llvm::dxbc::RootFlags;
586+ const llvm::StringLiteral Source = R"cc(
587+ RootFlags(0),
588+ )cc" ;
589+
590+ auto Ctx = createMinimalASTContext ();
591+ StringLiteral *Signature = wrapSource (Ctx, Source);
592+
593+ TrivialModuleLoader ModLoader;
594+ auto PP = createPP (Source, ModLoader);
595+
596+ hlsl::RootSignatureParser Parser (RootSignatureVersion::V1_1, Signature, *PP);
597+
598+ // Test no diagnostics produced
599+ Consumer->setNoDiag ();
600+
601+ ASSERT_FALSE (Parser.parse ());
602+
603+ auto Elements = Parser.getElements ();
604+ ASSERT_EQ (Elements.size (), 1u );
605+
606+ RootElement Elem = Elements[0 ].getElement ();
607+ ASSERT_TRUE (std::holds_alternative<RootFlags>(Elem));
608+ ASSERT_EQ (std::get<RootFlags>(Elem), RootFlags::None);
609+
610+ ASSERT_TRUE (Consumer->isSatisfied ());
611+ }
612+
565613TEST_F (ParseHLSLRootSignatureTest, ValidParseRootDescriptorsTest) {
566614 using llvm::dxbc::RootDescriptorFlags;
567615 const llvm::StringLiteral Source = R"cc(
@@ -1658,4 +1706,27 @@ TEST_F(ParseHLSLRootSignatureTest, InvalidDescriptorRangeFlagsValueTest) {
16581706 ASSERT_TRUE (Consumer->isSatisfied ());
16591707}
16601708
1709+ TEST_F (ParseHLSLRootSignatureTest, InvalidMultipleRootFlagsTest) {
1710+ // This test will check that an error is produced when there are multiple
1711+ // root flags provided
1712+ const llvm::StringLiteral Source = R"cc(
1713+ RootFlags(DENY_VERTEX_SHADER_ROOT_ACCESS),
1714+ RootFlags(DENY_PIXEL_SHADER_ROOT_ACCESS)
1715+ )cc" ;
1716+
1717+ auto Ctx = createMinimalASTContext ();
1718+ StringLiteral *Signature = wrapSource (Ctx, Source);
1719+
1720+ TrivialModuleLoader ModLoader;
1721+ auto PP = createPP (Source, ModLoader);
1722+
1723+ hlsl::RootSignatureParser Parser (RootSignatureVersion::V1_1, Signature, *PP);
1724+
1725+ // Test correct diagnostic produced
1726+ Consumer->setExpected (diag::err_hlsl_rootsig_repeat_param);
1727+ ASSERT_TRUE (Parser.parse ());
1728+
1729+ ASSERT_TRUE (Consumer->isSatisfied ());
1730+ }
1731+
16611732} // anonymous namespace
0 commit comments