[clang] [HLSL] Rewrite a small subset of HLSL intrinsics into TableGen (PR #188362)

Deric C. via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 25 10:00:59 PDT 2026


================
@@ -3,64 +3,56 @@
 float test_no_second_arg(float3 p0) {
   return refract(p0);
   // expected-error at -1 {{no matching function for call to 'refract'}}
-  // expected-note at hlsl/hlsl_intrinsics.h:* {{candidate function template not viable: requires 3 arguments, but 1 was provided}}
-  // expected-note at hlsl/hlsl_intrinsics.h:* {{candidate function template not viable: requires 3 arguments, but 1 was provided}}
-  // expected-note at hlsl/hlsl_intrinsics.h:* {{candidate function template not viable: requires 3 arguments, but 1 was provided}}
-  // expected-note at hlsl/hlsl_intrinsics.h:* {{candidate function template not viable: requires 3 arguments, but 1 was provided}}
+  // expected-note at hlsl/hlsl_inline_intrinsics_gen.inc:* 8 {{candidate function not viable: requires 3 arguments, but 1 was provided}}
 }
 
 float test_no_third_arg(float3 p0) {
   return refract(p0, p0);
   // expected-error at -1 {{no matching function for call to 'refract'}}
-  // expected-note at hlsl/hlsl_intrinsics.h:* {{candidate function template not viable: requires 3 arguments, but 2 were provided}}
-  // expected-note at hlsl/hlsl_intrinsics.h:* {{candidate function template not viable: requires 3 arguments, but 2 were provided}}
-  // expected-note at hlsl/hlsl_intrinsics.h:* {{candidate function template not viable: requires 3 arguments, but 2 were provided}}
-  // expected-note at hlsl/hlsl_intrinsics.h:* {{candidate function template not viable: requires 3 arguments, but 2 were provided}}
+  // expected-note at hlsl/hlsl_inline_intrinsics_gen.inc:* 8 {{candidate function not viable: requires 3 arguments, but 2 were provided}}
 }
 
 float test_too_many_arg(float2 p0) {
   return refract(p0, p0, p0, p0);
   // expected-error at -1 {{no matching function for call to 'refract'}}
-  // expected-note at hlsl/hlsl_intrinsics.h:* {{candidate function template not viable: requires 3 arguments, but 4 were provided}}
-  // expected-note at hlsl/hlsl_intrinsics.h:* {{candidate function template not viable: requires 3 arguments, but 4 were provided}}
-  // expected-note at hlsl/hlsl_intrinsics.h:* {{candidate function template not viable: requires 3 arguments, but 4 were provided}}
-  // expected-note at hlsl/hlsl_intrinsics.h:* {{candidate function template not viable: requires 3 arguments, but 4 were provided}}
+  // expected-note at hlsl/hlsl_inline_intrinsics_gen.inc:* 8 {{candidate function not viable: requires 3 arguments, but 4 were provided}}
 }
 
 float test_double_inputs(double p0, double p1, double p2) {
   return refract(p0, p1, p2);
-  // expected-error at -1  {{no matching function for call to 'refract'}}
-  // expected-note at hlsl/hlsl_intrinsics.h:* {{candidate template ignored}}
-  // expected-note at hlsl/hlsl_intrinsics.h:* {{candidate template ignored}}
-  // expected-note at hlsl/hlsl_intrinsics.h:* {{candidate template ignored}}
-  // expected-note at hlsl/hlsl_intrinsics.h:* {{candidate template ignored}}
+  // expected-error at -1  {{call to 'refract' is ambiguous}}
+  // expected-note at hlsl/hlsl_inline_intrinsics_gen.inc:* 2 {{candidate function}}
 }
 
 float test_int_inputs(int p0, int p1, int p2) {
   return refract(p0, p1, p2);
-  // expected-error at -1  {{no matching function for call to 'refract'}}
-  // expected-note at hlsl/hlsl_intrinsics.h:* {{candidate template ignored}}
-  // expected-note at hlsl/hlsl_intrinsics.h:* {{candidate template ignored}}
-  // expected-note at hlsl/hlsl_intrinsics.h:* {{candidate template ignored}}
-  // expected-note at hlsl/hlsl_intrinsics.h:* {{candidate template ignored}}
+  // expected-error at -1  {{call to 'refract' is ambiguous}}
+  // expected-note at hlsl/hlsl_inline_intrinsics_gen.inc:* 2 {{candidate function}}
 }
 
 float1 test_vec1_inputs(float1 p0, float1 p1, float1 p2) {
   return refract(p0, p1, p2);
----------------
Icohedron wrote:

This function call is now valid, when it wasn't before. There are now just float1 -> float implicit conversion warnings instead of no matching function call.

https://github.com/llvm/llvm-project/pull/188362


More information about the cfe-commits mailing list