[PATCH] D77936: [Windows SEH] Fix abnormal-exits in _try
Ten Tzen via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sun Apr 12 14:25:15 PDT 2020
tentzen added a comment.
In D77936#1976938 <https://reviews.llvm.org/D77936#1976938>, @efriedma wrote:
> Instead of asserting there are less than 256 cleanup destinations, can you emit an icmp against zero, or something like that?
I did consider that. but it splits the block and induces one compare and one branch in _try exit sequence for something that will not happen in RWC. And it's hard for Optimizer to deal with it. Optimizer can probably can tail-duplicate each path at the expense of code size which I don't think LLVM would do today. Do you really think it's worth to split the block here? thanks
================
Comment at: clang/lib/CodeGen/CGException.cpp:1651
+ llvm::Value* Load = CGF.Builder.CreateLoad(Addr, "cleanup.dest");
+ IsForEH = CGF.Builder.CreateTrunc(Load, CGM.Int8Ty);
+ }
----------------
efriedma wrote:
> Is just truncating the value really correct? What's the possible range of values stored in getNormalCleanupDestSlot()?
Good question!
Usually the number in NormalCleanupDestSlot is single digit (or at most double-digit) , the totoal number of Jump Destinations (return/goto/break/continue/..) in the function.
I thought about widening 1st arg from CHAR to unsigned, but dropped the idea as it seems unnecessary. Yes, someone can write a code to make more than 255 Jumps in a function, but it’s unlikely to happen in real world code. What do you think?
I can go either way..
For sure, we can add an assert to catch it.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D77936/new/
https://reviews.llvm.org/D77936
More information about the cfe-commits
mailing list