1*67e74705SXin Li // RUN: %clang_cc1 -triple %ms_abi_triple -fms-extensions -emit-llvm -O0 -o - %s | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li // Friend functions defined in classes are emitted. 4*67e74705SXin Li // CHECK: define weak_odr dllexport void @"\01?friend1@@YAXXZ"() 5*67e74705SXin Li struct FuncFriend1 { friend1()6*67e74705SXin Li friend __declspec(dllexport) void friend1() {} 7*67e74705SXin Li }; 8*67e74705SXin Li 9*67e74705SXin Li // But function templates and functions defined in class templates are not 10*67e74705SXin Li // emitted. 11*67e74705SXin Li // CHECK-NOT: friend2 12*67e74705SXin Li // CHECK-NOT: friend3 13*67e74705SXin Li // CHECK-NOT: friend4 14*67e74705SXin Li struct FuncFriend2 { friend2()15*67e74705SXin Li template<typename> friend __declspec(dllexport) void friend2() {} 16*67e74705SXin Li }; 17*67e74705SXin Li template<typename> struct FuncFriend3 { friend3()18*67e74705SXin Li friend __declspec(dllexport) void friend3() {} 19*67e74705SXin Li struct Inner { friend4FuncFriend320*67e74705SXin Li friend __declspec(dllexport) void friend4() {} 21*67e74705SXin Li }; 22*67e74705SXin Li }; 23