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