ソースを参照

Emit warning on unknown attribute with arguments instead of error (#2999)

Tex Riddell 5 年 前
コミット
17eae8e607

+ 1 - 1
tools/clang/lib/Parse/ParseDecl.cpp

@@ -769,7 +769,7 @@ void Parser::ParseGNUAttributeArgs(IdentifierInfo *AttrName,
     //case AttributeList::AT_HLSLPayload:
       goto GenericAttributeParse;
     default:
-      Diag(AttrNameLoc, diag::err_hlsl_unsupported_construct) << AttrName;
+      Diag(AttrNameLoc, diag::warn_unknown_attribute_ignored) << AttrName;
       ConsumeParen();
       BalancedDelimiterTracker tracker(*this, tok::l_paren);
       tracker.skipToEnd();

+ 8 - 1
tools/clang/test/HLSL/attributes.hlsl

@@ -735,4 +735,11 @@ bool Test_Unroll() {
   [noinline] bool b = false;                  /* expected-warning {{'noinline' attribute only applies to functions}} fxc-pass {{}} */
   [noinline] while (g_bool) return g_bool;    /* expected-error {{'noinline' attribute cannot be applied to a statement}} fxc-pass {{}} */
   return true;
-}
+}
+
+// Test unknown attribute warning
+bool Test_Unknown() {
+  [unknown] bool b1 = false;                  /* expected-warning {{unknown attribute 'unknown' ignored}} fxc-pass {{}} */
+  [unknown(1)] bool b2 = false;               /* expected-warning {{unknown attribute 'unknown' ignored}} fxc-pass {{}} */
+  [unknown(1)] while (g_bool) return g_bool;  /* expected-warning {{unknown attribute 'unknown' ignored}} fxc-pass {{}} */
+}

+ 1 - 1
tools/clang/test/HLSL/cpp-errors-hv2015.hlsl

@@ -208,7 +208,7 @@ int is_supported() {
   return 0;
 }
 
-[availability(*, unavailable, renamed="somethingelse")] void fn_unavailable(); // expected-error {{'availability' is unsupported in HLSL}}
+[availability(*, unavailable, renamed="somethingelse")] void fn_unavailable(); // expected-warning {{unknown attribute 'availability' ignored}}
 __declspec(align(16)) struct SAligned { int i; }; // expected-error {{'__declspec' is a reserved keyword in HLSL}}
 void __fastcall fn_fastcall(); // expected-error {{'__fastcall' is a reserved keyword in HLSL}}
 

+ 1 - 1
tools/clang/test/HLSL/cpp-errors.hlsl

@@ -208,7 +208,7 @@ int is_supported() {
   return 0;
 }
 
-[availability(*, unavailable, renamed="somethingelse")] void fn_unavailable(); // expected-error {{'availability' is unsupported in HLSL}}
+[availability(*, unavailable, renamed="somethingelse")] void fn_unavailable(); // expected-warning {{unknown attribute 'availability' ignored}}
 __declspec(align(16)) struct SAligned { int i; }; // expected-error {{'__declspec' is a reserved keyword in HLSL}}
 void __fastcall fn_fastcall(); // expected-error {{'__fastcall' is a reserved keyword in HLSL}}