[HLSL][Sema] Add Diagnostics to reject swizzles on long vectors
- Dominant language
- LLVM
- Stars
- 40.5k
- Forks
- 18.7k
- PR merge metrics
- PR metrics pending
Description
The `.xyzw`-style swizzles remain capped at 4 components; must diagnose (not silently truncate) when attempted on N>4 vectors.
See tools/clang/test/SemaHLSL/hlsl/types/invalid-longvec-swizzle.hlsl
The testing is a little less than I would want since I don't see `rgba` but this is a good start to see if we have the feature right
```hlsl
export
vector doit(vector vec5) {
vec5.x = 1; // expected-error {{invalid swizzle 'x' on vector of over 4 elements.}}
return vec5.xyw; // expected-error {{invalid swizzle 'xyw' on vector of over 4 elements.}}
}
export
TYPE arr_to_vec(TYPE arr[5]) {
TYPE val = (vector(arr, 1)).x; // expected-error {{invalid swizzle 'x' on vector of over 4 elements.}}
TYPE val2 = ((vector)arr).x; // expected-error {{invalid swizzle 'x' on vector of over 4 elements.}}
return val;
}
export TYPE lv_ctor(TYPE s) {
TYPE ret = (vector(1, 2, 3, 4, 5, s)).x; // expected-error {{invalid swizzle 'x' on vector of over 4 elements.}}
return ret;
}
```
Contributor guide
Assessment
This issue has not been assessed yet.