
This commit improves the diagnostics for vector (elementwise) builtins in a couple of ways. It primarily provides more precise type-checking diagnostics for builtins with specific type requirements. Previously many builtins were receiving a catch-all diagnostic suggesting types which aren't valid. It also makes consistent the type-checking behaviour between various binary and ternary builtins. The binary builtins would check for mismatched argument types before specific type requirements, whereas ternary builtins would perform the checks in the reverse order. The binary builtins now behave as the ternary ones do.
27 lines
984 B
HLSL
27 lines
984 B
HLSL
// RUN: %clang_cc1 -finclude-default-header -triple dxil-pc-shadermodel6.6-library %s -fnative-half-type -emit-llvm-only -disable-llvm-passes -verify -verify-ignore-unexpected
|
|
|
|
int test_too_few_arg() {
|
|
return firstbitlow();
|
|
// expected-error@-1 {{no matching function for call to 'firstbitlow'}}
|
|
}
|
|
|
|
int test_too_many_arg(int p0) {
|
|
return firstbitlow(p0, p0);
|
|
// expected-error@-1 {{no matching function for call to 'firstbitlow'}}
|
|
}
|
|
|
|
double test_int_builtin(double p0) {
|
|
return firstbitlow(p0);
|
|
// expected-error@-1 {{call to 'firstbitlow' is ambiguous}}
|
|
}
|
|
|
|
double2 test_int_builtin_2(double2 p0) {
|
|
return __builtin_hlsl_elementwise_firstbitlow(p0);
|
|
// expected-error@-1 {{1st argument must be a scalar or vector of integer types (was 'double2' (aka 'vector<double, 2>'))}}
|
|
}
|
|
|
|
float test_int_builtin_3(float p0) {
|
|
return __builtin_hlsl_elementwise_firstbitlow(p0);
|
|
// expected-error@-1 {{1st argument must be a scalar or vector of integer types (was 'double')}}
|
|
}
|