================
@@ -0,0 +1,90 @@
+// RUN: %clang_cc1 -finclude-default-header -triple 
dxil-pc-shadermodel6.6-library %s -emit-llvm-only -disable-llvm-passes -verify 
-verify-ignore-unexpected
+
+int test_no_arg() {
+  return select();
+  // expected-error@-1 {{no matching function for call to 'select'}}
+  // expected-note@hlsl/hlsl_intrinsics.h:* {{candidate function template not 
viable: requires 3 arguments, but 0 were provided}}
+  // expected-note@hlsl/hlsl_intrinsics.h:* {{candidate function template not 
viable: requires 3 arguments, but 0 were provided}}
+}
+
+int test_too_few_args(bool p0) {
+  return select(p0);
+  // expected-error@-1 {{no matching function for call to 'select'}}
+  // expected-note@hlsl/hlsl_intrinsics.h:* {{candidate function template not 
viable: requires 3 arguments, but 1 was provided}}
+  // expected-note@hlsl/hlsl_intrinsics.h:* {{candidate function template not 
viable: requires 3 arguments, but 1 was provided}}
+}
+
+int test_too_many_args(bool p0, int t0, int f0, int g0) {
+  return select<int>(p0, t0, f0, g0);
+  // expected-error@-1 {{no matching function for call to 'select'}}
+  // expected-note@hlsl/hlsl_intrinsics.h:* {{candidate function template not 
viable: requires 3 arguments, but 4 were provided}}
+  // expected-note@hlsl/hlsl_intrinsics.h:* {{candidate function template not 
viable: requires 3 arguments, but 4 were provided}}
+}
+
+int test_select_first_arg_wrong_type(vector<int,1> p0, int t0, int f0) {
+  return select(p0, t0, f0);
+  // expected-error@-1 {{no matching function for call to 'select'}}
+  // expected-note@hlsl/hlsl_intrinsics.h:* {{candidate function template not 
viable: no known conversion from 'vector<int, 1>' (vector of 1 'int' value) to 
'bool' for 1st argument}}
+  // expected-note@hlsl/hlsl_intrinsics.h:* {{candidate template ignored: 
could not match 'vector<T, Sz>' against 'int'}}
+}
+
+vector<int,1> test_select_bool_vals_diff_vecs(bool p0, vector<int,1> t0, 
vector<int,2> f0) {
+  return select<vector<int,1> >(p0, t0, f0);
+  // expected-warning@-1 {{implicit conversion truncates vector: 'vector<int, 
2>' (vector of 2 'int' values) to 'vector<int, 1>' (vector of 1 'int' value)}}
+}
+
+vector<int,2> test_select_vector_vals_not_vecs(vector<bool,2> p0, int t0, int 
f0) {
+  return select(p0, t0, f0);
+  // expected-error@-1 {{no matching function for call to 'select'}}
+  // expected-note@hlsl/hlsl_intrinsics.h:* {{candidate template ignored: 
could not match 'vector<T, Sz>' against 'int'}}
----------------
damyanp wrote:

I'm looking at some of these errors here and wondering if you've managed to 
actually exercise all of the diagnostics emitted from SemaHLSL?  I think that 
most of these diagnostics are actually caught by standard C++ rules for 
function lookup.

I wonder if some tests that directly call `__builtin_hlsl_select` with invalid 
parameters are really required here to have complete coverage?

https://github.com/llvm/llvm-project/pull/107129
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to