[llvm-branch-commits] [cfe-branch] r309770 - Merging r309722:

Hans Wennborg via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Aug 1 16:54:32 PDT 2017


Author: hans
Date: Tue Aug  1 16:54:32 2017
New Revision: 309770

URL: http://llvm.org/viewvc/llvm-project?rev=309770&view=rev
Log:
Merging r309722:
------------------------------------------------------------------------
r309722 | bruno | 2017-08-01 12:05:25 -0700 (Tue, 01 Aug 2017) | 7 lines

[Sema] Fix lax conversion between non ext vectors

r282968 introduced a regression due to the lack of proper testing.
Re-add lax conversion support between non ext vectors for compound
assignments and add a test for that.

rdar://problem/28639467
------------------------------------------------------------------------

Modified:
    cfe/branches/release_50/   (props changed)
    cfe/branches/release_50/lib/Sema/SemaExpr.cpp
    cfe/branches/release_50/test/Sema/vector-cast.c

Propchange: cfe/branches/release_50/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Aug  1 16:54:32 2017
@@ -1,4 +1,4 @@
 /cfe/branches/type-system-rewrite:134693-134817
-/cfe/trunk:308455,308824,308897,309058,309112-309113,309226,309327,309382-309383,309488,309503,309752
+/cfe/trunk:308455,308824,308897,309058,309112-309113,309226,309327,309382-309383,309488,309503,309722,309752
 /cfe/trunk/test:170344
 /cfe/trunk/test/SemaTemplate:126920

Modified: cfe/branches/release_50/lib/Sema/SemaExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_50/lib/Sema/SemaExpr.cpp?rev=309770&r1=309769&r2=309770&view=diff
==============================================================================
--- cfe/branches/release_50/lib/Sema/SemaExpr.cpp (original)
+++ cfe/branches/release_50/lib/Sema/SemaExpr.cpp Tue Aug  1 16:54:32 2017
@@ -8288,7 +8288,7 @@ QualType Sema::CheckVectorOperands(ExprR
     // type. Note that this is already done by non-compound assignments in
     // CheckAssignmentConstraints. If it's a scalar type, only bitcast for
     // <1 x T> -> T. The result is also a vector type.
-    } else if (OtherType->isExtVectorType() ||
+    } else if (OtherType->isExtVectorType() || OtherType->isVectorType() ||
                (OtherType->isScalarType() && VT->getNumElements() == 1)) {
       ExprResult *RHSExpr = &RHS;
       *RHSExpr = ImpCastExprToType(RHSExpr->get(), LHSType, CK_BitCast);

Modified: cfe/branches/release_50/test/Sema/vector-cast.c
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_50/test/Sema/vector-cast.c?rev=309770&r1=309769&r2=309770&view=diff
==============================================================================
--- cfe/branches/release_50/test/Sema/vector-cast.c (original)
+++ cfe/branches/release_50/test/Sema/vector-cast.c Tue Aug  1 16:54:32 2017
@@ -48,6 +48,9 @@ typedef float float2 __attribute__ ((vec
 typedef __attribute__((vector_size(8))) double float64x1_t;
 typedef __attribute__((vector_size(16))) double float64x2_t;
 float64x1_t vget_low_f64(float64x2_t __p0);
+typedef float float16 __attribute__((__vector_size__(16)));
+typedef signed int vSInt32 __attribute__((__vector_size__(16)));
+typedef unsigned int vUInt32 __attribute__((__vector_size__(16)));
 
 void f4() {
   float2 f2;
@@ -73,3 +76,8 @@ void f5() {
   v = ptr; // expected-error-re {{assigning to 'short_sizeof_pointer' (vector of {{[0-9]+}} 'short' values) from incompatible type 'void *'}}
   ptr = v; // expected-error {{assigning to 'void *' from incompatible type 'short_sizeof_pointer'}}
 }
+
+void f6(vSInt32 a0) {
+  vUInt32 counter = (float16){0.0f, 0.0f, 0.0f, 0.0f}; // expected-warning {{incompatible vector types initializing 'vUInt32' (vector of 4 'unsigned int' values) with an expression of type 'float16' (vector of 4 'float' values)}}
+  counter -= a0;
+}




More information about the llvm-branch-commits mailing list