Scalar operand type has greater rank than the type of the vector element

Hi all!

I attached test file. In the test we have diagnostic message with the following text: “scalar operand type has greater rank than the type of the vector element. (‘float2’ (vector of 2 ‘float’ values) and ‘double’)”.

If we run this test on the ToT then we get another diagnostic with the following message: “cannot convert between vector values of different size (‘float2’ (vector of 2 ‘float’ values) and ‘double’)”.

I think that the diagnostic on the ToT is wrong because in the code we don’t have two vectors, we have one vector and one scalar. In the OpenCL V2.0 6.2.6.p2 is written that “An error shall occur if any scalar operand has greater rank than the type of the vector element.”.

I have a patch where this diagnostic was implemented.

Should I commit this patch to ToT or it doesn’t matter which diagnostic we will get in this case?

Best regards,

Egor

arithmetic-conversions.cl (967 Bytes)

It looks like the scalar type and the vector element type are checked in tryVectorConvertAndSplat, but the function only tells whether the conversion succeeded or failed, not the reason it failed. I think the diagnostic clang currently shows is misleading.

Hi Egor,

Indeed, considering that the size of float and double is fixed in the spec, the diagnostic is wrong. Feel free to propose the patch if you have any.

Thanks,

Anastasia

Hi Anastasia,

Yes, I’m working on this patch and I’ll send it to review soon.