diff options
author | Philip Reames <preames@rivosinc.com> | 2023-02-08 11:35:06 -0800 |
---|---|---|
committer | Philip Reames <listmail@philipreames.com> | 2023-02-08 11:45:48 -0800 |
commit | db6bee5fec0d7fdfc18005c5c5ccd15f1ede945d (patch) | |
tree | be45ab0b51e9e35433c81288abd8afdb3aa76325 /clang/lib/Frontend/CompilerInvocation.cpp | |
parent | 98e7670b64d8b5bbb12432945b476cc9634b6358 (diff) | |
download | llvm-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