diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2019-09-13 06:02:15 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2019-09-13 06:02:15 +0000 |
commit | c624510f134ceee9bdb5308b6f4892890c61938f (patch) | |
tree | 82dbe8f9867b26691120175840d36f36e431d2fa | |
parent | 804e0c507da4065326a88d4966115c55e0920dc8 (diff) | |
download | bcm5719-llvm-c624510f134ceee9bdb5308b6f4892890c61938f.tar.gz bcm5719-llvm-c624510f134ceee9bdb5308b6f4892890c61938f.zip |
For PR17164: split -fno-lax-vector-conversion into three different
levels:
-- none: no lax vector conversions [new GCC default]
-- integer: only conversions between integer vectors [old GCC default]
-- all: all conversions between same-size vectors [Clang default]
For now, Clang still defaults to "all" mode, but per my proposal on
cfe-dev (2019-04-10) the default will be changed to "integer" as soon as
that doesn't break lots of testcases. (Eventually I'd like to change the
default to "none" to match GCC and general sanity.)
Following GCC's behavior, the driver flag -flax-vector-conversions is
translated to -flax-vector-conversions=integer.
This reinstates r371805, reverted in r371813, with an additional fix for
lldb.
llvm-svn: 371817
32 files changed, 146 insertions, 64 deletions
diff --git a/clang/include/clang/Basic/LangOptions.def b/clang/include/clang/Basic/LangOptions.def index dec281e7935..6b497a05176 100644 --- a/clang/include/clang/Basic/LangOptions.def +++ b/clang/include/clang/Basic/LangOptions.def @@ -119,7 +119,8 @@ LANGOPT(AppleKext , 1, 0, "Apple kext support") BENIGN_LANGOPT(PascalStrings, 1, 0, "Pascal string support") LANGOPT(WritableStrings , 1, 0, "writable string support") LANGOPT(ConstStrings , 1, 0, "const-qualified string support") -LANGOPT(LaxVectorConversions , 1, 1, "lax vector conversions") +ENUM_LANGOPT(LaxVectorConversions, LaxVectorConversionKind, 2, + LaxVectorConversionKind::All, "lax vector conversions") LANGOPT(AltiVec , 1, 0, "AltiVec-style vector initializers") LANGOPT(ZVector , 1, 0, "System z vector extensions") LANGOPT(Exceptions , 1, 0, "exception handling") diff --git a/clang/include/clang/Basic/LangOptions.h b/clang/include/clang/Basic/LangOptions.h index e3b7737fa3c..5f808f04e9a 100644 --- a/clang/include/clang/Basic/LangOptions.h +++ b/clang/include/clang/Basic/LangOptions.h @@ -184,6 +184,16 @@ public: FEA_On }; + enum class LaxVectorConversionKind { + /// Permit no implicit vector bitcasts. + None, + /// Permit vector bitcasts between integer vectors with different numbers + /// of elements but the same total bit-width. + Integer, + /// Permit vector bitcasts between all vectors with the same total + /// bit-width. + All, + }; public: /// Set of enabled sanitizers. diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 57bab1e1c48..7423f92046a 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -1274,7 +1274,10 @@ def fno_fine_grained_bitfield_accesses : Flag<["-"], HelpText<"Use large-integer access for consecutive bitfield runs.">; def flat__namespace : Flag<["-"], "flat_namespace">; -def flax_vector_conversions : Flag<["-"], "flax-vector-conversions">, Group<f_Group>; +def flax_vector_conversions_EQ : Joined<["-"], "flax-vector-conversions=">, Group<f_Group>, + HelpText<"Enable implicit vector bit-casts">, Values<"none,integer,all">, Flags<[CC1Option]>; +def flax_vector_conversions : Flag<["-"], "flax-vector-conversions">, Group<f_Group>, + Alias<flax_vector_conversions_EQ>, AliasArgs<["integer"]>; def flimited_precision_EQ : Joined<["-"], "flimited-precision=">, Group<f_Group>; def fapple_link_rtlib : Flag<["-"], "fapple-link-rtlib">, Group<f_Group>, HelpText<"Force linking the clang builtins runtime library">; @@ -1448,7 +1451,7 @@ def fno_experimental_new_pass_manager : Flag<["-"], "fno-experimental-new-pass-m def fveclib : Joined<["-"], "fveclib=">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Use the given vector functions library">, Values<"Accelerate,MASSV,SVML,none">; def fno_lax_vector_conversions : Flag<["-"], "fno-lax-vector-conversions">, Group<f_Group>, - HelpText<"Disallow implicit conversions between vectors with a different number of elements or different element types">, Flags<[CC1Option]>; + Alias<flax_vector_conversions_EQ>, AliasArgs<["none"]>; def fno_merge_all_constants : Flag<["-"], "fno-merge-all-constants">, Group<f_Group>, HelpText<"Disallow merging of constants">; def fno_modules : Flag <["-"], "fno-modules">, Group<f_Group>, diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 6aff423bd18..c39c1c7e3cf 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4678,15 +4678,11 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, if (TC.SupportsProfiling()) Args.AddLastArg(CmdArgs, options::OPT_mfentry); - // -flax-vector-conversions is default. - if (!Args.hasFlag(options::OPT_flax_vector_conversions, - options::OPT_fno_lax_vector_conversions)) - CmdArgs.push_back("-fno-lax-vector-conversions"); - if (Args.getLastArg(options::OPT_fapple_kext) || (Args.hasArg(options::OPT_mkernel) && types::isCXX(InputType))) CmdArgs.push_back("-fapple-kext"); + Args.AddLastArg(CmdArgs, options::OPT_flax_vector_conversions_EQ); Args.AddLastArg(CmdArgs, options::OPT_fobjc_sender_dependent_dispatch); Args.AddLastArg(CmdArgs, options::OPT_fdiagnostics_print_source_range_info); Args.AddLastArg(CmdArgs, options::OPT_fdiagnostics_parseable_fixits); diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 3db0b8827ad..0e29e6d9d4d 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -2265,7 +2265,7 @@ void CompilerInvocation::setLangDefaults(LangOptions &Opts, InputKind IK, if (Opts.OpenCL) { Opts.AltiVec = 0; Opts.ZVector = 0; - Opts.LaxVectorConversions = 0; + Opts.setLaxVectorConversions(LangOptions::LaxVectorConversionKind::None); Opts.setDefaultFPContractMode(LangOptions::FPC_On); Opts.NativeHalfType = 1; Opts.NativeHalfArgsAndReturns = 1; @@ -2667,8 +2667,18 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK, Opts.WritableStrings = Args.hasArg(OPT_fwritable_strings); Opts.ConstStrings = Args.hasFlag(OPT_fconst_strings, OPT_fno_const_strings, Opts.ConstStrings); - if (Args.hasArg(OPT_fno_lax_vector_conversions)) - Opts.LaxVectorConversions = 0; + if (Arg *A = Args.getLastArg(OPT_flax_vector_conversions_EQ)) { + using LaxKind = LangOptions::LaxVectorConversionKind; + if (auto Kind = llvm::StringSwitch<Optional<LaxKind>>(A->getValue()) + .Case("none", LaxKind::None) + .Case("integer", LaxKind::Integer) + .Case("all", LaxKind::All) + .Default(llvm::None)) + Opts.setLaxVectorConversions(*Kind); + else + Diags.Report(diag::err_drv_invalid_value) + << A->getAsString(Args) << A->getValue(); + } if (Args.hasArg(OPT_fno_threadsafe_statics)) Opts.ThreadsafeStatics = 0; Opts.Exceptions = Args.hasArg(OPT_fexceptions); diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 849298433ac..84520052c61 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -6498,8 +6498,28 @@ bool Sema::areLaxCompatibleVectorTypes(QualType srcTy, QualType destTy) { bool Sema::isLaxVectorConversion(QualType srcTy, QualType destTy) { assert(destTy->isVectorType() || srcTy->isVectorType()); - if (!Context.getLangOpts().LaxVectorConversions) + switch (Context.getLangOpts().getLaxVectorConversions()) { + case LangOptions::LaxVectorConversionKind::None: return false; + + case LangOptions::LaxVectorConversionKind::Integer: + if (!srcTy->isIntegralOrEnumerationType()) { + auto *Vec = srcTy->getAs<VectorType>(); + if (!Vec || !Vec->getElementType()->isIntegralOrEnumerationType()) + return false; + } + if (!destTy->isIntegralOrEnumerationType()) { + auto *Vec = destTy->getAs<VectorType>(); + if (!Vec || !Vec->getElementType()->isIntegralOrEnumerationType()) + return false; + } + // OK, integer (vector) -> integer (vector) bitcast. + break; + + case LangOptions::LaxVectorConversionKind::All: + break; + } + return areLaxCompatibleVectorTypes(srcTy, destTy); } diff --git a/clang/test/CodeGen/builtins-ppc-altivec.c b/clang/test/CodeGen/builtins-ppc-altivec.c index 6aebbc29247..d53011b37d4 100644 --- a/clang/test/CodeGen/builtins-ppc-altivec.c +++ b/clang/test/CodeGen/builtins-ppc-altivec.c @@ -1,10 +1,10 @@ // REQUIRES: powerpc-registered-target // RUN: %clang_cc1 -target-feature +altivec -triple powerpc-unknown-unknown -emit-llvm %s \ -// RUN: -fno-lax-vector-conversions -o - | FileCheck %s +// RUN: -flax-vector-conversions=none -o - | FileCheck %s // RUN: %clang_cc1 -target-feature +altivec -triple powerpc64-unknown-unknown -emit-llvm %s \ -// RUN: -fno-lax-vector-conversions -o - | FileCheck %s +// RUN: -flax-vector-conversions=none -o - | FileCheck %s // RUN: %clang_cc1 -target-feature +altivec -triple powerpc64le-unknown-unknown -emit-llvm %s \ -// RUN: -fno-lax-vector-conversions -o - | FileCheck %s -check-prefix=CHECK-LE +// RUN: -flax-vector-conversions=none -o - | FileCheck %s -check-prefix=CHECK-LE // RUN: not %clang_cc1 -triple powerpc64le-unknown-unknown -emit-llvm %s \ // RUN: -ferror-limit 0 -DNO_ALTIVEC -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK-NOALTIVEC diff --git a/clang/test/CodeGen/builtins-systemz-vector.c b/clang/test/CodeGen/builtins-systemz-vector.c index 6d94cfae9a7..85cdc30aa54 100644 --- a/clang/test/CodeGen/builtins-systemz-vector.c +++ b/clang/test/CodeGen/builtins-systemz-vector.c @@ -1,5 +1,5 @@ // REQUIRES: systemz-registered-target -// RUN: %clang_cc1 -target-cpu z13 -triple s390x-ibm-linux -fno-lax-vector-conversions \ +// RUN: %clang_cc1 -target-cpu z13 -triple s390x-ibm-linux -flax-vector-conversions=none \ // RUN: -Wall -Wno-unused -Werror -emit-llvm %s -o - | FileCheck %s typedef __attribute__((vector_size(16))) signed char vec_schar; diff --git a/clang/test/CodeGen/builtins-systemz-vector2.c b/clang/test/CodeGen/builtins-systemz-vector2.c index 8f0b8aee8c2..a17cdf0a5ae 100644 --- a/clang/test/CodeGen/builtins-systemz-vector2.c +++ b/clang/test/CodeGen/builtins-systemz-vector2.c @@ -1,5 +1,5 @@ // REQUIRES: systemz-registered-target -// RUN: %clang_cc1 -target-cpu z14 -triple s390x-ibm-linux -fno-lax-vector-conversions \ +// RUN: %clang_cc1 -target-cpu z14 -triple s390x-ibm-linux -flax-vector-conversions=none \ // RUN: -Wall -Wno-unused -Werror -emit-llvm %s -o - | FileCheck %s typedef __attribute__((vector_size(16))) signed char vec_schar; diff --git a/clang/test/CodeGen/builtins-systemz-vector3.c b/clang/test/CodeGen/builtins-systemz-vector3.c index 976a3e2b7d6..e8194b642cd 100644 --- a/clang/test/CodeGen/builtins-systemz-vector3.c +++ b/clang/test/CodeGen/builtins-systemz-vector3.c @@ -1,5 +1,5 @@ // REQUIRES: systemz-registered-target -// RUN: %clang_cc1 -target-cpu arch13 -triple s390x-ibm-linux -fno-lax-vector-conversions \ +// RUN: %clang_cc1 -target-cpu arch13 -triple s390x-ibm-linux -flax-vector-conversions=none \ // RUN: -Wall -Wno-unused -Werror -emit-llvm %s -o - | FileCheck %s typedef __attribute__((vector_size(16))) signed char vec_schar; diff --git a/clang/test/CodeGen/builtins-systemz-zvector-error.c b/clang/test/CodeGen/builtins-systemz-zvector-error.c index cb60ea495ec..5fdcb406185 100644 --- a/clang/test/CodeGen/builtins-systemz-zvector-error.c +++ b/clang/test/CodeGen/builtins-systemz-zvector-error.c @@ -1,6 +1,6 @@ // REQUIRES: systemz-registered-target // RUN: %clang_cc1 -target-cpu z13 -triple s390x-linux-gnu \ -// RUN: -fzvector -fno-lax-vector-conversions \ +// RUN: -fzvector -flax-vector-conversions=none \ // RUN: -Wall -Wno-unused -Werror -fsyntax-only -verify %s #include <vecintrin.h> diff --git a/clang/test/CodeGen/builtins-systemz-zvector.c b/clang/test/CodeGen/builtins-systemz-zvector.c index f814547ee4b..37a6e4db376 100644 --- a/clang/test/CodeGen/builtins-systemz-zvector.c +++ b/clang/test/CodeGen/builtins-systemz-zvector.c @@ -1,9 +1,9 @@ // REQUIRES: systemz-registered-target // RUN: %clang_cc1 -target-cpu z13 -triple s390x-linux-gnu \ -// RUN: -O -fzvector -fno-lax-vector-conversions \ +// RUN: -O -fzvector -flax-vector-conversions=none \ // RUN: -Wall -Wno-unused -Werror -emit-llvm %s -o - | FileCheck %s // RUN: %clang_cc1 -target-cpu z13 -triple s390x-linux-gnu \ -// RUN: -O -fzvector -fno-lax-vector-conversions \ +// RUN: -O -fzvector -flax-vector-conversions=none \ // RUN: -Wall -Wno-unused -Werror -S %s -o - | FileCheck %s --check-prefix=CHECK-ASM #include <vecintrin.h> diff --git a/clang/test/CodeGen/builtins-systemz-zvector2-error.c b/clang/test/CodeGen/builtins-systemz-zvector2-error.c index 3b890b9d09a..64fcbc46ba0 100644 --- a/clang/test/CodeGen/builtins-systemz-zvector2-error.c +++ b/clang/test/CodeGen/builtins-systemz-zvector2-error.c @@ -1,6 +1,6 @@ // REQUIRES: systemz-registered-target // RUN: %clang_cc1 -target-cpu z14 -triple s390x-linux-gnu \ -// RUN: -fzvector -fno-lax-vector-conversions \ +// RUN: -fzvector -flax-vector-conversions=none \ // RUN: -Wall -Wno-unused -Werror -fsyntax-only -verify %s #include <vecintrin.h> diff --git a/clang/test/CodeGen/builtins-systemz-zvector2.c b/clang/test/CodeGen/builtins-systemz-zvector2.c index 990e4e58b52..02fa3253d96 100644 --- a/clang/test/CodeGen/builtins-systemz-zvector2.c +++ b/clang/test/CodeGen/builtins-systemz-zvector2.c @@ -1,9 +1,9 @@ // REQUIRES: systemz-registered-target // RUN: %clang_cc1 -target-cpu z14 -triple s390x-linux-gnu \ -// RUN: -O -fzvector -fno-lax-vector-conversions \ +// RUN: -O -fzvector -flax-vector-conversions=none \ // RUN: -Wall -Wno-unused -Werror -emit-llvm %s -o - | FileCheck %s // RUN: %clang_cc1 -target-cpu z14 -triple s390x-linux-gnu \ -// RUN: -O -fzvector -fno-lax-vector-conversions \ +// RUN: -O -fzvector -flax-vector-conversions=none \ // RUN: -Wall -Wno-unused -Werror -S %s -o - | FileCheck %s --check-prefix=CHECK-ASM #include <vecintrin.h> diff --git a/clang/test/CodeGen/builtins-systemz-zvector3-error.c b/clang/test/CodeGen/builtins-systemz-zvector3-error.c index 286cd3ce59d..657508b2618 100644 --- a/clang/test/CodeGen/builtins-systemz-zvector3-error.c +++ b/clang/test/CodeGen/builtins-systemz-zvector3-error.c @@ -1,6 +1,6 @@ // REQUIRES: systemz-registered-target // RUN: %clang_cc1 -target-cpu arch13 -triple s390x-linux-gnu \ -// RUN: -fzvector -fno-lax-vector-conversions \ +// RUN: -fzvector -flax-vector-conversions=none \ // RUN: -Wall -Wno-unused -Werror -fsyntax-only -verify %s #include <vecintrin.h> diff --git a/clang/test/CodeGen/builtins-systemz-zvector3.c b/clang/test/CodeGen/builtins-systemz-zvector3.c index 1367d87c58c..db30f419332 100644 --- a/clang/test/CodeGen/builtins-systemz-zvector3.c +++ b/clang/test/CodeGen/builtins-systemz-zvector3.c @@ -1,9 +1,9 @@ // REQUIRES: systemz-registered-target // RUN: %clang_cc1 -target-cpu arch13 -triple s390x-linux-gnu \ -// RUN: -O -fzvector -fno-lax-vector-conversions \ +// RUN: -O -fzvector -flax-vector-conversions=none \ // RUN: -Wall -Wno-unused -Werror -emit-llvm %s -o - | FileCheck %s // RUN: %clang_cc1 -target-cpu arch13 -triple s390x-linux-gnu \ -// RUN: -O -fzvector -fno-lax-vector-conversions \ +// RUN: -O -fzvector -flax-vector-conversions=none \ // RUN: -Wall -Wno-unused -Werror -S %s -o - | FileCheck %s --check-prefix=CHECK-ASM #include <vecintrin.h> diff --git a/clang/test/CodeGen/builtins-wasm.c b/clang/test/CodeGen/builtins-wasm.c index 43299bd26f9..ee08983d9a1 100644 --- a/clang/test/CodeGen/builtins-wasm.c +++ b/clang/test/CodeGen/builtins-wasm.c @@ -1,6 +1,6 @@ -// RUN: %clang_cc1 -triple wasm32-unknown-unknown -target-feature +unimplemented-simd128 -target-feature +nontrapping-fptoint -target-feature +exception-handling -target-feature +bulk-memory -fno-lax-vector-conversions -O3 -emit-llvm -o - %s | FileCheck %s -check-prefixes WEBASSEMBLY,WEBASSEMBLY32 -// RUN: %clang_cc1 -triple wasm64-unknown-unknown -target-feature +unimplemented-simd128 -target-feature +nontrapping-fptoint -target-feature +exception-handling -target-feature +bulk-memory -fno-lax-vector-conversions -O3 -emit-llvm -o - %s | FileCheck %s -check-prefixes WEBASSEMBLY,WEBASSEMBLY64 -// RUN: not %clang_cc1 -triple wasm64-unknown-unknown -target-feature +nontrapping-fptoint -target-feature +exception-handling -target-feature +bulk-memory -fno-lax-vector-conversions -O3 -emit-llvm -o - %s 2>&1 | FileCheck %s -check-prefixes MISSING-SIMD +// RUN: %clang_cc1 -triple wasm32-unknown-unknown -target-feature +unimplemented-simd128 -target-feature +nontrapping-fptoint -target-feature +exception-handling -target-feature +bulk-memory -flax-vector-conversions=none -O3 -emit-llvm -o - %s | FileCheck %s -check-prefixes WEBASSEMBLY,WEBASSEMBLY32 +// RUN: %clang_cc1 -triple wasm64-unknown-unknown -target-feature +unimplemented-simd128 -target-feature +nontrapping-fptoint -target-feature +exception-handling -target-feature +bulk-memory -flax-vector-conversions=none -O3 -emit-llvm -o - %s | FileCheck %s -check-prefixes WEBASSEMBLY,WEBASSEMBLY64 +// RUN: not %clang_cc1 -triple wasm64-unknown-unknown -target-feature +nontrapping-fptoint -target-feature +exception-handling -target-feature +bulk-memory -flax-vector-conversions=none -O3 -emit-llvm -o - %s 2>&1 | FileCheck %s -check-prefixes MISSING-SIMD // SIMD convenience types typedef char i8x16 __attribute((vector_size(16))); diff --git a/clang/test/CodeGenCXX/builtins-systemz-zvector.cpp b/clang/test/CodeGenCXX/builtins-systemz-zvector.cpp index aedb30ffbb4..f6ce7114ed2 100644 --- a/clang/test/CodeGenCXX/builtins-systemz-zvector.cpp +++ b/clang/test/CodeGenCXX/builtins-systemz-zvector.cpp @@ -1,6 +1,6 @@ // REQUIRES: systemz-registered-target // RUN: %clang_cc1 -target-cpu z13 -triple s390x-linux-gnu \ -// RUN: -fzvector -fno-lax-vector-conversions -std=c++11 \ +// RUN: -fzvector -flax-vector-conversions=none -std=c++11 \ // RUN: -Wall -Wno-unused -Werror -emit-llvm %s -o - | FileCheck %s bool gb; diff --git a/clang/test/Headers/altivec-header.c b/clang/test/Headers/altivec-header.c index 733ab5002a9..00e5f444de7 100644 --- a/clang/test/Headers/altivec-header.c +++ b/clang/test/Headers/altivec-header.c @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -triple powerpc64-unknown-unknown -target-feature +altivec -ffreestanding -emit-llvm -o - %s | FileCheck %s -// RUN: %clang_cc1 -triple powerpc64-unknown-unknown -target-feature +altivec -ffreestanding -emit-llvm -fno-lax-vector-conversions -o - %s | FileCheck %s +// RUN: %clang_cc1 -triple powerpc64-unknown-unknown -target-feature +altivec -ffreestanding -emit-llvm -flax-vector-conversions=none -o - %s | FileCheck %s // RUN: %clang_cc1 -triple powerpc64-unknown-unknown -target-feature +altivec -ffreestanding -emit-llvm -x c++ -o - %s | FileCheck %s #include <altivec.h> diff --git a/clang/test/Headers/arm-neon-header.c b/clang/test/Headers/arm-neon-header.c index 06b99a4560a..1da5ed052c3 100644 --- a/clang/test/Headers/arm-neon-header.c +++ b/clang/test/Headers/arm-neon-header.c @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -triple thumbv7-apple-darwin10 -target-cpu cortex-a8 -fsyntax-only -Wvector-conversions -ffreestanding %s -// RUN: %clang_cc1 -triple thumbv7-apple-darwin10 -target-cpu cortex-a8 -fsyntax-only -fno-lax-vector-conversions -ffreestanding %s +// RUN: %clang_cc1 -triple thumbv7-apple-darwin10 -target-cpu cortex-a8 -fsyntax-only -flax-vector-conversions=none -ffreestanding %s // RUN: %clang_cc1 -x c++ -triple thumbv7-apple-darwin10 -target-cpu cortex-a8 -fsyntax-only -Wvector-conversions -ffreestanding %s // RUN: %clang -fsyntax-only -ffreestanding --target=aarch64-none-eabi -march=armv8.2-a+fp16 -std=c89 -xc %s diff --git a/clang/test/Headers/x86-intrinsics-headers-clean.cpp b/clang/test/Headers/x86-intrinsics-headers-clean.cpp index 0a0679064c6..dc4cd9a194d 100644 --- a/clang/test/Headers/x86-intrinsics-headers-clean.cpp +++ b/clang/test/Headers/x86-intrinsics-headers-clean.cpp @@ -1,7 +1,7 @@ // Make sure the intrinsic headers compile cleanly with no warnings or errors. // RUN: %clang_cc1 -ffreestanding -triple x86_64-unknown-unknown -Wsystem-headers \ -// RUN: -fsyntax-only -fno-lax-vector-conversions -x c++ -verify %s +// RUN: -fsyntax-only -flax-vector-conversions=none -x c++ -verify %s // expected-no-diagnostics diff --git a/clang/test/Headers/x86-intrinsics-headers.c b/clang/test/Headers/x86-intrinsics-headers.c index 91c4ffaa0ed..59ca354e116 100644 --- a/clang/test/Headers/x86-intrinsics-headers.c +++ b/clang/test/Headers/x86-intrinsics-headers.c @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -fsyntax-only -ffreestanding %s -// RUN: %clang_cc1 -fsyntax-only -ffreestanding -fno-lax-vector-conversions %s +// RUN: %clang_cc1 -fsyntax-only -ffreestanding -flax-vector-conversions=none %s // RUN: %clang_cc1 -fsyntax-only -ffreestanding -x c++ %s #if defined(i386) || defined(__x86_64__) diff --git a/clang/test/Headers/x86intrin-2.c b/clang/test/Headers/x86intrin-2.c index e6fd7c80446..404b30c6035 100644 --- a/clang/test/Headers/x86intrin-2.c +++ b/clang/test/Headers/x86intrin-2.c @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -fsyntax-only -ffreestanding %s -verify -// RUN: %clang_cc1 -fsyntax-only -ffreestanding -fno-lax-vector-conversions %s -verify +// RUN: %clang_cc1 -fsyntax-only -ffreestanding -flax-vector-conversions=none %s -verify // RUN: %clang_cc1 -fsyntax-only -ffreestanding -x c++ %s -verify // expected-no-diagnostics diff --git a/clang/test/Headers/x86intrin.c b/clang/test/Headers/x86intrin.c index 7c15c4816b3..53e369559f4 100644 --- a/clang/test/Headers/x86intrin.c +++ b/clang/test/Headers/x86intrin.c @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -fsyntax-only -ffreestanding %s -verify -// RUN: %clang_cc1 -fsyntax-only -ffreestanding -fno-lax-vector-conversions %s -verify +// RUN: %clang_cc1 -fsyntax-only -ffreestanding -flax-vector-conversions=none %s -verify // RUN: %clang_cc1 -fsyntax-only -ffreestanding -x c++ %s -verify // expected-no-diagnostics diff --git a/clang/test/Sema/ext_vector_casts.c b/clang/test/Sema/ext_vector_casts.c index b13f8368348..5c13acab0f5 100644 --- a/clang/test/Sema/ext_vector_casts.c +++ b/clang/test/Sema/ext_vector_casts.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -fsyntax-only -verify -fno-lax-vector-conversions -Wconversion %s +// RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -fsyntax-only -verify -flax-vector-conversions=none -Wconversion %s typedef __attribute__((ext_vector_type(8))) _Bool BoolVector; // expected-error {{invalid vector element type '_Bool'}} diff --git a/clang/test/Sema/typedef-retain.c b/clang/test/Sema/typedef-retain.c index 3d784ce60a7..70e2abc1da5 100644 --- a/clang/test/Sema/typedef-retain.c +++ b/clang/test/Sema/typedef-retain.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fsyntax-only -verify %s -fno-lax-vector-conversions +// RUN: %clang_cc1 -fsyntax-only -verify %s -flax-vector-conversions=none typedef float float4 __attribute__((vector_size(16))); typedef int int4 __attribute__((vector_size(16))); diff --git a/clang/test/Sema/zvector.c b/clang/test/Sema/zvector.c index 858e10d661f..798b12bd50b 100644 --- a/clang/test/Sema/zvector.c +++ b/clang/test/Sema/zvector.c @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -triple s390x-linux-gnu -fzvector \ -// RUN: -fno-lax-vector-conversions -W -Wall -Wconversion \ +// RUN: -flax-vector-conversions=none -W -Wall -Wconversion \ // RUN: -Werror -fsyntax-only -verify %s vector signed char sc, sc2; diff --git a/clang/test/Sema/zvector2.c b/clang/test/Sema/zvector2.c index 08ec9dfc661..a4e0a9e2c3f 100644 --- a/clang/test/Sema/zvector2.c +++ b/clang/test/Sema/zvector2.c @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -triple s390x-linux-gnu -fzvector -target-cpu z14 \ -// RUN: -fno-lax-vector-conversions -W -Wall -Wconversion \ +// RUN: -flax-vector-conversions=none -W -Wall -Wconversion \ // RUN: -Werror -fsyntax-only -verify %s vector signed char sc, sc2; diff --git a/clang/test/SemaCXX/altivec.cpp b/clang/test/SemaCXX/altivec.cpp index 92f02838adf..2ba3400ca12 100644 --- a/clang/test/SemaCXX/altivec.cpp +++ b/clang/test/SemaCXX/altivec.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -target-feature +altivec -fno-lax-vector-conversions -triple powerpc-unknown-unknown -fcxx-exceptions -verify %s +// RUN: %clang_cc1 -target-feature +altivec -flax-vector-conversions=none -triple powerpc-unknown-unknown -fcxx-exceptions -verify %s typedef int V4i __attribute__((vector_size(16))); diff --git a/clang/test/SemaCXX/vector-no-lax.cpp b/clang/test/SemaCXX/vector-no-lax.cpp index 3cedcb1e8ce..a6e39a8374f 100644 --- a/clang/test/SemaCXX/vector-no-lax.cpp +++ b/clang/test/SemaCXX/vector-no-lax.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -fno-lax-vector-conversions -verify %s +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -flax-vector-conversions=none -verify %s typedef unsigned int __attribute__((vector_size (16))) vUInt32; typedef int __attribute__((vector_size (16))) vSInt32; diff --git a/clang/test/SemaCXX/vector.cpp b/clang/test/SemaCXX/vector.cpp index 295e1e17323..67e5a94cb10 100644 --- a/clang/test/SemaCXX/vector.cpp +++ b/clang/test/SemaCXX/vector.cpp @@ -1,6 +1,8 @@ -// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -verify %s -// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -verify -std=c++98 %s -// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -verify -std=c++11 %s +// RUN: %clang_cc1 -flax-vector-conversions=all -triple x86_64-apple-darwin10 -fsyntax-only -verify %s +// RUN: %clang_cc1 -flax-vector-conversions=all -triple x86_64-apple-darwin10 -fsyntax-only -verify -std=c++98 %s +// RUN: %clang_cc1 -flax-vector-conversions=all -triple x86_64-apple-darwin10 -fsyntax-only -verify -std=c++11 %s +// RUN: %clang_cc1 -flax-vector-conversions=integer -triple x86_64-apple-darwin10 -fsyntax-only -verify %s -DNO_LAX_FLOAT +// RUN: %clang_cc1 -flax-vector-conversions=none -triple x86_64-apple-darwin10 -fsyntax-only -verify %s -DNO_LAX_FLOAT -DNO_LAX_INT typedef char char16 __attribute__ ((__vector_size__ (16))); typedef long long longlong16 __attribute__ ((__vector_size__ (16))); @@ -8,13 +10,19 @@ typedef char char16_e __attribute__ ((__ext_vector_type__ (16))); typedef long long longlong16_e __attribute__ ((__ext_vector_type__ (2))); // Test overloading and function calls with vector types. -void f0(char16); +void f0(char16); // expected-note 0+{{candidate}} void f0_test(char16 c16, longlong16 ll16, char16_e c16e, longlong16_e ll16e) { f0(c16); f0(ll16); +#ifdef NO_LAX_INT + // expected-error@-2 {{no matching function}} +#endif f0(c16e); f0(ll16e); +#ifdef NO_LAX_INT + // expected-error@-2 {{no matching function}} +#endif } int &f1(char16); @@ -27,12 +35,14 @@ void f1_test(char16 c16, longlong16 ll16, char16_e c16e, longlong16_e ll16e) { float &fr2 = f1(ll16e); } -void f2(char16_e); // expected-note{{no known conversion from 'longlong16_e' (vector of 2 'long long' values) to 'char16_e' (vector of 16 'char' values) for 1st argument}} \ - // expected-note{{candidate function not viable: no known conversion from 'convertible_to<longlong16_e>' to 'char16_e' (vector of 16 'char' values) for 1st argument}} +void f2(char16_e); // expected-note 0+{{candidate}} void f2_test(char16 c16, longlong16 ll16, char16_e c16e, longlong16_e ll16e) { f2(c16); f2(ll16); +#ifdef NO_LAX_INT + // expected-error@-2 {{no matching function}} +#endif f2(c16e); f2(ll16e); // expected-error{{no matching function}} f2('a'); @@ -58,6 +68,11 @@ void conditional(bool Cond, char16 c16, longlong16 ll16, char16_e c16e, (void)(Cond? c16 : ll16); (void)(Cond? ll16e : c16e); (void)(Cond? ll16e : c16); +#ifdef NO_LAX_INT + // expected-error@-4 {{cannot convert}} + // expected-error@-4 {{cannot convert}} + // expected-error@-4 {{cannot convert}} +#endif } // Test C++ cast'ing of vector types. @@ -85,9 +100,16 @@ void casts(longlong16 ll16, longlong16_e ll16e) { // static_cast (void)static_cast<char16>(ll16); (void)static_cast<char16_e>(ll16); +#ifdef NO_LAX_INT + // expected-error@-3 {{not allowed}} + // expected-error@-3 {{not allowed}} +#endif (void)static_cast<longlong16>(ll16); (void)static_cast<longlong16_e>(ll16); (void)static_cast<char16>(ll16e); +#ifdef NO_LAX_INT + // expected-error@-2 {{not allowed}} +#endif (void)static_cast<char16_e>(ll16e); // expected-error{{static_cast from 'longlong16_e' (vector of 2 'long long' values) to 'char16_e' (vector of 16 'char' values) is not allowed}} (void)static_cast<longlong16>(ll16e); (void)static_cast<longlong16_e>(ll16e); @@ -121,10 +143,19 @@ void test_implicit_conversions(bool Cond, char16 c16, longlong16 ll16, convertible_to<char16_e&> rto_c16e) { f0(to_c16); f0(to_ll16); +#ifdef NO_LAX_INT + // expected-error@-2 {{no matching function}} +#endif f0(to_c16e); f0(to_ll16e); +#ifdef NO_LAX_INT + // expected-error@-2 {{no matching function}} +#endif f2(to_c16); f2(to_ll16); +#ifdef NO_LAX_INT + // expected-error@-2 {{no matching function}} +#endif f2(to_c16e); f2(to_ll16e); // expected-error{{no matching function}} @@ -193,6 +224,10 @@ void test_implicit_conversions(bool Cond, char16 c16, longlong16 ll16, // These 2 are convertible with -flax-vector-conversions (default) (void)(Cond? to_c16 : to_ll16); (void)(Cond? to_c16e : to_ll16e); +#ifdef NO_LAX_INT + // expected-error@-3 {{cannot convert}} + // expected-error@-3 {{cannot convert}} +#endif } typedef float fltx2 __attribute__((__vector_size__(8))); @@ -203,6 +238,10 @@ typedef double dblx4 __attribute__((__vector_size__(32))); void accept_fltx2(fltx2); // expected-note{{candidate function not viable: no known conversion from 'double' to 'fltx2' (vector of 2 'float' values) for 1st argument}} void accept_fltx4(fltx4); void accept_dblx2(dblx2); +#ifdef NO_LAX_FLOAT +// expected-note@-3 {{no known conversion}} +// expected-note@-3 {{no known conversion}} +#endif void accept_dblx4(dblx4); void accept_bool(bool); // expected-note{{candidate function not viable: no known conversion from 'fltx2' (vector of 2 'float' values) to 'bool' for 1st argument}} @@ -214,9 +253,12 @@ void test(fltx2 fltx2_val, fltx4 fltx4_val, dblx2 dblx2_val, dblx4 dblx4_val) { accept_dblx4(dblx4_val); // Same-size conversions - // FIXME: G++ rejects these conversions, we accept them. Revisit this! accept_fltx4(dblx2_val); accept_dblx2(fltx4_val); +#ifdef NO_LAX_FLOAT + // expected-error@-3 {{no matching function}} + // expected-error@-3 {{no matching function}} +#endif // Conversion to bool. accept_bool(fltx2_val); // expected-error{{no matching function for call to 'accept_bool'}} @@ -227,9 +269,9 @@ void test(fltx2 fltx2_val, fltx4 fltx4_val, dblx2 dblx2_val, dblx4 dblx4_val) { typedef int intx4 __attribute__((__vector_size__(16))); typedef int inte4 __attribute__((__ext_vector_type__(4))); -typedef int flte4 __attribute__((__ext_vector_type__(4))); +typedef float flte4 __attribute__((__ext_vector_type__(4))); -void test_mixed_vector_types(fltx4 f, intx4 n, flte4 g, flte4 m) { +void test_mixed_vector_types(fltx4 f, intx4 n, flte4 g, inte4 m) { (void)(f == g); (void)(g != f); (void)(f <= g); @@ -295,40 +337,40 @@ typedef bool bad __attribute__((__vector_size__(16))); // expected-error {{inva namespace Templates { template <typename Elt, unsigned Size> struct TemplateVectorType { - typedef Elt __attribute__((__vector_size__(Size))) type; + typedef Elt __attribute__((__vector_size__(Size))) type; // #1 }; template <int N, typename T> struct PR15730 { typedef T __attribute__((vector_size(N * sizeof(T)))) type; - typedef T __attribute__((vector_size(8192))) type2; - typedef T __attribute__((vector_size(3))) type3; + typedef T __attribute__((vector_size(8192))) type2; // #2 + typedef T __attribute__((vector_size(3))) type3; // #3 }; void Init() { const TemplateVectorType<float, 32>::type Works = {}; const TemplateVectorType<int, 32>::type Works2 = {}; - // expected-error@298 {{invalid vector element type 'bool'}} + // expected-error@#1 {{invalid vector element type 'bool'}} // expected-note@+1 {{in instantiation of template class 'Templates::TemplateVectorType<bool, 32>' requested here}} const TemplateVectorType<bool, 32>::type NoBool; - // expected-error@298 {{invalid vector element type 'int __attribute__((ext_vector_type(4)))' (vector of 4 'int' values)}} + // expected-error@#1 {{invalid vector element type 'int __attribute__((ext_vector_type(4)))' (vector of 4 'int' values)}} // expected-note@+1 {{in instantiation of template class 'Templates::TemplateVectorType<int __attribute__((ext_vector_type(4))), 32>' requested here}} const TemplateVectorType<vi4, 32>::type NoComplex; - // expected-error@298 {{vector size not an integral multiple of component size}} + // expected-error@#1 {{vector size not an integral multiple of component size}} // expected-note@+1 {{in instantiation of template class 'Templates::TemplateVectorType<int, 33>' requested here}} const TemplateVectorType<int, 33>::type BadSize; - // expected-error@298 {{vector size too large}} + // expected-error@#1 {{vector size too large}} // expected-note@+1 {{in instantiation of template class 'Templates::TemplateVectorType<int, 8192>' requested here}} const TemplateVectorType<int, 8192>::type TooLarge; - // expected-error@298 {{zero vector size}} + // expected-error@#1 {{zero vector size}} // expected-note@+1 {{in instantiation of template class 'Templates::TemplateVectorType<int, 0>' requested here}} const TemplateVectorType<int, 0>::type Zero; - // expected-error@304 {{vector size too large}} - // expected-error@305 {{vector size not an integral multiple of component size}} + // expected-error@#2 {{vector size too large}} + // expected-error@#3 {{vector size not an integral multiple of component size}} // expected-note@+1 {{in instantiation of template class 'Templates::PR15730<8, int>' requested here}} const PR15730<8, int>::type PR15730_1 = {}; - // expected-error@304 {{vector size too large}} + // expected-error@#2 {{vector size too large}} // expected-note@+1 {{in instantiation of template class 'Templates::PR15730<8, char>' requested here}} const PR15730<8, char>::type2 PR15730_2 = {}; } diff --git a/lldb/source/Symbol/ClangASTContext.cpp b/lldb/source/Symbol/ClangASTContext.cpp index 52f7cf42cfb..7a2f81a0724 100644 --- a/lldb/source/Symbol/ClangASTContext.cpp +++ b/lldb/source/Symbol/ClangASTContext.cpp @@ -494,7 +494,7 @@ static void ParseLangArgs(LangOptions &Opts, InputKind IK, const char *triple) { Opts.OpenCL = 1; Opts.AltiVec = 1; Opts.CXXOperatorNames = 1; - Opts.LaxVectorConversions = 1; + Opts.setLaxVectorConversions(LangOptions::LaxVectorConversionKind::All); } // OpenCL and C++ both have bool, true, false keywords. |