aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorPhilip Reames <preames@rivosinc.com>2023-02-08 11:35:06 -0800
committerPhilip Reames <listmail@philipreames.com>2023-02-08 11:45:48 -0800
commitdb6bee5fec0d7fdfc18005c5c5ccd15f1ede945d (patch)
treebe45ab0b51e9e35433c81288abd8afdb3aa76325 /clang/lib/Frontend/CompilerInvocation.cpp
parent98e7670b64d8b5bbb12432945b476cc9634b6358 (diff)
downloadllvm-db6bee5fec0d7fdfc18005c5c5ccd15f1ede945d.zip
llvm-db6bee5fec0d7fdfc18005c5c5ccd15f1ede945d.tar.gz
llvm-db6bee5fec0d7fdfc18005c5c5ccd15f1ede945d.tar.bz2
[RISCV] Fix miscompile in SExtWRemoval due to early return ignoring other sources
This code is walking back through a worklist of sources. All of the sources need to be sign extending for the result to be true. We had a case which returned rather than continued, which causes a miscompile when another source was not sign extended. The flawed logic was introduced in Dec 22, by change 844430bcc377. This was recently exposed in a stage2 build of llvm-tablegen when we switched from using llvm::Optional to std::optional. The stars aligned in just the wrong way, and we started actively miscompiling idiomatic optional usage. std::optional<uint32_t> appears to use the top 32 bits of the word on RV64 for its tag. Differential Revision: https://reviews.llvm.org/D143594
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
0 files changed, 0 insertions, 0 deletions