================
@@ -0,0 +1,27 @@
+// RUN: %clang_cc1 -finclude-default-header -triple \
+// RUN:   dxil-pc-shadermodel6.3-library %s \
+// RUN:   -emit-llvm -O1 -verify
+
+bool test_too_few_arg(bool a) {
+  return __builtin_hlsl_and(a);
+  // expected-error@-1 {{too few arguments to function call, expected 2, have 
1}}
+}
+
+bool test_too_many_arg(bool a) {
+  return __builtin_hlsl_and(a, a, a);
+  // expected-error@-1 {{too many arguments to function call, expected 2, have 
3}}
+}
+
+bool2 test_mismatched_args(bool2 a, bool3 b) {
+  return __builtin_hlsl_and(a, b);
+  // expected-error@-1 {{all arguments to '__builtin_hlsl_and' must have the 
same type}}
+}
+
+struct S {
+  bool a;
+};
+
+bool test_invalid_type_conversion(S s) {
+  return __builtin_hlsl_and(s, s);
----------------
Icohedron wrote:

I understand now why `__builtin_hlsl_and` was trying to return a struct of type 
`S`: it was specified in `SemaHLSL.cpp` that the return type is equal to the 
type of the first argument. Hence, when `S` is passed in, 
`__builtin_hlsl_and`'s return type is also `S` and therefore the error message 
now makes sense because `S` can not be converted to a bool to satisfy the 
return type of the `and` function.

Hence the need to add a check to ensure that the types of the arguments passed 
to `__builtin_hlsl_and` are bools. 

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

Reply via email to