attr-format_arg.c
855 Bytes
// 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);
}