1*641fbf15SFlorian Hahn // RUN: %clang_tysan -O0 %s -o %t && %run %t >%t.out 2>&1 2*641fbf15SFlorian Hahn // RUN: FileCheck --allow-empty %s < %t.out 3*641fbf15SFlorian Hahn 4*641fbf15SFlorian Hahn // CHECK-NOT: TypeSanitizer 5*641fbf15SFlorian Hahn 6*641fbf15SFlorian Hahn int foo() { return 0; } 7*641fbf15SFlorian Hahn 8*641fbf15SFlorian Hahn struct Bar { 9*641fbf15SFlorian Hahn struct S2 { 10*641fbf15SFlorian Hahn int (*fnA)(); 11*641fbf15SFlorian Hahn int (*fnB)(); 12*641fbf15SFlorian Hahn }; 13*641fbf15SFlorian Hahn 14*641fbf15SFlorian Hahn static int x() { return 0; } 15*641fbf15SFlorian Hahn 16*641fbf15SFlorian Hahn static const S2 &get() { 17*641fbf15SFlorian Hahn static constexpr S2 Info = {&foo, &Bar::x}; 18*641fbf15SFlorian Hahn return Info; 19*641fbf15SFlorian Hahn } 20*641fbf15SFlorian Hahn }; 21*641fbf15SFlorian Hahn 22*641fbf15SFlorian Hahn int main() { 23*641fbf15SFlorian Hahn auto Info = Bar::get(); 24*641fbf15SFlorian Hahn return Info.fnB(); 25*641fbf15SFlorian Hahn } 26