| // 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 noundef i32 @"?filt$0@0@at@@"(ptr noundef %exception_pointers, ptr noundef %frame_pointer) #[[MD:[0-9]+]] | 
 | // CHECK: attributes #[[MD]] = { nounwind uwtable | 
 |  | 
 | void at() { | 
 |   i ar; | 
 |  | 
 |   __try { | 
 |     ar->ad(); | 
 |   } __except (aq(*ar, _exception_code(), 0, 0)) { | 
 |   } | 
 |  | 
 | } |