This fixes an error and gcc incompatibilities in vector shifts reported by Akira Hatanaka
From: Akira Hatanaka <ahatanak@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@gmail.com, ulrich.weigand@de.ibm.com, amjad.aboud@intel.com, guy.benyei@intel.com, aaron.ballman@gmail.com
Cc: ahatanak@gmail.com, andreybokhanko@gmail.com, anastasia.stulova@arm.com, dmitry.polukhin@gmail.com, cfe-commits@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
It wasn't clear to me why we have to call DefaultFunctionArrayLvalueConversion instead of UsualUnaryConversions. Is it possible to come up with a test case that would fail without this change, and if it is, can you add it to vecshift.c?