1*67e74705SXin Li // RUN: %clang_cc1 %s -fsyntax-only -fborland-extensions -triple x86_64-linux-gnu -verify 2*67e74705SXin Li // RUN: %clang_cc1 %s -fsyntax-only -fborland-extensions -triple i686-linux-gnu -Werror 3*67e74705SXin Li 4*67e74705SXin Li // Borland extensions 5*67e74705SXin Li 6*67e74705SXin Li // 1. test -fborland-extensions dummy_function()7*67e74705SXin Liint dummy_function() { return 0; } 8*67e74705SXin Li 9*67e74705SXin Li // 2. test __pascal 10*67e74705SXin Li // expected-warning@+1 {{calling convention '_pascal' ignored for this target}} 11*67e74705SXin Li int _pascal f2(); 12*67e74705SXin Li 13*67e74705SXin Li // expected-warning@+1 {{calling convention '__pascal' ignored for this target}} 14*67e74705SXin Li float __pascal gi2(int, int); 15*67e74705SXin Li // expected-warning@+1 {{calling convention '__pascal' ignored for this target}} g2(T (__pascal * const)(int,int))16*67e74705SXin Litemplate<typename T> T g2(T (__pascal * const )(int, int)) { return 0; } 17*67e74705SXin Li 18*67e74705SXin Li struct M { 19*67e74705SXin Li // expected-warning@+1 {{calling convention '__pascal' ignored for this target}} 20*67e74705SXin Li int __pascal addP(); 21*67e74705SXin Li // expected-warning@+1 {{calling convention '__pascal' ignored for this target}} 22*67e74705SXin Li float __pascal subtractP(); 23*67e74705SXin Li }; 24*67e74705SXin Li // expected-warning@+1 {{calling convention '__pascal' ignored for this target}} h2(T (__pascal M::* const)())25*67e74705SXin Litemplate<typename T> int h2(T (__pascal M::* const )()) { return 0; } m2()26*67e74705SXin Livoid m2() { 27*67e74705SXin Li int i; float f; 28*67e74705SXin Li i = f2(); 29*67e74705SXin Li f = gi2(2, i); 30*67e74705SXin Li f = g2(gi2); 31*67e74705SXin Li i = h2<int>(&M::addP); 32*67e74705SXin Li f = h2(&M::subtractP); 33*67e74705SXin Li } 34*67e74705SXin Li 35*67e74705SXin Li // 3. test other calling conventions 36*67e74705SXin Li int _cdecl fa3(); 37*67e74705SXin Li // expected-warning@+1 {{calling convention '_fastcall' ignored for this target}} 38*67e74705SXin Li int _fastcall fc3(); 39*67e74705SXin Li // expected-warning@+1 {{calling convention '_stdcall' ignored for this target}} 40*67e74705SXin Li int _stdcall fd3(); 41*67e74705SXin Li 42*67e74705SXin Li // 4. test __uuidof() 43*67e74705SXin Li typedef struct _GUID { 44*67e74705SXin Li unsigned long Data1; 45*67e74705SXin Li unsigned short Data2; 46*67e74705SXin Li unsigned short Data3; 47*67e74705SXin Li unsigned char Data4[ 8 ]; 48*67e74705SXin Li } GUID; 49*67e74705SXin Li 50*67e74705SXin Li struct __declspec(uuid("{12345678-1234-1234-1234-123456789abc}")) Foo; 51*67e74705SXin Li struct Data { 52*67e74705SXin Li GUID const* Guid; 53*67e74705SXin Li }; 54*67e74705SXin Li t4()55*67e74705SXin Livoid t4() { 56*67e74705SXin Li unsigned long data; 57*67e74705SXin Li 58*67e74705SXin Li const GUID guid_inl = __uuidof(Foo); 59*67e74705SXin Li Data ata1 = { &guid_inl}; 60*67e74705SXin Li data = ata1.Guid->Data1; 61*67e74705SXin Li } 62*67e74705SXin Li 63