[NFC][HLSL] Add tests for vector alias. Remove dead code.
authorChris Bieneman <chris.bieneman@me.com>
Tue, 5 Jul 2022 20:38:06 +0000 (15:38 -0500)
committerChris Bieneman <chris.bieneman@me.com>
Tue, 5 Jul 2022 21:32:59 +0000 (16:32 -0500)
Based on feedback from @Aaron.Ballman.

Remove the unused static ID char (can re-add it later if needed).

Add test to cover some invalid HLSL vector instantations ensuring
that the appropriate error messages are generated.

clang/include/clang/Sema/HLSLExternalSemaSource.h
clang/lib/Sema/HLSLExternalSemaSource.cpp
clang/test/SemaHLSL/BuiltIns/vector-errors.hlsl [new file with mode: 0644]

index 9215442..439fc3d 100644 (file)
@@ -19,8 +19,6 @@ class NamespaceDecl;
 class Sema;
 
 class HLSLExternalSemaSource : public ExternalSemaSource {
-  static char ID;
-
   Sema *SemaPtr = nullptr;
   NamespaceDecl *HLSLNamespace;
 
index 2de9037..56c2dd4 100644 (file)
@@ -17,8 +17,6 @@
 
 using namespace clang;
 
-char HLSLExternalSemaSource::ID;
-
 HLSLExternalSemaSource::~HLSLExternalSemaSource() {}
 
 void HLSLExternalSemaSource::InitializeSema(Sema &S) {
diff --git a/clang/test/SemaHLSL/BuiltIns/vector-errors.hlsl b/clang/test/SemaHLSL/BuiltIns/vector-errors.hlsl
new file mode 100644 (file)
index 0000000..d2598a5
--- /dev/null
@@ -0,0 +1,30 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -fsyntax-only -verify %s
+
+// Some bad declarations
+hlsl::vector ShouldWorkSomeday; // expected-error{{use of alias template 'hlsl::vector' requires template arguments}}
+
+hlsl::vector<1> BadVec; // expected-error{{template argument for template type parameter must be a type}}
+// expected-note@*:* {{template is declared here}}
+// expected-note@*:* {{template parameter is declared here}}
+
+
+hlsl::vector<int, float> AnotherBadVec; // expected-error{{template argument for non-type template parameter must be an expression}}
+// expected-note@*:* {{template parameter is declared here}}
+
+hlsl::vector<int, 2, 3> YABV; // expected-error{{too many template arguments for alias template 'vector'}}
+// expected-note@*:* {{template is declared here}}
+
+// This code is rejected by clang because clang puts the HLSL built-in types
+// into the HLSL namespace.
+namespace hlsl {
+  struct vector {}; // expected-error {{redefinition of 'vector'}}
+}
+
+// This code is rejected by dxc because dxc puts the HLSL built-in types
+// into the global space, but clang will allow it even though it will shadow the
+// vector template.
+struct vector {}; // expected-note {{candidate found by name lookup is 'vector'}}
+
+vector<int,2> VecInt2; // expected-error {{reference to 'vector' is ambiguous}}
+
+// expected-note@*:* {{candidate found by name lookup is 'hlsl::vector'}}