https://issues.dlang.org/show_bug.cgi?id=10664
--- Comment #4 from Walter Bright <bugzi...@digitalmars.com> --- You're right, it's the handler table that is different. The handler table is all based on offsets from the start of the function, so that works. The only pointer in it is the pointer to the catch type (the `*__ClassZ` symbols), and hence the only actual difference in the handler table. The best fix I can think of for this is to embed in the catch blocks a reference to the catch type. Then functions that differ only in catch type won't be merged, and /OPT:NOICF will no longer be needed. --