1 // RUN: %clang_cc1 -no-opaque-pointers "-triple" "arm64-windows" "-funwind-tables=2" "-fms-compatibility" -emit-llvm -O1 -disable-llvm-passes %s -o - | FileCheck %s 2 // NOTE: we're passing "-O1 -disable-llvm-passes" to avoid adding optnone and noinline everywhere. 3 4 # 0 "" 3 5 #define a(b, c) d() & b 6 #define f(c) a(e(0, 0, #c).b(), ) 7 8 struct e { 9 e(int, int, char *); 10 int b(); 11 }; 12 13 struct d { 14 void operator&(int); 15 }; 16 17 struct h; 18 19 struct i { 20 h *operator->(); 21 h &operator*() { f(); } 22 }; 23 24 typedef int g; 25 26 struct h { 27 void ad(); 28 }; 29 30 g aq(h j, g k, int, int) { 31 if (k) 32 return; 33 j.ad(); 34 } 35 36 // Check for the uwtable attribute on the filter funclet. 37 // CHECK: define internal noundef i32 @"?filt$0@0@at@@"(i8* noundef %exception_pointers, i8* noundef %frame_pointer) #[[MD:[0-9]+]] 38 // CHECK: attributes #[[MD]] = { nounwind uwtable 39 40 void at() { 41 i ar; 42 43 __try { 44 ar->ad(); 45 } __except (aq(*ar, _exception_code(), 0, 0)) { 46 } 47 48 } 49