Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add restriction to "vec::as" #447

Merged
merged 1 commit into from
Aug 17, 2023

Conversation

gmlueck
Copy link
Contributor

@gmlueck gmlueck commented Jul 25, 2023

This change was prompted by a discussion in KhronosGroup/SYCL-CTS#756, relating to a test of vec::as. That test tried to use vec::as to reinterpret a sycl::vec<float, 3> as sycl::vec<int, 4>, which is legal according to the spec because they both have the same storage size. (This is because a vec of length 3 has the same storage size as a vec of length 4.) However, the semantics are unclear because the content of the 4th element is undefined for a 3 element vec.

It seems reasonable to simply state that such a use of vec::as is not allowed. I think our intent was to allow vec::as to reinterpret only the bits of defined elements in a vec, which is what this change does.

This change was prompted by a discussion in KhronosGroup/SYCL-CTS#756,
relating to a test of `vec::as`.  That test tried to use `vec::as` to
reinterpret a `sycl::vec<float, 3>` as `sycl::vec<int, 4>`, which is
legal according to the spec because they both have the same storage
size.  (This is because a `vec` of length 3 has the same storage size
as a `vec` of length 4.)  However, the semantics are unclear because
the content of the 4th element is undefined for a 3 element `vec`.

It seems reasonable to simply state that such a use of `vec::as` is not
allowed.  I think our intent was to allow `vec::as` to reinterpret only
the bits of defined elements in a `vec`, which is what this change
does.
0x12CC added a commit to 0x12CC/SYCL-CTS that referenced this pull request Jul 27, 2023
Disable `check_vector_as` comparisons for cases where the size of the
elements differs after conversion. This matches the restriction
described in KhronosGroup/SYCL-Docs#447.

Signed-off-by: Michael Aziz <michael.aziz@intel.com>
Copy link
Member

@keryell keryell left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Avoiding UB when it is simple to solve makes sense.

@fraggamuffin
Copy link

LGTM

@fraggamuffin
Copy link

not related to 455

@keryell keryell merged commit 91ce7b7 into KhronosGroup:SYCL-2020/master Aug 17, 2023
1 check passed
@gmlueck gmlueck deleted the gmlueck/vec-as branch August 21, 2023 22:10
keryell added a commit that referenced this pull request Sep 10, 2024
This change was prompted by a discussion in KhronosGroup/SYCL-CTS#756, relating to a test of `vec::as`.  That test tried to use `vec::as` to reinterpret a `sycl::vec<float, 3>` as `sycl::vec<int, 4>`, which is legal according to the spec because they both have the same storage size.  (This is because a `vec` of length 3 has the same storage size as a `vec` of length 4.)  However, the semantics are unclear because the content of the 4th element is undefined for a 3 element `vec`.

It seems reasonable to simply state that such a use of `vec::as` is not allowed.  I think our intent was to allow `vec::as` to reinterpret only the bits of defined elements in a `vec`, which is what this change does.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants