namazso wrote:
> For an SEH exception that occurs within a function due to a CALL (such as a
> bogus indirect call), the IP should point to the beginning of the CALL
> instruction, so the IP2State tables should point to the correct region.
Yes, I was just pointing out that same-frame catch isn't supposed to be
supported in LLVM per the docs. By that rule, this code:
```
void test1(void(*a)()) {
__try {
a();
} __except(1) {
printf("throw in call!\n");
}
}
void test2(void(*a)()) {
__try {
test1(a);
} __except (1) {
printf("throw from call!\n");
}
}
void int3() {
__debugbreak();
}
int main() {
test2(&int3);
test2((void(*)())0x8FFFFFFFFFFFFFFF);
return 0;
}
```
Should result in this:
```
throw in call!
throw from call!
```
Which indeed would probably work like that if the start labels were also offset
by 1 all the time. Of course it's way different from MSVC, but it sounded at
least *consistent* even if slightly insane. However when I tested it on the
current LLVM release, it was not consistent at all already, so that's why I
commented to just disregard this observation - it already didn't conform
whatever the docs were saying, it's not going to be any more broken that it
currently is.
> I'd be happy to improve the state of things for SEH, as well as ensuring
> that this PR doesn't regress support for GNU's EH support on Windows. If
> GNU's C++ EH support is based on SEH, then I think I will need to change this
> PR so that a CALL aligned to .seh_startepilogue always inserts a NOP call.
> That's easy to do. Do you have pointers to any info on GNU C++ exception
> dispatch?
Sorry, no clue on GNU EH, my observations were purely about the current state
of SEH and the docs (incorrectly) describing the "rules" on how exactly it is
partially supported.
https://github.com/llvm/llvm-project/pull/144745
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits