[cfe-dev] [RFC] Disabling part of -flax-vector-conversions by default (PR17164)

Richard Smith via cfe-dev cfe-dev at lists.llvm.org
Wed Apr 10 14:32:47 PDT 2019


Hi all,

As noted in PR17164, -flax-vector-conversions is enabled by default in
Clang. This permits a bunch of unsafe and deeply surprising implicit
conversions in two categories:

Category 1:
  a vector of integer type can be implicitly converted to a vector of
different integer type (with a potentially different number of
elements) so long as the bit width is equal; this is performed as a
bit-cast (eg, vector of 4 ints implicitly converts to a vector of 16
chars)

Category 2:
  a vector of floating-point type can be implicitly converted to/from
a vector of integer or different floating point type (with a
potentially different number of elements) so long as the bit width is
equal; this too is performed as a bit-cast (eg, vector of 4 floats
implicitly converts to vector of 4 ints, and the conversion is a
bit-cast)

PR17164 notes that all compilers other than Clang permit category 1
but not category 2, particularly when using the Intel __m128 (etc)
typedefs.

Proposal: add new flags:

-flax-vector-conversions=none: disable category 1 and category 2 (same
as old -fno-lax-vector-conversions)
-flax-vector-conversions=integer: disable category 2 only (NEW)
-flax-vector-conversions=all: enable both categories (same as old
-flax-vector-conversions)

... and make -flax-vector-conversions=integer the default.

Any comments or objections?



More information about the cfe-dev mailing list