diff --git a/clang/include/clang/Sema/HLSLExternalSemaSource.h b/clang/include/clang/Sema/HLSLExternalSemaSource.h index 92154427a3e72..439fc3d10f333 100644 --- a/clang/include/clang/Sema/HLSLExternalSemaSource.h +++ b/clang/include/clang/Sema/HLSLExternalSemaSource.h @@ -19,8 +19,6 @@ class NamespaceDecl; class Sema; class HLSLExternalSemaSource : public ExternalSemaSource { - static char ID; - Sema *SemaPtr = nullptr; NamespaceDecl *HLSLNamespace; diff --git a/clang/lib/Sema/HLSLExternalSemaSource.cpp b/clang/lib/Sema/HLSLExternalSemaSource.cpp index 2de90378baf90..56c2dd40bd9a8 100644 --- a/clang/lib/Sema/HLSLExternalSemaSource.cpp +++ b/clang/lib/Sema/HLSLExternalSemaSource.cpp @@ -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 index 0000000000000..d2598a57400b0 --- /dev/null +++ b/clang/test/SemaHLSL/BuiltIns/vector-errors.hlsl @@ -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 AnotherBadVec; // expected-error{{template argument for non-type template parameter must be an expression}} +// expected-note@*:* {{template parameter is declared here}} + +hlsl::vector 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 VecInt2; // expected-error {{reference to 'vector' is ambiguous}} + +// expected-note@*:* {{candidate found by name lookup is 'hlsl::vector'}}