
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.
29 lines
1.5 KiB
HLSL
29 lines
1.5 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 -DTEST_FUNC=__builtin_elementwise_exp
|
|
// 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 -DTEST_FUNC=__builtin_elementwise_exp2
|
|
// 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 -DTEST_FUNC=__builtin_elementwise_exp10
|
|
float test_too_few_arg() {
|
|
return TEST_FUNC();
|
|
// expected-error@-1 {{too few arguments to function call, expected 1, have 0}}
|
|
}
|
|
|
|
float2 test_too_many_arg(float2 p0) {
|
|
return TEST_FUNC(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 TEST_FUNC(p1);
|
|
// expected-error@-1 {{1st argument must be a scalar or vector of floating-point types (was 'bool')}}
|
|
}
|
|
|
|
float builtin_exp_int_to_float_promotion(int p1) {
|
|
return TEST_FUNC(p1);
|
|
// expected-error@-1 {{1st argument must be a scalar or vector of floating-point types (was 'int')}}
|
|
}
|
|
|
|
float2 builtin_exp_int2_to_float2_promotion(int2 p1) {
|
|
return TEST_FUNC(p1);
|
|
// expected-error@-1 {{1st argument must be a scalar or vector of floating-point types (was 'int2' (aka 'vector<int, 2>'))}}
|
|
}
|