aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/Utils.cpp
diff options
context:
space:
mode:
authorNikita Popov <npopov@redhat.com>2023-04-06 10:49:42 +0200
committerNikita Popov <npopov@redhat.com>2023-04-14 11:46:00 +0200
commit9fe78db4cd1c18fc36a2f2bcc849adf2941027ba (patch)
tree40e73997c039f768affae2dd43878217df46126e /llvm/lib/Transforms/Utils/Utils.cpp
parent677b0d33e383fa104530c03e38601219c2aa82f9 (diff)
downloadllvm-9fe78db4cd1c18fc36a2f2bcc849adf2941027ba.zip
llvm-9fe78db4cd1c18fc36a2f2bcc849adf2941027ba.tar.gz
llvm-9fe78db4cd1c18fc36a2f2bcc849adf2941027ba.tar.bz2
[FunctionAttrs] Fix nounwind inference for landingpads
Currently, FunctionAttrs treats landingpads as non-throwing, and will infer nounwind for functions with landingpads (assuming they can't unwind in some other way, e.g. via resum). There are two problems with this: * Non-cleanup landingpads with catch/filter clauses do not necessarily catch all exceptions. Unless there are catch ptr null or filter [0 x ptr] zeroinitializer clauses, we should assume that we may unwind past this landingpad. This seems like an outright bug. * Cleanup landingpads are skipped during phase one unwinding, so we effectively need to support unwinding past them. Marking these nounwind is technically correct, but not compatible with how unwinding works in reality. Fixes https://github.com/llvm/llvm-project/issues/61945. Differential Revision: https://reviews.llvm.org/D147694
Diffstat (limited to 'llvm/lib/Transforms/Utils/Utils.cpp')
0 files changed, 0 insertions, 0 deletions