[PATCH] D136532: [clang][Interp] Implement left and right shifts
Shafik Yaghmour via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 24 17:58:16 PDT 2022
shafik added inline comments.
================
Comment at: clang/test/AST/Interp/shifts.cpp:70
+ i = 1 << (WORD_BIT - 1); // cxx17-warning-not {{sets the sign bit of the shift expression}}
+ i = -1 << (WORD_BIT - 1); // cxx17-warning {{shifting a negative signed value is undefined}} \
+ // ref-cxx17-warning {{shifting a negative signed value is undefined}}
----------------
shafik wrote:
> A negative left operand was made well-formed in C++20 I believe see godbolt: https://godbolt.org/z/7qzKjojMb
>
> My reference from above for `expr.shift/p1` also applies.
>
> Although a negative right operand is still UB.
>
> Also note shifting into the sign bit was made well-formed in C++11: https://stackoverflow.com/questions/19593938/is-left-shifting-a-negative-integer-undefined-behavior-in-c11#comment29091986_19593938
Typo, shifting into the sign bit was made well-formed after C++11
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D136532/new/
https://reviews.llvm.org/D136532
More information about the cfe-commits
mailing list