Index: test/SemaCXX/vector.cpp
===================================================================
--- test/SemaCXX/vector.cpp	(revision 174140)
+++ test/SemaCXX/vector.cpp	(working copy)
@@ -3,6 +3,7 @@
 typedef long long longlong16 __attribute__ ((__vector_size__ (16)));
 typedef char char16_e __attribute__ ((__ext_vector_type__ (16)));
 typedef long long longlong16_e __attribute__ ((__ext_vector_type__ (2)));
+typedef float float2 __attribute__ ((__ext_vector_type__ (2)));
 
 // Test overloading and function calls with vector types.
 void f0(char16);
@@ -112,7 +113,8 @@
                                convertible_to<char16_e> to_c16e, 
                                convertible_to<longlong16_e> to_ll16e,
                                convertible_to<char16&> rto_c16,
-                               convertible_to<char16_e&> rto_c16e) {
+                               convertible_to<char16_e&> rto_c16e,
+                               float2 flt2, long l) {
   f0(to_c16);
   f0(to_ll16);
   f0(to_c16e);
@@ -187,6 +189,39 @@
   // These 2 are convertable with -flax-vector-conversions (default)
   (void)(Cond? to_c16 : to_ll16);
   (void)(Cond? to_c16e : to_ll16e);
+
+  (void)(flt2 == l); // expected-error{{can't convert between vector values}}
+  (void)(flt2 != l); // expected-error{{can't convert between vector values}}
+  (void)(flt2 <  l); // expected-error{{can't convert between vector values}}
+  (void)(flt2 <= l); // expected-error{{can't convert between vector values}}
+  (void)(flt2 >  l); // expected-error{{can't convert between vector values}}
+  (void)(flt2 >= l); // expected-error{{can't convert between vector values}}
+  (void)(flt2 + l); // expected-error{{can't convert between vector values}}
+  (void)(flt2 - l); // expected-error{{can't convert between vector values}}
+  (void)(flt2 * l); // expected-error{{can't convert between vector values}}
+  (void)(flt2 / l); // expected-error{{can't convert between vector values}}
+  (void)(flt2 = l);
+  (void)(flt2 += l); // expected-error{{can't convert between vector values}}
+  (void)(flt2 -= l); // expected-error{{can't convert between vector values}}
+  (void)(flt2 *= l); // expected-error{{can't convert between vector values}}
+  (void)(flt2 /= l); // expected-error{{can't convert between vector values}}
+  
+  (void)(l == flt2); // expected-error{{can't convert between vector values}}
+  (void)(l != flt2); // expected-error{{can't convert between vector values}}
+  (void)(l <  flt2); // expected-error{{can't convert between vector values}}
+  (void)(l <= flt2); // expected-error{{can't convert between vector values}}
+  (void)(l >  flt2); // expected-error{{can't convert between vector values}}
+  (void)(l >= flt2); // expected-error{{can't convert between vector values}}
+  (void)(l + flt2); // expected-error{{can't convert between vector values}}
+  (void)(l - flt2); // expected-error{{can't convert between vector values}}
+  (void)(l * flt2); // expected-error{{can't convert between vector values}}
+  (void)(l / flt2); // expected-error{{can't convert between vector values}}
+  (void)(l = flt2); // expected-error{{assigning to 'long' from incompatible type 'float2'}}
+  (void)(l += flt2); // expected-error{{can't convert between vector values}}
+  (void)(l -= flt2); // expected-error{{can't convert between vector values}}
+  (void)(l *= flt2); // expected-error{{can't convert between vector values}}
+  (void)(l /= flt2); // expected-error{{can't convert between vector values}}
+
 }
 
 typedef float fltx2 __attribute__((__vector_size__(8)));
Index: lib/Sema/SemaExpr.cpp
===================================================================
--- lib/Sema/SemaExpr.cpp	(revision 174140)
+++ lib/Sema/SemaExpr.cpp	(working copy)
@@ -6096,6 +6096,7 @@
   }
 
   if (getLangOpts().LaxVectorConversions &&
+      LHSType->isVectorType() && RHSType->isVectorType() &&
       Context.getTypeSize(LHSType) == Context.getTypeSize(RHSType)) {
     // If we are allowing lax vector conversions, and LHS and RHS are both
     // vectors, the total size only needs to be the same. This is a
