vbyakovlcl added inline comments.
================ Comment at: llvm/tools/clang/lib/Sema/SemaExpr.cpp:8787 } + if (!S.LangOpts.OpenCL && !S.LangOpts.ZVector) { + const BuiltinType *LHSBT = LHSEleType->getAs<clang::BuiltinType>(); ---------------- bruno wrote: > vbyakovlcl wrote: > > bruno wrote: > > > vbyakovlcl wrote: > > > > bruno wrote: > > > > > Besides `__ext_vector_type__`, would this also trigger for > > > > > `vector_size`? Right now this is an error for `vector_size` primarily > > > > > because the number of elements is different, can you confirm this > > > > > won't change? > > > > I compare vector element sizes, so there must not be any differencies > > > > caused by different triggers. I added additional type definitions to > > > > the tests. All compiles fain. > > > > > > I don't think this is right. When I try to compile similar code for > > > `vector_size` without your patch, I get the errors: > > > > > > /tmp/x.c:80:15: error: vector operands do not have the same number of > > > elements ('vector_int8n' (vector of 2 'int' values) and 'vector_uchar8n' > > > (vector of 8 'unsigned char' values)) > > > vi8n = vi8n << vuc8n; // expected-warning {{vector operands do not have > > > the same elements sizes}} > > > ~~~~ ^ ~~~~~ > > > /tmp/x.c:81:17: error: vector operands do not have the same number of > > > elements ('vector_uchar8n' (vector of 8 'unsigned char' values) and > > > 'vector_int8n' (vector of 2 'int' values)) > > > vuc8n = vuc8n << vi8n; // expected-warning {{vector operands do not > > > have the same elements sizes}} > > > ~~~~~ ^ ~~~~ > > > /tmp/x.c:82:17: error: vector operands do not have the same number of > > > elements ('vector_ushort8n' (vector of 4 'unsigned short' values) and > > > 'vector_uint8n' (vector of 2 'unsigned int' values)) > > > vus8n = vus8n << vui8n; // expected-warning {{vector operands do not > > > have the same elements sizes}} > > > ~~~~~ ^ ~~~~~ > > > /tmp/x.c:83:17: error: vector operands do not have the same number of > > > elements ('vector_uint8n' (vector of 2 'unsigned int' values) and > > > 'vector_short8n' (vector of 4 'short' values)) > > > vui8n = vui8n << vs8n; // expected-warning {{vector operands do not > > > have the same elements sizes}} > > > ~~~~~ ^ ~~~~ > > > > > > Given your test changes, it seems that now, instead of "vector operands > > > do not have the same number of elements" we would get "vector operands do > > > not have the same elements sizes". I rather we stay with the first. > > > Additionally, even if we had "vector operands do not have the same > > > elements sizes" for `vector_size`, this should never be demoted to a > > > warning. > > Argument of a GNU vector size attribute specifies vector size measured in > > bytes(see https://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html). So > > you got right diagnostics. Both compilers with and without my changes print > > the same diagnostics for yours case. Here is a small testcase used both > > GNU and clang extensions > > > > $ cat bruno.c > > > > > > typedef __attribute__((__ext_vector_type__(8))) int vector_int8; > > typedef __attribute__((__ext_vector_type__(8))) unsigned char vector_uchar8; > > > > typedef __attribute__((vector_size(8))) int vector_int8n; > > typedef __attribute__((vector_size(8))) unsigned char vector_uchar8n; > > > > vector_int8 vi8; > > vector_uchar8 vuc8; > > vector_int8n vi8n; > > vector_uchar8n vuc8n; > > > > int foo() { > > vi8 = vi8 << vuc8; > > vi8n = vi8n << vuc8n; > > > > $ clang -c bruno.c -Wno-error-vec-elem-size > > > > > > bruno.c:13:13: warning: vector operands do not have the same elements sizes > > ('vector_int8' (vector of 8 'int' values) and 'vector_uchar8' (vector of 8 > > 'unsigned char' values)) [-Wvec-elem-size] > > vi8 = vi8 << vuc8; > > ~~~ ^ ~~~~ > > bruno.c:14:15: error: vector operands do not have the same number of > > elements ('vector_int8n' (vector of 2 'int' values) and 'vector_uchar8n' > > (vector of 8 'unsigned char' values)) > > vi8n = vi8n << vuc8n; > > > > The compiler without the changes prints the second error only > > (bruno.c:14:15). > What actually concerns me here is the following: if you invoke `clang -c > bruno.c -Wvec-elem-size`, will that override the `error: vector operands do > not have the same number of elements ` message for `vector_size` typed > vectors? If so, I don't think this is right. No, this will not override the error because these diagnostics use independent conditions. The option vec-elem-size is used only for controlling kind of message 'vector_element_sizes_not_equal' - warning or error. Using this flag cannot influence on the massage you worry. $ clang bruno.c -c -Wvec-elem-size bruno.c:13:13: error: vector operands do not have the same elements sizes ('vector_int8' (vector of 8 'int' values) and 'vector_uchar8' (vector of 8 'unsigned char' values)) [-Wvec-elem-size] vi8 = vi8 << vuc8; ~~~ ^ ~~~~ bruno.c:14:15: error: vector operands do not have the same number of elements ('vector_int8n' (vector of 2 'int' values) and 'vector_uchar8n' (vector of 8 'unsigned char' values)) vi8n = vi8n << vuc8n; ~~~~ ^ ~~~~~ 2 errors generated. $ clang bruno.c -c -Wno-vec-elem-size bruno.c:14:15: error: vector operands do not have the same number of elements ('vector_int8n' (vector of 2 'int' values) and 'vector_uchar8n' (vector of 8 'unsigned char' values)) vi8n = vi8n << vuc8n; ~~~~ ^ ~~~~~ 1 error generated. $ clang bruno.c -c -Wno-error-vec-elem-size bruno.c:13:13: warning: vector operands do not have the same elements sizes ('vector_int8' (vector of 8 'int' values) and 'vector_uchar8' (vector of 8 'unsigned char' values)) [-Wvec-elem-size] vi8 = vi8 << vuc8; ~~~ ^ ~~~~ bruno.c:14:15: error: vector operands do not have the same number of elements ('vector_int8n' (vector of 2 'int' values) and 'vector_uchar8n' (vector of 8 'unsigned char' values)) vi8n = vi8n << vuc8n; ~~~~ ^ ~~~~~ 1 warning and 1 error generated. https://reviews.llvm.org/D24669 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits