]> granicus.if.org Git - clang/commit
Fix a crash in EmitStoreThroughExtVectorComponentLValue for vectors of odd sizes.
authorJoey Gouly <joey.gouly@arm.com>
Thu, 21 Nov 2013 17:09:05 +0000 (17:09 +0000)
committerJoey Gouly <joey.gouly@arm.com>
Thu, 21 Nov 2013 17:09:05 +0000 (17:09 +0000)
commit6401d364ab79cf307be4a903c29c087e099eae68
tree94902ae1ae379d9ce53571f621473a5c84f696f3
parent5399ef8e250a1a00d7f14d2c2e502382094dbfee
Fix a crash in EmitStoreThroughExtVectorComponentLValue for vectors of odd sizes.

In OpenCL a vector of 3 elements, acts like a vector of four elements.
So for a vector of size 3 the '.hi' and '.odd' accessors, would access
the elements {2, 3} and {1, 3} respectively.
However, in EmitStoreThroughExtVectorComponentLValue we are still operating on
a vector of size 3, so we should only access {2} and {1}. We do this by checking
the last element to be accessed, and ignore it if it is out-of-bounds.

EmitLoadOfExtVectorElementLValue doesn't have a similar problem, because it does
a direct shufflevector with undef, so an out-of-bounds access just gives an undef
value.

Patch by Anastasia Stulova!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@195367 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/CGExpr.cpp
test/CodeGenOpenCL/vector_odd.cl [new file with mode: 0644]