[clang] [HLSL] Implement the 'and' HLSL function (PR #127098)

Deric Cheung via cfe-commits cfe-commits at lists.llvm.org
Fri Feb 14 15:56:37 PST 2025


================
@@ -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 at -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 at -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 at -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:

Actually, there is something like that, but it seems `__builtin_hlsl_and` is triggering something else.
The `D3DCOLORtoUBYTE` function doesn't have any SemaHLSL and [yet has a similar test which emits a more accurate error message](https://github.com/llvm/llvm-project/blob/main/clang/test/SemaHLSL/BuiltIns/D3DCOLORtoUBYTE4-errors.hlsl#L28). Perhaps this is just because `D3DCOLORtoUBYTE` is a header-only implementation?

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


More information about the cfe-commits mailing list