1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 %s -fsyntax-only -verify -pedantic
28ac2c66a1442985091c5ec2b33ce6d3df3bcb529Eli Friedman
38ac2c66a1442985091c5ec2b33ce6d3df3bcb529Eli Friedman// PR1892, PR11354
48ac2c66a1442985091c5ec2b33ce6d3df3bcb529Eli Friedmanvoid f(double a[restrict][5]) { __typeof(a) x = 10; } // expected-warning {{(aka 'double (*restrict)[5]')}}
5529bd02affa96a311dd9ab131f2ab4d833017fb7Chris Lattner
6ba03eda1599dd89da935a2b46da10659afe46addSteve Naroffint foo (__const char *__path);
7ba03eda1599dd89da935a2b46da10659afe46addSteve Naroffint foo(__const char *__restrict __file);
8ba03eda1599dd89da935a2b46da10659afe46addSteve Naroff
95f4a6829dc58cab2f76e2b98492859aa3b91e3f2Chris Lattnervoid func(const char*); // expected-note {{previous declaration is here}}
105f4a6829dc58cab2f76e2b98492859aa3b91e3f2Chris Lattnervoid func(char*); // expected-error{{conflicting types for 'func'}}
112565eeff7b0d2310fb2924ce96a54302b0dfa5afSteve Naroff
121adb88370beab45af2f065afe86b51ccd59ec50dChris Lattnervoid g(int (*)(const void **, const void **));
131adb88370beab45af2f065afe86b51ccd59ec50dChris Lattnervoid g(int (*compar)()) {
141adb88370beab45af2f065afe86b51ccd59ec50dChris Lattner}
151adb88370beab45af2f065afe86b51ccd59ec50dChris Lattner
165f4a6829dc58cab2f76e2b98492859aa3b91e3f2Chris Lattnervoid h();  // expected-note {{previous declaration is here}}
175f4a6829dc58cab2f76e2b98492859aa3b91e3f2Chris Lattnervoid h (const char *fmt, ...) {} // expected-error{{conflicting types for 'h'}}
18868d08f9e97eb013600199594745b9997150be8fChris Lattner
19868d08f9e97eb013600199594745b9997150be8fChris Lattner// PR1965
20868d08f9e97eb013600199594745b9997150be8fChris Lattnerint t5(b);          // expected-error {{parameter list without types}}
21d658b562e80d6ef7a1118e34ff12802c6e2fccedChris Lattnerint t6(int x, g);   // expected-warning {{type specifier missing, defaults to 'int'}}
22868d08f9e97eb013600199594745b9997150be8fChris Lattner
2399d724f6a31b5521ded95adf10ef7f3c62a0b18eChris Lattnerint t7(, );       // expected-error {{expected parameter declarator}} expected-error {{expected parameter declarator}}
2499d724f6a31b5521ded95adf10ef7f3c62a0b18eChris Lattnerint t8(, int a);  // expected-error {{expected parameter declarator}}
2599d724f6a31b5521ded95adf10ef7f3c62a0b18eChris Lattnerint t9(int a, );  // expected-error {{expected parameter declarator}}
26868d08f9e97eb013600199594745b9997150be8fChris Lattner
27868d08f9e97eb013600199594745b9997150be8fChris Lattner
285280408ab323a213ac63d5b557475ea5037aa553Chris Lattner// PR2042
295280408ab323a213ac63d5b557475ea5037aa553Chris Lattnervoid t10(){}
3074734d576b1dd082f623abb76ab204d69970dadbDouglas Gregorvoid t11(){t10(1);} // expected-warning{{too many arguments}}
315280408ab323a213ac63d5b557475ea5037aa553Chris Lattner
32777f07b6cd595bb0922e05768e5703fbc92b5695Chris Lattner// PR3208
33777f07b6cd595bb0922e05768e5703fbc92b5695Chris Lattnervoid t12(int) {}  // expected-error{{parameter name omitted}}
34777f07b6cd595bb0922e05768e5703fbc92b5695Chris Lattner
3565ce04bef06696379682410f399f37b43996d824Chris Lattner// PR2790
3665ce04bef06696379682410f399f37b43996d824Chris Lattnervoid t13() {
37184aa4e6ded190bfb3bbe207040467f8d7e28a04Chris Lattner  return 0; // expected-error {{void function 't13' should not return a value}}
3865ce04bef06696379682410f399f37b43996d824Chris Lattner}
3965ce04bef06696379682410f399f37b43996d824Chris Lattnerint t14() {
40184aa4e6ded190bfb3bbe207040467f8d7e28a04Chris Lattner  return; // expected-error {{non-void function 't14' should return a value}}
4165ce04bef06696379682410f399f37b43996d824Chris Lattner}
42be109b3e768b70f9efb106d25d6b5a2c72c5a9b8Douglas Gregor
43be109b3e768b70f9efb106d25d6b5a2c72c5a9b8Douglas Gregor// <rdar://problem/6097326>
44be109b3e768b70f9efb106d25d6b5a2c72c5a9b8Douglas Gregory(y) { return y; } // expected-warning{{parameter 'y' was not declared, defaulting to type 'int'}} \
45be109b3e768b70f9efb106d25d6b5a2c72c5a9b8Douglas Gregor                   // expected-warning{{type specifier missing, defaults to 'int'}}
460e8aaaf67b0c172e5a55cded30b80a83d3bd477fEli Friedman
470e8aaaf67b0c172e5a55cded30b80a83d3bd477fEli Friedman
4818d76c27176dcb9f4be4eaf7768100075f180f3fDouglas Gregor// PR3137, <rdar://problem/6127293>
490e8aaaf67b0c172e5a55cded30b80a83d3bd477fEli Friedmanextern int g0_3137(void);
500e8aaaf67b0c172e5a55cded30b80a83d3bd477fEli Friedmanvoid f0_3137() {
510e8aaaf67b0c172e5a55cded30b80a83d3bd477fEli Friedman  int g0_3137(void);
520e8aaaf67b0c172e5a55cded30b80a83d3bd477fEli Friedman}
530e8aaaf67b0c172e5a55cded30b80a83d3bd477fEli Friedmanvoid f1_3137() {
540e8aaaf67b0c172e5a55cded30b80a83d3bd477fEli Friedman  int (*fp)(void) = g0_3137;
550e8aaaf67b0c172e5a55cded30b80a83d3bd477fEli Friedman}
5604495c859f81e440748a9b86baa2913461652bb0Douglas Gregor
5704495c859f81e440748a9b86baa2913461652bb0Douglas Gregorvoid f1static() {
5804495c859f81e440748a9b86baa2913461652bb0Douglas Gregor  static void f2static(int); // expected-error{{function declared in block scope cannot have 'static' storage class}}
5904495c859f81e440748a9b86baa2913461652bb0Douglas Gregor  register void f2register(int); // expected-error{{illegal storage class on function}}
6004495c859f81e440748a9b86baa2913461652bb0Douglas Gregor}
617f0f5dce3adcfce88d5c9a0ad0146a33c01a1e8fEli Friedman
62e7450f5dbd5bed63b8ef9db86350a8fc3db011e8Douglas Gregorstruct incomplete_test a(void) {} // expected-error{{incomplete result type 'struct incomplete_test' in function definition}} \
63e7450f5dbd5bed63b8ef9db86350a8fc3db011e8Douglas Gregor    // expected-note{{forward declaration of 'struct incomplete_test'}}
64c51974328b3a378c3c40b1fa527ecb928ed2bfdaChris Lattner
65c51974328b3a378c3c40b1fa527ecb928ed2bfdaChris Lattner
66c51974328b3a378c3c40b1fa527ecb928ed2bfdaChris Lattnerextern __inline
67eb32fde032a250091134db56a3aeaea6b09f6594Eli Friedman__attribute__((__gnu_inline__))
68c51974328b3a378c3c40b1fa527ecb928ed2bfdaChris Lattnervoid gnu_inline1() {}
69c51974328b3a378c3c40b1fa527ecb928ed2bfdaChris Lattner
70c51974328b3a378c3c40b1fa527ecb928ed2bfdaChris Lattnervoid
71eb32fde032a250091134db56a3aeaea6b09f6594Eli Friedman__attribute__((__gnu_inline__)) // expected-warning {{'gnu_inline' attribute requires function to be marked 'inline', attribute ignored}}
72c51974328b3a378c3c40b1fa527ecb928ed2bfdaChris Lattnergnu_inline2() {}
7323a48cc69e7ed4f219996a8864cb7d3f24f1157fChris Lattner
7423a48cc69e7ed4f219996a8864cb7d3f24f1157fChris Lattner
7523a48cc69e7ed4f219996a8864cb7d3f24f1157fChris Lattner// rdar://6802350
7623a48cc69e7ed4f219996a8864cb7d3f24f1157fChris Lattnerinline foo_t invalid_type() {  // expected-error {{unknown type name 'foo_t'}}
7723a48cc69e7ed4f219996a8864cb7d3f24f1157fChris Lattner}
7823a48cc69e7ed4f219996a8864cb7d3f24f1157fChris Lattner
797cbeef278d6206941630ea14585ea80f44d68d69Chris Lattnertypedef void fn_t(void);
807cbeef278d6206941630ea14585ea80f44d68d69Chris Lattnerfn_t t17;
817cbeef278d6206941630ea14585ea80f44d68d69Chris Lattner
822dbd285f5033ca6dea25babfd1c43d9fec35e7e5Chris Lattner// PR4049
835153ee66d6d4fb37b02f85df38e48dc8b46660dfChris Lattnerunknown_type t18(void*) {   // expected-error {{unknown type name 'unknown_type'}} expected-error{{parameter name omitted}}
845153ee66d6d4fb37b02f85df38e48dc8b46660dfChris Lattner}
855153ee66d6d4fb37b02f85df38e48dc8b46660dfChris Lattner
865153ee66d6d4fb37b02f85df38e48dc8b46660dfChris Lattnerunknown_type t19(int* P) {   // expected-error {{unknown type name 'unknown_type'}}
875153ee66d6d4fb37b02f85df38e48dc8b46660dfChris Lattner  P = P+1;  // no warning.
882dbd285f5033ca6dea25babfd1c43d9fec35e7e5Chris Lattner}
8923a48cc69e7ed4f219996a8864cb7d3f24f1157fChris Lattner
90ed5d651b0d4b99d0b68bb8d4633e49b98c95bd8fDouglas Gregor// missing ',' before '...'
91ed5d651b0d4b99d0b68bb8d4633e49b98c95bd8fDouglas Gregorvoid t20(int i...) { } // expected-error {{requires a comma}}
92117c45666c99f1797c708767d7c0ccaa7902ec42Douglas Gregor
93117c45666c99f1797c708767d7c0ccaa7902ec42Douglas Gregorint n;
94117c45666c99f1797c708767d7c0ccaa7902ec42Douglas Gregorvoid t21(int n, int (*array)[n]);
95