diff options
author | Nikita Popov <npopov@redhat.com> | 2025-04-30 09:07:55 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-30 09:07:55 +0200 |
commit | c96f019fa3bc02bbc60343de606235c6e2cef4bd (patch) | |
tree | f860a4a155fed8cca943247b3643e0dddae716f9 /clang/unittests/Format/ConfigParseTest.cpp | |
parent | af497d9a658ebca437aff79cd9532cd93b7a58a0 (diff) | |
download | llvm-c96f019fa3bc02bbc60343de606235c6e2cef4bd.zip llvm-c96f019fa3bc02bbc60343de606235c6e2cef4bd.tar.gz llvm-c96f019fa3bc02bbc60343de606235c6e2cef4bd.tar.bz2 |
[BasicBlockUtils] Remove broken support for eh pads in SplitEdge() (#137816)
d81d9e8b8604c85709de0a22bb8dd672a28f0401 changed SplitEdge() to make use
of ehAwareSplitEdge() for critical edges where the target is an eh pad.
However, the implementation is incorrect at least for landing pads. What
is currently produced for the code in the modified unit test is
something like this:
continue:
invoke void @sink()
to label %normal unwind label %new_bb
new_bb:
%cp = cleanuppad within %exception []
cleanupret from %cp unwind label %exception
exception:
%cleanup = landingpad i8 cleanup
br label %trivial-eh-handler
This mixes different exception handling mechanisms in a nonsensical way,
and is not well-formed IR. To actually "split" the landingpad edge (for
a rather loose definition of "split"), I think we'd have to generate
something along these lines:
exception.split:
%cleanup.split = landingpad i8 cleanup
br label %exception.cont
exception:
%cleanup.orig = landingpad i8 cleanup
br label %exception.cont
exception.cont:
%cleanup = phi i8 [ %cleanup.split, %exception_split ], [ %cleanup.orig,
%exception ]
I didn't bother actually implementing that, seeing as how nobody noticed
the existing codegen being broken in the last four years, so clearly
nobody actually needs this function to work with EH edges. Just return
nullptr instead.
Diffstat (limited to 'clang/unittests/Format/ConfigParseTest.cpp')
0 files changed, 0 insertions, 0 deletions