declspec.c revision 96b77fc05ed4a052a9e614f72b0e83572408ce48
1cd8812948bc8a65dcf10c541c1775e5ba44def6cChris Lattner// RUN: clang %s -verify -fsyntax-only
2cd8812948bc8a65dcf10c541c1775e5ba44def6cChris Lattnertypedef char T[4];
3cd8812948bc8a65dcf10c541c1775e5ba44def6cChris Lattner
4cd8812948bc8a65dcf10c541c1775e5ba44def6cChris LattnerT foo(int n, int m) {  }  // expected-error {{cannot return array or function}}
5cd8812948bc8a65dcf10c541c1775e5ba44def6cChris Lattner
61b4a6227f3ee6fca074d0f521757d1ed4f95ef38Steve Naroffvoid foof(const char *, ...) __attribute__((__format__(__printf__, 1, 2))), barf (void);
71b4a6227f3ee6fca074d0f521757d1ed4f95ef38Steve Naroff
8e39bfd0c52975dfb038413aa55147df2fc709ce2Steve Naroffint typedef validTypeDecl() { } // expected-error {{function definition declared 'typedef'}}
9e39bfd0c52975dfb038413aa55147df2fc709ce2Steve Naroff
109532414c45a7114d9e94a733121655a5b5d5b473Steve Naroffstruct _zend_module_entry { }
119532414c45a7114d9e94a733121655a5b5d5b473Steve Narofftypedef struct _zend_function_entry { } // expected-error {{cannot combine with previous 'struct' declaration specifier}}
12e39bfd0c52975dfb038413aa55147df2fc709ce2Steve Naroffstatic void buggy(int *x) { } // expected-error {{function definition declared 'typedef'}} \
13e39bfd0c52975dfb038413aa55147df2fc709ce2Steve Naroff                              // expected-error {{cannot combine with previous 'typedef' declaration specifier}} \
14e39bfd0c52975dfb038413aa55147df2fc709ce2Steve Naroff                              // expected-error {{cannot combine with previous 'struct' declaration specifier}}
15e39bfd0c52975dfb038413aa55147df2fc709ce2Steve Naroff
1696b77fc05ed4a052a9e614f72b0e83572408ce48Chris Lattner// Type qualifiers.
1796b77fc05ed4a052a9e614f72b0e83572408ce48Chris Lattnertypedef int f(void);
1896b77fc05ed4a052a9e614f72b0e83572408ce48Chris Lattnertypedef f* fptr;
1996b77fc05ed4a052a9e614f72b0e83572408ce48Chris Lattnerconst f* v1;         // expected-warning {{qualifier on function type 'f' has unspecified behavior}}
2096b77fc05ed4a052a9e614f72b0e83572408ce48Chris Lattner__restrict__ f* v2;  // expected-error {{restrict requires a pointer or reference ('f' is invalid)}}
2196b77fc05ed4a052a9e614f72b0e83572408ce48Chris Lattner__restrict__ fptr v3; // expected-error {{estrict pointee must be an object or incomplete type ('f' is invalid)}}
2296b77fc05ed4a052a9e614f72b0e83572408ce48Chris Lattnerf *__restrict__ v4;   // expected-error {{restrict pointee must be an object or incomplete type ('f' is invalid)}}
23e39bfd0c52975dfb038413aa55147df2fc709ce2Steve Naroff
24