xref: /aosp_15_r20/external/clang/test/SemaCXX/borland-extensions.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
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 Li int 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 Li template<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 Li template<typename T> int h2(T (__pascal M::* const )()) { return 0; }
m2()26*67e74705SXin Li void 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 Li void 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