// 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); }