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