This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG5b4ed4905017: [PowerPC] Remove the lax warning for explicit casts (authored by maryammo).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D142222/new/ https://reviews.llvm.org/D142222 Files: clang/lib/Sema/SemaOverload.cpp clang/test/Parser/cxx-altivec.cpp clang/test/Parser/lax-conv.cpp
Index: clang/test/Parser/lax-conv.cpp =================================================================== --- /dev/null +++ clang/test/Parser/lax-conv.cpp @@ -0,0 +1,67 @@ +// RUN: %clang_cc1 -triple=powerpc64-unknown-linux-gnu -target-feature +altivec -target-feature +vsx -target-cpu pwr8 -fsyntax-only -verify=expected,nonaix %s +// RUN: %clang_cc1 -triple=powerpc64le-unknown-linux-gnu -target-feature +altivec -target-feature +vsx -target-cpu pwr8 -fsyntax-only -verify=expected,novsx %s +// RUN: %clang_cc1 -triple=powerpc64-ibm-aix -target-feature +altivec -target-feature +vsx -target-cpu pwr8 -fsyntax-only -verify=expected,aix %s + +void dummy(vector unsigned int a); +template <typename VEC> VEC __attribute__((noinline)) test(vector unsigned char a, vector unsigned char b) { + return (VEC)(a * b); +} +vector unsigned int test1(vector unsigned char RetImplicitConv) { + return RetImplicitConv; // expected-warning {{Implicit conversion between vector types (''__vector unsigned char' (vector of 16 'unsigned char' values)' and ''__vector unsigned int' (vector of 4 'unsigned int' values)') is deprecated. In the future, the behavior implied by '-fno-lax-vector-conversions' will be the default.}} +} +vector unsigned int test2(vector unsigned char RetImplicitConvAddConst) { + return RetImplicitConvAddConst + 5; // expected-warning {{Implicit conversion between vector types (''__vector unsigned char' (vector of 16 'unsigned char' values)' and ''__vector unsigned int' (vector of 4 'unsigned int' values)') is deprecated. In the future, the behavior implied by '-fno-lax-vector-conversions' will be the default.}} +} +vector unsigned int test3(vector unsigned char RetExplicitConv) { + return (vector unsigned int)RetExplicitConv; +} +vector unsigned int test4(vector unsigned char RetExplicitConvAddConst) { + return (vector unsigned int)RetExplicitConvAddConst + 5; +} +vector unsigned int test5(vector unsigned char RetImplicitConvAddSame1, + vector unsigned char RetImplicitConvAddSame2) { + return RetImplicitConvAddSame1 + RetImplicitConvAddSame2; // expected-warning {{Implicit conversion between vector types (''__vector unsigned char' (vector of 16 'unsigned char' values)' and ''__vector unsigned int' (vector of 4 'unsigned int' values)') is deprecated. In the future, the behavior implied by '-fno-lax-vector-conversions' will be the default.}} +} +vector unsigned int test6(vector unsigned char RetExplicitConvAddSame1, + vector unsigned char RetExplicitConvAddSame2) { + return (vector unsigned int)RetExplicitConvAddSame1 + + (vector unsigned int)RetExplicitConvAddSame2; +} +vector unsigned int test7(vector unsigned char RetExplicitConvAddSame1Full, + vector unsigned char RetExplicitConvAddSame2Full) { + return (vector unsigned int)(RetExplicitConvAddSame1Full + + RetExplicitConvAddSame2Full); +} +vector unsigned char test8(vector unsigned char a, vector unsigned char b) { + return test<vector unsigned char>(a, b); +} + +vector unsigned long long test9(vector unsigned char a, vector unsigned char b) { + return test<vector unsigned long long>(a, b); +} +void test1a(vector unsigned char ArgImplicitConv) { + return dummy(ArgImplicitConv); // expected-warning {{Implicit conversion between vector types (''__vector unsigned char' (vector of 16 'unsigned char' values)' and ''__vector unsigned int' (vector of 4 'unsigned int' values)') is deprecated. In the future, the behavior implied by '-fno-lax-vector-conversions' will be the default.}} +} +void test2a(vector unsigned char ArgImplicitConvAddConst) { + return dummy(ArgImplicitConvAddConst + 5); // expected-warning {{Implicit conversion between vector types (''__vector unsigned char' (vector of 16 'unsigned char' values)' and ''__vector unsigned int' (vector of 4 'unsigned int' values)') is deprecated. In the future, the behavior implied by '-fno-lax-vector-conversions' will be the default.}} +} +void test3a(vector unsigned char ArgExplicitConv) { + return dummy((vector unsigned int)ArgExplicitConv); +} +void test4a(vector unsigned char ArgExplicitConvAddConst) { + return dummy((vector unsigned int)ArgExplicitConvAddConst + 5); +} +void test5a(vector unsigned char ArgImplicitConvAddSame1, + vector unsigned char ArgImplicitConvAddSame2) { + return dummy(ArgImplicitConvAddSame1 + ArgImplicitConvAddSame2); // expected-warning {{Implicit conversion between vector types (''__vector unsigned char' (vector of 16 'unsigned char' values)' and ''__vector unsigned int' (vector of 4 'unsigned int' values)') is deprecated. In the future, the behavior implied by '-fno-lax-vector-conversions' will be the default.}} +} +void test6a(vector unsigned char ArgExplicitConvAddSame1, + vector unsigned char ArgExplicitConvAddSame2) { + return dummy((vector unsigned int)ArgExplicitConvAddSame1 + + (vector unsigned int)ArgExplicitConvAddSame2); +} +void test7a(vector unsigned char ArgExplicitConvAddSame1Full, + vector unsigned char ArgExplicitConvAddSame2Full) { + return dummy((vector unsigned int)(ArgExplicitConvAddSame1Full + + ArgExplicitConvAddSame2Full)); +} Index: clang/test/Parser/cxx-altivec.cpp =================================================================== --- clang/test/Parser/cxx-altivec.cpp +++ clang/test/Parser/cxx-altivec.cpp @@ -1,10 +1,10 @@ -// RUN: %clang_cc1 -triple=powerpc-apple-darwin8 -Wno-deprecate-lax-vec-conv-all -target-feature +altivec -fsyntax-only -verify=expected,novsx -std=c++11 %s -// RUN: %clang_cc1 -triple=powerpc64-unknown-linux-gnu -Wno-deprecate-lax-vec-conv-all -target-feature +altivec -target-feature +vsx -fsyntax-only -verify=expected,nonaix -std=c++11 %s -// RUN: %clang_cc1 -triple=powerpc64le-unknown-linux-gnu -Wno-deprecate-lax-vec-conv-all -target-feature +altivec -fsyntax-only -verify=expected,novsx -std=c++11 %s -// RUN: %clang_cc1 -triple=powerpc64-unknown-linux-gnu -Wno-deprecate-lax-vec-conv-all -target-feature +vsx -target-cpu pwr7 -fsyntax-only -verify=expected,nonaix -std=c++11 %s -// RUN: %clang_cc1 -triple=powerpc64le-unknown-linux-gnu -Wno-deprecate-lax-vec-conv-all -target-feature -vsx -target-cpu pwr7 -fsyntax-only -verify=expected,novsx -std=c++11 %s -// RUN: %clang_cc1 -triple=powerpc-ibm-aix -Wno-deprecate-lax-vec-conv-all -target-feature +altivec -fsyntax-only -verify=expected,aix -std=c++11 %s -// RUN: %clang_cc1 -triple=powerpc64-ibm-aix -Wno-deprecate-lax-vec-conv-all -target-feature +altivec -fsyntax-only -verify=expected,aix -std=c++11 %s +// RUN: %clang_cc1 -triple=powerpc-apple-darwin8 -target-feature +altivec -fsyntax-only -verify=expected,novsx -std=c++11 %s +// RUN: %clang_cc1 -triple=powerpc64-unknown-linux-gnu -target-feature +altivec -target-feature +vsx -fsyntax-only -verify=expected,nonaix -std=c++11 %s +// RUN: %clang_cc1 -triple=powerpc64le-unknown-linux-gnu -target-feature +altivec -fsyntax-only -verify=expected,novsx -std=c++11 %s +// RUN: %clang_cc1 -triple=powerpc64-unknown-linux-gnu -target-feature +vsx -target-cpu pwr7 -fsyntax-only -verify=expected,nonaix -std=c++11 %s +// RUN: %clang_cc1 -triple=powerpc64le-unknown-linux-gnu -target-feature -vsx -target-cpu pwr7 -fsyntax-only -verify=expected,novsx -std=c++11 %s +// RUN: %clang_cc1 -triple=powerpc-ibm-aix -target-feature +altivec -fsyntax-only -verify=expected,aix -std=c++11 %s +// RUN: %clang_cc1 -triple=powerpc64-ibm-aix -target-feature +altivec -fsyntax-only -verify=expected,aix -std=c++11 %s #include <altivec.h> __vector char vv_c; Index: clang/lib/Sema/SemaOverload.cpp =================================================================== --- clang/lib/Sema/SemaOverload.cpp +++ clang/lib/Sema/SemaOverload.cpp @@ -1726,7 +1726,7 @@ /// conversion. static bool IsVectorConversion(Sema &S, QualType FromType, QualType ToType, ImplicitConversionKind &ICK, Expr *From, - bool InOverloadResolution) { + bool InOverloadResolution, bool CStyle) { // We need at least one of these types to be a vector type to have a vector // conversion. if (!ToType->isVectorType() && !FromType->isVectorType()) @@ -1771,7 +1771,7 @@ if (S.isLaxVectorConversion(FromType, ToType) && S.anyAltivecTypes(FromType, ToType) && !S.areSameVectorElemTypes(FromType, ToType) && - !InOverloadResolution) { + !InOverloadResolution && !CStyle) { S.Diag(From->getBeginLoc(), diag::warn_deprecated_lax_vec_conv_all) << FromType << ToType; } @@ -2024,7 +2024,7 @@ // Pointer to member conversions (4.11). SCS.Second = ICK_Pointer_Member; } else if (IsVectorConversion(S, FromType, ToType, SecondICK, From, - InOverloadResolution)) { + InOverloadResolution, CStyle)) { SCS.Second = SecondICK; FromType = ToType.getUnqualifiedType(); } else if (!S.getLangOpts().CPlusPlus &&
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits