MicrosoftExtensions.c revision 86f208c1a112c3e8984e63daec15ccf0a1a84329
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 24842e7a22c6a0fbf0ccdb4bb9308d92ca9e9621f6Francois Pichetenum ENUM1; // expected-warning {{forward references to 'enum' types are a Microsoft extension}} 25842e7a22c6a0fbf0ccdb4bb9308d92ca9e9621f6Francois Pichetenum ENUM1 var1 = 3; 26842e7a22c6a0fbf0ccdb4bb9308d92ca9e9621f6Francois Pichetenum ENUM1* var2 = 0; 27842e7a22c6a0fbf0ccdb4bb9308d92ca9e9621f6Francois Pichet 28842e7a22c6a0fbf0ccdb4bb9308d92ca9e9621f6Francois Pichet 29842e7a22c6a0fbf0ccdb4bb9308d92ca9e9621f6Francois Pichetenum ENUM2 { 308e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet ENUM2_a = (enum ENUM2) 4, 318e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet ENUM2_b = 0x9FFFFFFF, // expected-warning {{enumerator value is not representable in the underlying type 'int'}} 328e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet ENUM2_c = 0x100000000 // expected-warning {{enumerator value is not representable in the underlying type 'int'}} 33842e7a22c6a0fbf0ccdb4bb9308d92ca9e9621f6Francois Pichet}; 348e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet 358e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet 368e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet 378e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet 388e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichettypedef struct notnested { 398e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet long bad1; 408e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet long bad2; 418e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet} NOTNESTED; 428e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet 438e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet 448e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichettypedef struct nested1 { 458e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet long a; 468e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet struct notnested var1; 478e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet NOTNESTED var2; 488e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet} NESTED1; 498e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet 508e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichetstruct nested2 { 518e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet long b; 528e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet NESTED1; // expected-warning {{anonymous structs are a Microsoft extension}} 538e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet}; 548e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet 558e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichetstruct test { 568e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet int c; 578e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet struct nested2; // expected-warning {{anonymous structs are a Microsoft extension}} 588e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet}; 598e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet 608e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichetvoid foo() 618e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet{ 628e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet struct test var; 638e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet var.a; 648e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet var.b; 658e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet var.c; 668e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet var.bad1; // expected-error {{no member named 'bad1' in 'struct test'}} 678e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet var.bad2; // expected-error {{no member named 'bad2' in 'struct test'}} 688e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet} 698e161ed8e63bd9d3783a987d837b72b2b96c4512Francois Pichet 7086f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregor// Enumeration types with a fixed underlying type. 7186f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregorconst int seventeen = 17; 7286f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregortypedef int Int; 7386f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregor 7486f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregorstruct X0 { 7586f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregor enum E1 : Int { SomeOtherValue } field; // expected-warning{{enumeration types with a fixed underlying type are a Microsoft extension}} 7686f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregor enum E1 : seventeen; 7786f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregor}; 7886f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregor 7986f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregorenum : long { // expected-warning{{enumeration types with a fixed underlying type are a Microsoft extension}} 8086f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregor SomeValue = 0x100000000 8186f208c1a112c3e8984e63daec15ccf0a1a84329Douglas Gregor}; 82