15cd532ca0bc1cb8110e24586d064f72332d8b767Richard Smith// RUN: %clang_cc1 %s -fsyntax-only -fborland-extensions -triple x86_64-linux-gnu -verify 25cd532ca0bc1cb8110e24586d064f72332d8b767Richard Smith// RUN: %clang_cc1 %s -fsyntax-only -fborland-extensions -triple i686-linux-gnu -Werror 3400b607546a8dbfcee3b690f3d0a2fee0ea6480bDawn Perchik 4400b607546a8dbfcee3b690f3d0a2fee0ea6480bDawn Perchik// Borland extensions 5400b607546a8dbfcee3b690f3d0a2fee0ea6480bDawn Perchik 6400b607546a8dbfcee3b690f3d0a2fee0ea6480bDawn Perchik// 1. test -fborland-extensions 7400b607546a8dbfcee3b690f3d0a2fee0ea6480bDawn Perchikint dummy_function() { return 0; } 852fc314e1b5e1baee6305067cf831763d02bd243Dawn Perchik 952fc314e1b5e1baee6305067cf831763d02bd243Dawn Perchik// 2. test __pascal 10cda7968b38d76848b4fb24f7cc28ab83835b4ea3Richard Smith// expected-warning@+1 {{calling convention '_pascal' ignored for this target}} 1152fc314e1b5e1baee6305067cf831763d02bd243Dawn Perchikint _pascal f2(); 1252fc314e1b5e1baee6305067cf831763d02bd243Dawn Perchik 135cd532ca0bc1cb8110e24586d064f72332d8b767Richard Smith// expected-warning@+1 {{calling convention '__pascal' ignored for this target}} 1452fc314e1b5e1baee6305067cf831763d02bd243Dawn Perchikfloat __pascal gi2(int, int); 155cd532ca0bc1cb8110e24586d064f72332d8b767Richard Smith// expected-warning@+1 {{calling convention '__pascal' ignored for this target}} 1652fc314e1b5e1baee6305067cf831763d02bd243Dawn Perchiktemplate<typename T> T g2(T (__pascal * const )(int, int)) { return 0; } 1752fc314e1b5e1baee6305067cf831763d02bd243Dawn Perchik 1852fc314e1b5e1baee6305067cf831763d02bd243Dawn Perchikstruct M { 195cd532ca0bc1cb8110e24586d064f72332d8b767Richard Smith // expected-warning@+1 {{calling convention '__pascal' ignored for this target}} 2052fc314e1b5e1baee6305067cf831763d02bd243Dawn Perchik int __pascal addP(); 215cd532ca0bc1cb8110e24586d064f72332d8b767Richard Smith // expected-warning@+1 {{calling convention '__pascal' ignored for this target}} 2252fc314e1b5e1baee6305067cf831763d02bd243Dawn Perchik float __pascal subtractP(); 2352fc314e1b5e1baee6305067cf831763d02bd243Dawn Perchik}; 245cd532ca0bc1cb8110e24586d064f72332d8b767Richard Smith// expected-warning@+1 {{calling convention '__pascal' ignored for this target}} 2552fc314e1b5e1baee6305067cf831763d02bd243Dawn Perchiktemplate<typename T> int h2(T (__pascal M::* const )()) { return 0; } 2652fc314e1b5e1baee6305067cf831763d02bd243Dawn Perchikvoid m2() { 2752fc314e1b5e1baee6305067cf831763d02bd243Dawn Perchik int i; float f; 2852fc314e1b5e1baee6305067cf831763d02bd243Dawn Perchik i = f2(); 2952fc314e1b5e1baee6305067cf831763d02bd243Dawn Perchik f = gi2(2, i); 3052fc314e1b5e1baee6305067cf831763d02bd243Dawn Perchik f = g2(gi2); 3152fc314e1b5e1baee6305067cf831763d02bd243Dawn Perchik i = h2<int>(&M::addP); 3252fc314e1b5e1baee6305067cf831763d02bd243Dawn Perchik f = h2(&M::subtractP); 3352fc314e1b5e1baee6305067cf831763d02bd243Dawn Perchik} 348df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchik 358df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchik// 3. test other calling conventions 368df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchikint _cdecl fa3(); 37cda7968b38d76848b4fb24f7cc28ab83835b4ea3Richard Smith// expected-warning@+1 {{calling convention '_fastcall' ignored for this target}} 388df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchikint _fastcall fc3(); 39cda7968b38d76848b4fb24f7cc28ab83835b4ea3Richard Smith// expected-warning@+1 {{calling convention '_stdcall' ignored for this target}} 408df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchikint _stdcall fd3(); 418df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchik 428df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchik// 4. test __uuidof() 438df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchiktypedef struct _GUID { 448df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchik unsigned long Data1; 458df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchik unsigned short Data2; 468df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchik unsigned short Data3; 478df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchik unsigned char Data4[ 8 ]; 488df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchik} GUID; 498df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchik 508df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchikstruct __declspec(uuid("{12345678-1234-1234-1234-123456789abc}")) Foo; 518df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchikstruct Data { 528df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchik GUID const* Guid; 538df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchik}; 548df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchik 558df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchikvoid t4() { 568df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchik unsigned long data; 578df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchik 588df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchik const GUID guid_inl = __uuidof(Foo); 598df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchik Data ata1 = { &guid_inl}; 608df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchik data = ata1.Guid->Data1; 618df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchik} 628df7622c65f13f95e6e1f4cf6f51592fddae3afbDawn Perchik 63