[PATCH] D21678: Fix For pr28288 - Error message in shift of vector values

Akira Hatanaka via cfe-commits cfe-commits at lists.llvm.org
Tue Sep 6 17:21:22 PDT 2016


It seems to me that the test case in test/Sema/vector-cast.c looks incorrect. According to gcc’s documentation, you can cast vectors to and from scalars of the same size, so clang shouldn’t reject “double += <1 x double>".

https://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html <https://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html>

It is possible to cast from one vector type to another, provided they are of the same size (in fact, you can also cast vectors to and from other datatypes of the same size).


> On Sep 6, 2016, at 3:09 PM, Akira Hatanaka <ahatanaka at apple.com> wrote:
> 
> This is urgent, so I’ve tried to come up with a patch to fix this. I tried reverting r278501 and then made changes to have Sema::CheckVectorOperands call tryVectorConvertAndSplat when the vector type is a normal gcc vector. This fixes the test case I sent and also doesn’t affect the regression tests except that clang prints different error messages in a few cases and doesn’t print an expected diagnostic in one case, which is line 63 of test/Sema/vector-cast.c. We currently expect clang to print a diagnostic when we have a compound assignment like “double += <1 X double>”, but my patch makes clang accept it.
> 
>> On Sep 5, 2016, at 6:36 AM, Vladimir Yakovlev via cfe-commits <cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>> wrote:
>> 
>> I'll fix this.
>> 
>> 
>> 
>> Vladimir
>> 
>> 
>> 
>> -----------------------------------------------------------------------------------
>> 
>> From: Akira Hatanaka <ahatanak at gmail.com <mailto:ahatanak at gmail.com>>
>> Date: Fri, Sep 2, 2016 at 3:00 AM
>> Subject: Re: [PATCH] D21678: Fix For pr28288 - Error message in shift of vector values
>> To: vladimir.1 at gmail.com <mailto:vladimir.1 at gmail.com>, ulrich.weigand at de.ibm.com <mailto:ulrich.weigand at de.ibm.com>, amjad.aboud at intel.com <mailto:amjad.aboud at intel.com>, guy.benyei at intel.com <mailto:guy.benyei at intel.com>, aaron.ballman at gmail.com <mailto:aaron.ballman at gmail.com>
>> Cc: ahatanak at gmail.com <mailto:ahatanak at gmail.com>, andreybokhanko at gmail.com <mailto:andreybokhanko at gmail.com>, anastasia.stulova at arm.com <mailto:anastasia.stulova at arm.com>, dmitry.polukhin at gmail.com <mailto:dmitry.polukhin at gmail.com>, cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>
>> 
>> 
>> ahatanak added a subscriber: ahatanak.
>> ahatanak added a comment.
>> 
>> This patch causes clang to error out on the following code, which used to compile fine:
>> 
>> $ cat f2.c
>> 
>>   typedef __attribute__((__ext_vector_type__(8))) unsigned short vector_ushort8;
>> 
>>   vector_ushort8 foo1(void) {
>>     return 1 << (vector_ushort8){7,6,5,4,3,2,1,0};
>>   }
>> 
>> $ clang f2.c -c
>> 
>> clang used to transform the scaler operand to a vector operand (similar to the way gcc's vector is handled) when compiling for normal c/c++ (but printed an error message when compiling for opencl), but this patch dropped the check for LangOpts added in r230464 and changed that behavior. I don't think this was intentional?
>> 
>> 
>> 
>> Repository:
>>   rL LLVM
>> 
>> https://reviews.llvm.org/D21678 <https://reviews.llvm.org/D21678>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160906/208f6210/attachment.html>


More information about the cfe-commits mailing list