xref: /aosp_15_r20/external/clang/test/SemaCXX/MicrosoftCompatibility-cxx98.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 %s -triple i686-pc-win32 -fsyntax-only -std=c++98 -Wmicrosoft -verify -fms-compatibility -fexceptions -fcxx-exceptions
2*67e74705SXin Li 
3*67e74705SXin Li 
4*67e74705SXin Li //MSVC allows forward enum declaration
5*67e74705SXin Li enum ENUM; // expected-warning {{forward references to 'enum' types are a Microsoft extension}}
6*67e74705SXin Li ENUM *var = 0;
7*67e74705SXin Li ENUM var2 = (ENUM)3;
8*67e74705SXin Li enum ENUM1* var3 = 0;// expected-warning {{forward references to 'enum' types are a Microsoft extension}}
9*67e74705SXin Li 
10*67e74705SXin Li typedef void (*FnPtrTy)();
11*67e74705SXin Li void (*PR23733_1)() = static_cast<FnPtrTy>((void *)0); // expected-warning {{static_cast between pointer-to-function and pointer-to-object is a Microsoft extension}}
12*67e74705SXin Li void (*PR23733_2)() = FnPtrTy((void *)0);
13*67e74705SXin Li void (*PR23733_3)() = (FnPtrTy)((void *)0);
14*67e74705SXin Li void (*PR23733_4)() = reinterpret_cast<FnPtrTy>((void *)0);
15*67e74705SXin Li 
16*67e74705SXin Li long function_prototype(int a);
17*67e74705SXin Li long (*function_ptr)(int a);
18*67e74705SXin Li 
function_to_voidptr_conv()19*67e74705SXin Li void function_to_voidptr_conv() {
20*67e74705SXin Li   void *a1 = function_prototype;  // expected-warning {{implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension}}
21*67e74705SXin Li   void *a2 = &function_prototype; // expected-warning {{implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension}}
22*67e74705SXin Li   void *a3 = function_ptr;        // expected-warning {{implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension}}
23*67e74705SXin Li }
24