1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar/* RUN: %clang_cc1 %s -Eonly -std=c89 -pedantic -verify
20a4f1b9550b81b1391d79c0dd5a416951f4df9a6Chris Lattner*/
30a4f1b9550b81b1391d79c0dd5a416951f4df9a6Chris Lattner/* PR3937 */
40ee8de7fe9c1fb74574c62b9d59ffe46a94435f4Argyrios Kyrtzidis#define zero() 0 /* expected-note 2 {{defined here}} */
50ee8de7fe9c1fb74574c62b9d59ffe46a94435f4Argyrios Kyrtzidis#define one(x) 0 /* expected-note 2 {{defined here}} */
60ee8de7fe9c1fb74574c62b9d59ffe46a94435f4Argyrios Kyrtzidis#define two(x, y) 0 /* expected-note 4 {{defined here}} */
79f728cd37476c6588b06d241fa778d2df6e277daRichard Smith#define zero_dot(...) 0   /* expected-warning {{variadic macros are a C99 feature}} */
89f728cd37476c6588b06d241fa778d2df6e277daRichard Smith#define one_dot(x, ...) 0 /* expected-warning {{variadic macros are a C99 feature}} expected-note 2{{macro 'one_dot' defined here}} */
90a4f1b9550b81b1391d79c0dd5a416951f4df9a6Chris Lattner
100a4f1b9550b81b1391d79c0dd5a416951f4df9a6Chris Lattnerzero()
110a4f1b9550b81b1391d79c0dd5a416951f4df9a6Chris Lattnerzero(1);          /* expected-error {{too many arguments provided to function-like macro invocation}} */
120a4f1b9550b81b1391d79c0dd5a416951f4df9a6Chris Lattnerzero(1, 2, 3);    /* expected-error {{too many arguments provided to function-like macro invocation}} */
130a4f1b9550b81b1391d79c0dd5a416951f4df9a6Chris Lattner
140a4f1b9550b81b1391d79c0dd5a416951f4df9a6Chris Lattnerone()   /* ok */
150a4f1b9550b81b1391d79c0dd5a416951f4df9a6Chris Lattnerone(a)
165940bf33061844c9a61d4d5c1230df9cf9e90342Richard Trieuone(a,)           /* expected-error {{too many arguments provided to function-like macro invocation}} \
175940bf33061844c9a61d4d5c1230df9cf9e90342Richard Trieu                     expected-warning {{empty macro arguments are a C99 feature}}*/
180a4f1b9550b81b1391d79c0dd5a416951f4df9a6Chris Lattnerone(a, b)         /* expected-error {{too many arguments provided to function-like macro invocation}} */
190a4f1b9550b81b1391d79c0dd5a416951f4df9a6Chris Lattner
200a4f1b9550b81b1391d79c0dd5a416951f4df9a6Chris Lattnertwo()       /* expected-error {{too few arguments provided to function-like macro invocation}} */
210a4f1b9550b81b1391d79c0dd5a416951f4df9a6Chris Lattnertwo(a)      /* expected-error {{too few arguments provided to function-like macro invocation}} */
220a4f1b9550b81b1391d79c0dd5a416951f4df9a6Chris Lattnertwo(a,b)
239f728cd37476c6588b06d241fa778d2df6e277daRichard Smithtwo(a, )    /* expected-warning {{empty macro arguments are a C99 feature}} */
240a4f1b9550b81b1391d79c0dd5a416951f4df9a6Chris Lattnertwo(a,b,c)  /* expected-error {{too many arguments provided to function-like macro invocation}} */
250a4f1b9550b81b1391d79c0dd5a416951f4df9a6Chris Lattnertwo(
269f728cd37476c6588b06d241fa778d2df6e277daRichard Smith    ,     /* expected-warning {{empty macro arguments are a C99 feature}} */
279f728cd37476c6588b06d241fa778d2df6e277daRichard Smith    ,     /* expected-warning {{empty macro arguments are a C99 feature}}  \
280a4f1b9550b81b1391d79c0dd5a416951f4df9a6Chris Lattner             expected-error {{too many arguments provided to function-like macro invocation}} */
295940bf33061844c9a61d4d5c1230df9cf9e90342Richard Trieu    )     /* expected-warning {{empty macro arguments are a C99 feature}} */
309f728cd37476c6588b06d241fa778d2df6e277daRichard Smithtwo(,)      /* expected-warning 2 {{empty macro arguments are a C99 feature}} */
318fde5978a63bcce5c294a93b2a5dd424d7628971Chris Lattner
328fde5978a63bcce5c294a93b2a5dd424d7628971Chris Lattner
338fde5978a63bcce5c294a93b2a5dd424d7628971Chris Lattner
3497e2de171de555feb1ef422e71874082a67498c9Chris Lattner/* PR4006 & rdar://6807000 */
359f728cd37476c6588b06d241fa778d2df6e277daRichard Smith#define e(...) __VA_ARGS__  /* expected-warning {{variadic macros are a C99 feature}} */
368fde5978a63bcce5c294a93b2a5dd424d7628971Chris Lattnere(x)
3797e2de171de555feb1ef422e71874082a67498c9Chris Lattnere()
3897e2de171de555feb1ef422e71874082a67498c9Chris Lattner
3997e2de171de555feb1ef422e71874082a67498c9Chris Lattnerzero_dot()
409f728cd37476c6588b06d241fa778d2df6e277daRichard Smithone_dot(x)  /* empty ... argument: expected-warning {{must specify at least one argument for '...' parameter of variadic macro}}  */
419f728cd37476c6588b06d241fa778d2df6e277daRichard Smithone_dot()   /* empty first argument, elided ...: expected-warning {{must specify at least one argument for '...' parameter of variadic macro}} */
42a864cf7c1d774a0f790bfc46befc87d9dbf1f65cChris Lattner
43a864cf7c1d774a0f790bfc46befc87d9dbf1f65cChris Lattner
44a864cf7c1d774a0f790bfc46befc87d9dbf1f65cChris Lattner/* rdar://6816766 - Crash with function-like macro test at end of directive. */
45a864cf7c1d774a0f790bfc46befc87d9dbf1f65cChris Lattner#define E() (i == 0)
46a864cf7c1d774a0f790bfc46befc87d9dbf1f65cChris Lattner#if E
47a864cf7c1d774a0f790bfc46befc87d9dbf1f65cChris Lattner#endif
484fa4b480270c14dfdcd0dfd4f76938e973082e3bEli Friedman
494fa4b480270c14dfdcd0dfd4f76938e973082e3bEli Friedman
504fa4b480270c14dfdcd0dfd4f76938e973082e3bEli Friedman/* <rdar://problem/12292192> */
514fa4b480270c14dfdcd0dfd4f76938e973082e3bEli Friedman#define NSAssert(condition, desc, ...) /* expected-warning {{variadic macros are a C99 feature}} */ \
524fa4b480270c14dfdcd0dfd4f76938e973082e3bEli Friedman    SomeComplicatedStuff((desc), ##__VA_ARGS__) /* expected-warning {{token pasting of ',' and __VA_ARGS__ is a GNU extension}} */
534fa4b480270c14dfdcd0dfd4f76938e973082e3bEli FriedmanNSAssert(somecond, somedesc)
54