31 lines
855 B
C
31 lines
855 B
C
// RUN: %clang_cc1 -fsyntax-only -verify %s
|
|
|
|
int printf(const char *, ...);
|
|
|
|
const char* f(const char *s) __attribute__((format_arg(1)));
|
|
|
|
const char *h(const char *msg1, const char *msg2)
|
|
__attribute__((__format_arg__(1))) __attribute__((__format_arg__(2)));
|
|
|
|
void g(const char *s) {
|
|
printf("%d", 123);
|
|
printf("%d %d", 123); // expected-warning{{more '%' conversions than data arguments}}
|
|
|
|
printf(f("%d"), 123);
|
|
printf(f("%d %d"), 123); // expected-warning{{more '%' conversions than data arguments}}
|
|
|
|
printf(h(
|
|
"", // expected-warning {{format string is empty}}
|
|
"" // expected-warning {{format string is empty}}
|
|
), 123);
|
|
printf(h(
|
|
"%d",
|
|
"" // expected-warning {{format string is empty}}
|
|
), 123);
|
|
printf(h(
|
|
"", // expected-warning {{format string is empty}}
|
|
"%d"
|
|
), 123);
|
|
printf(h("%d", "%d"), 123);
|
|
}
|