18e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet// RUN: %clang_cc1 %s -fsyntax-only -Wno-unused-value -Wmicrosoft -verify -fms-extensions 2b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth 3b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth 4b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruthstruct A 5b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth{ 6b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth int a[]; /* expected-warning {{flexible array member 'a' in otherwise empty struct is a Microsoft extension}} */ 7b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth}; 8b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth 9b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruthstruct C { 10b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth int l; 11b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth union { 12b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth int c1[]; /* expected-warning {{flexible array member 'c1' in a union is a Microsoft extension}} */ 13b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth char c2[]; /* expected-warning {{flexible array member 'c2' in a union is a Microsoft extension}} */ 14b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth }; 15b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth}; 16b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth 17b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth 18b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruthstruct D { 19b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth int l; 20b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth int D[]; 21b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth}; 22842e7a22c6a0fbf0ccdb4bb9308d92ca9e9621f6Francois Pichet 23842e7a22c6a0fbf0ccdb4bb9308d92ca9e9621f6Francois Pichet 248e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet 258e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet 268e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet 278e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet 288e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichettypedef struct notnested { 298e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet long bad1; 308e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet long bad2; 318e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet} NOTNESTED; 328e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet 338e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet 348e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichettypedef struct nested1 { 358e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet long a; 368e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet struct notnested var1; 378e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet NOTNESTED var2; 388e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet} NESTED1; 398e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet 408e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichetstruct nested2 { 418e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet long b; 428e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet NESTED1; // expected-warning {{anonymous structs are a Microsoft extension}} 438e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet}; 448e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet 458e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichetstruct test { 468e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet int c; 478e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet struct nested2; // expected-warning {{anonymous structs are a Microsoft extension}} 488e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet}; 498e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet 508e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichetvoid foo() 518e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet{ 528e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet struct test var; 538e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet var.a; 548e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet var.b; 558e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet var.c; 568e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet var.bad1; // expected-error {{no member named 'bad1' in 'struct test'}} 578e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet var.bad2; // expected-error {{no member named 'bad2' in 'struct test'}} 588e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet} 598e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet 6086f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregor// Enumeration types with a fixed underlying type. 6186f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregorconst int seventeen = 17; 6286f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregortypedef int Int; 6386f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregor 6486f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregorstruct X0 { 6586f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregor enum E1 : Int { SomeOtherValue } field; // expected-warning{{enumeration types with a fixed underlying type are a Microsoft extension}} 6686f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregor enum E1 : seventeen; 6786f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregor}; 6886f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregor 691756ce44b0e03d6a6fd2d42add6e3227d4d04d34Douglas Gregorenum : long long { // expected-warning{{enumeration types with a fixed underlying type are a Microsoft extension}} 7086f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregor SomeValue = 0x100000000 7186f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregor}; 7283e0995105222b078a57e1e20ef71fbfd0f67d3dFrancois Pichet 7383e0995105222b078a57e1e20ef71fbfd0f67d3dFrancois Pichet 7483e0995105222b078a57e1e20ef71fbfd0f67d3dFrancois Pichetvoid pointer_to_integral_type_conv(char* ptr) { 7583e0995105222b078a57e1e20ef71fbfd0f67d3dFrancois Pichet char ch = (char)ptr; 7683e0995105222b078a57e1e20ef71fbfd0f67d3dFrancois Pichet short sh = (short)ptr; 7783e0995105222b078a57e1e20ef71fbfd0f67d3dFrancois Pichet ch = (char)ptr; 7883e0995105222b078a57e1e20ef71fbfd0f67d3dFrancois Pichet sh = (short)ptr; 79ee625afea71ef5a9c1e386564919b86915d96b0dNico Weber} 80ee625afea71ef5a9c1e386564919b86915d96b0dNico Weber 81ee625afea71ef5a9c1e386564919b86915d96b0dNico Weber 82ee625afea71ef5a9c1e386564919b86915d96b0dNico Webertypedef struct { 83ee625afea71ef5a9c1e386564919b86915d96b0dNico Weber UNKNOWN u; // expected-error {{unknown type name 'UNKNOWN'}} 84ee625afea71ef5a9c1e386564919b86915d96b0dNico Weber} AA; 85ee625afea71ef5a9c1e386564919b86915d96b0dNico Weber 86ee625afea71ef5a9c1e386564919b86915d96b0dNico Webertypedef struct { 87ee625afea71ef5a9c1e386564919b86915d96b0dNico Weber AA; // expected-warning {{anonymous structs are a Microsoft extension}} 88ee625afea71ef5a9c1e386564919b86915d96b0dNico Weber} BB; 8947611c88fb0446673c6e590ab461934054be290aAaron Ballman 90d6724367519b4f98dcce091854549282c11d70a0Fariborz Jahanian__declspec(deprecated("This is deprecated")) enum DE1 { one, two } e1; // expected-note {{'e1' declared here}} 91c3b2308f66fe8abd2c1a911b500c0b989c295819Eli Friedmanstruct __declspec(deprecated) DS1 { int i; float f; }; // expected-note {{declared here}} 9247611c88fb0446673c6e590ab461934054be290aAaron Ballman 9347611c88fb0446673c6e590ab461934054be290aAaron Ballman#define MY_TEXT "This is also deprecated" 94d6724367519b4f98dcce091854549282c11d70a0Fariborz Jahanian__declspec(deprecated(MY_TEXT)) void Dfunc1( void ) {} // expected-note {{'Dfunc1' declared here}} 9547611c88fb0446673c6e590ab461934054be290aAaron Ballman 96fc685ace387734599c475426b1a8efdb491054b8Aaron Ballmanstruct __declspec(deprecated(123)) DS2 {}; // expected-error {{argument to deprecated attribute was not a string literal}} 97fc685ace387734599c475426b1a8efdb491054b8Aaron Ballman 9847611c88fb0446673c6e590ab461934054be290aAaron Ballmanvoid test( void ) { 9947611c88fb0446673c6e590ab461934054be290aAaron Ballman e1 = one; // expected-warning {{'e1' is deprecated: This is deprecated}} 10047611c88fb0446673c6e590ab461934054be290aAaron Ballman struct DS1 s = { 0 }; // expected-warning {{'DS1' is deprecated}} 10147611c88fb0446673c6e590ab461934054be290aAaron Ballman Dfunc1(); // expected-warning {{'Dfunc1' is deprecated: This is also deprecated}} 10247611c88fb0446673c6e590ab461934054be290aAaron Ballman 10347611c88fb0446673c6e590ab461934054be290aAaron Ballman enum DE1 no; // no warning because E1 is not deprecated 10447611c88fb0446673c6e590ab461934054be290aAaron Ballman} 105