================
@@ -5311,6 +5311,109 @@ TEST(Hover, FunctionParameters) {
   }
 }
 
+TEST(Hover, HLSLVectorAndMatrixSwizzle) {
+  struct {
+    const char *const Code;
+    const std::function<void(HoverInfo &)> ExpectedBuilder;
+  } Cases[] = {
+      {
+          R"cpp(
+            typedef float float3 __attribute__((ext_vector_type(3)));
+            void main() {
+              float3 v;
+              float3 s = v.^[[xyz]];
+            }
+          )cpp",
+          [](HoverInfo &HI) {
+            HI.Name = "xyz";
+            HI.Type = "float3";
+          }},
+      {
+          R"cpp(
+            typedef float float3 __attribute__((ext_vector_type(3)));
----------------
mafeguimaraes wrote:

Real HLSL files pull float3/float4x4 etc from hlsl.h (included automatically 
via -finclude-default-header). TestTU builds against an in-memory filesystem 
though, so hlsl.h isn't reachable there, you can see "Dropped diagnostic: 
'hlsl.h' file not found" in the test output even though the build still 
succeeds.

The typedef/attribute is a way around that missing header. It's not testing 
HLSL's real type sugar, just the ExtVectorElementExpr/MatrixElementExpr hover 
paths, so I used Clang's underlying vector/matrix extension attributes directly 
instead. Open to a better way to do this if you know one.

https://github.com/llvm/llvm-project/pull/212741
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to