[clang]Fix warning for signed conversion on LP64
authorYaxun (Sam) Liu <yaxun.liu@amd.com>
Tue, 14 Feb 2023 14:52:42 +0000 (09:52 -0500)
committerYaxun (Sam) Liu <yaxun.liu@amd.com>
Tue, 21 Feb 2023 17:43:42 +0000 (12:43 -0500)
commit8cda128c1eff8556505ff27117a68ad8cecaa228
treeff0b3f628d5993003eac5abd0adec857229c2c17
parent451799bb8261bde52bbfef226d019caf1d82aa42
[clang]Fix warning for signed conversion on LP64

Currently clang emits warning with -Wconversion for the following code
on LP64 system e.g. x86_64-unknown-linux-gnu:

long foo(long x) {
  return 1LL<<x;
}
warning: implicit conversion changes signedness: 'long long' to 'long' [-Wsign-conversion]

return 1ll << x;
~~~~~~ ~~~~^~~~
This does not make sense since all operands are signed.

This patch fixes that to match -m32 and GCC behaviour.

Reviewed by: Fangrui Song

Differential Revision: https://reviews.llvm.org/D144011
clang/lib/Sema/SemaChecking.cpp
clang/test/Sema/sign-conversion.c