// RUN: %clang_cc1 -triple %ms_abi_triple -fms-extensions -emit-llvm -O0 -o - %s | FileCheck %s // Friend functions defined in classes are emitted. // CHECK: define weak_odr dllexport void @"\01?friend1@@YAXXZ"() struct FuncFriend1 { friend __declspec(dllexport) void friend1() {} }; // But function templates and functions defined in class templates are not // emitted. // CHECK-NOT: friend2 // CHECK-NOT: friend3 // CHECK-NOT: friend4 struct FuncFriend2 { template<typename> friend __declspec(dllexport) void friend2() {} }; template<typename> struct FuncFriend3 { friend __declspec(dllexport) void friend3() {} struct Inner { friend __declspec(dllexport) void friend4() {} }; };