
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.
28 lines
1.1 KiB
HLSL
28 lines
1.1 KiB
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
|
|
|
|
float test_too_few_arg() {
|
|
return __builtin_elementwise_round();
|
|
// expected-error@-1 {{too few arguments to function call, expected 1, have 0}}
|
|
}
|
|
|
|
float2 test_too_many_arg(float2 p0) {
|
|
return __builtin_elementwise_round(p0, p0);
|
|
// expected-error@-1 {{too many arguments to function call, expected 1, have 2}}
|
|
}
|
|
|
|
float builtin_bool_to_float_type_promotion(bool p1) {
|
|
return __builtin_elementwise_round(p1);
|
|
// expected-error@-1 {{1st argument must be a scalar or vector of floating-point types (was 'bool')}}
|
|
}
|
|
|
|
float builtin_round_int_to_float_promotion(int p1) {
|
|
return __builtin_elementwise_round(p1);
|
|
// expected-error@-1 {{1st argument must be a scalar or vector of floating-point types (was 'int')}}
|
|
}
|
|
|
|
float2 builtin_round_int2_to_float2_promotion(int2 p1) {
|
|
return __builtin_elementwise_round(p1);
|
|
// expected-error@-1 {{1st argument must be a scalar or vector of floating-point types (was 'int2' (aka 'vector<int, 2>'))}}
|
|
}
|