| // RUN: %clang_cc1 "-triple" "arm64-windows" "-funwind-tables=2" "-fms-compatibility" -emit-llvm -O1 -disable-llvm-passes %s -o - | FileCheck %s |
| // NOTE: we're passing "-O1 -disable-llvm-passes" to avoid adding optnone and noinline everywhere. |
| |
| # 0 "" 3 |
| #define a(b, c) d() & b |
| #define f(c) a(e(0, 0, #c).b(), ) |
| |
| struct e { |
| e(int, int, char *); |
| int b(); |
| }; |
| |
| struct d { |
| void operator&(int); |
| }; |
| |
| struct h; |
| |
| struct i { |
| h *operator->(); |
| h &operator*() { f(); } |
| }; |
| |
| typedef int g; |
| |
| struct h { |
| void ad(); |
| }; |
| |
| g aq(h j, g k, int, int) { |
| if (k) |
| return; |
| j.ad(); |
| } |
| |
| // Check for the uwtable attribute on the filter funclet. |
| // CHECK: define internal i32 @"?filt$0@0@at@@"(i8* %exception_pointers, i8* %frame_pointer) #[[MD:[0-9]+]] |
| // CHECK: attributes #[[MD]] = { nounwind uwtable |
| |
| void at() { |
| i ar; |
| |
| __try { |
| ar->ad(); |
| } __except (aq(*ar, _exception_code(), 0, 0)) { |
| } |
| |
| } |