// RUN: %clang_cc1 -triple i686-windows %s -fsyntax-only -Wno-unused-value -Wno-pointer-to-int-cast -Wmicrosoft -verify -fms-extensions
;
;
;
;
; /* expected-error {{'uuid' attribute is not supported in C}} */
struct IUnknown2 ; /* expected-error {{'uuid' attribute is not supported in C}} */
typedef struct notnested NOTNESTED;
typedef struct nested1 NESTED1;
;
struct nested2 PR20573 = ;
;
typedef union nested6 NESTED6;
;
void
// Enumeration types with a fixed underlying type.
const int seventeen = 17;
typedef int Int;
;
;
void
typedef struct AA;
typedef struct BB;
;
const int anon_falt_size = sizeof;
__declspec e1; // expected-note {{'e1' has been explicitly marked deprecated here}}
; // expected-note {{'DS1' has been explicitly marked deprecated here}}
__declspec void // expected-note {{'Dfunc1' has been explicitly marked deprecated here}}
; // expected-error {{'deprecated' attribute requires a string}}
void
int __sptr wrong1; // expected-error {{'__sptr' attribute only applies to pointer arguments}}
// The modifier must follow the asterisk
int __sptr *wrong_psp; // expected-error {{'__sptr' attribute only applies to pointer arguments}}
int * __sptr __uptr wrong2; // expected-error {{'__sptr' and '__uptr' attributes are not compatible}}
int * __sptr __sptr wrong3; // expected-warning {{attribute '__sptr' is already applied}}
// It is illegal to overload based on the type attribute.
void // expected-note {{previous definition is here}}
void // expected-error {{redefinition of 'ptr_func'}}
// It is also illegal to overload based on the pointer type attribute.
void // expected-note {{previous definition is here}}
void // expected-error {{redefinition of 'ptr_func2'}}
// Check for warning when return types have the type attribute.
void *__ptr32 // expected-note {{previous definition is here}}
void *__ptr64 // expected-error {{redefinition of 'ptr_func3'}}
// Test that __ptr32/__ptr64 can be passed as arguments with other address
// spaces.
void ;
void ;
void
int * __sptr __ptr32 __sptr wrong4; // expected-warning {{attribute '__sptr' is already applied}}
__ptr32 int *wrong5; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
int *wrong6 __ptr32; // expected-error {{expected ';' after top level declarator}} expected-warning {{declaration does not declare anything}}
int * __ptr32 __ptr64 wrong7; // expected-error {{'__ptr32' and '__ptr64' attributes are not compatible}}
int * __ptr32 __ptr32 wrong8; // expected-warning {{attribute '__ptr32' is already applied}}
int *; // expected-error {{'__sptr' attribute only applies to pointer arguments}} // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
typedef int *T;
T __ptr32 wrong10; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
typedef char *my_va_list;
void ; // expected-note {{passing argument to parameter 'ap' here}}
void ;
void
// __unaligned handling
void
void