llvm / llvm/llvm-project

[HLSL][Sema] Add Diagnostics to reject swizzles on long vectors

Open
#216,199 2 comments 0 reactions 1 assignee Claimed by @farzonl View on GitHub
clang:frontend HLSL
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.