31 lines · c
1// RUN: %clang_cc1 -fsyntax-only -verify %s2 3int printf(const char *, ...);4 5const char* f(const char *s) __attribute__((format_arg(1)));6 7const char *h(const char *msg1, const char *msg2)8 __attribute__((__format_arg__(1))) __attribute__((__format_arg__(2)));9 10void g(const char *s) {11 printf("%d", 123);12 printf("%d %d", 123); // expected-warning{{more '%' conversions than data arguments}}13 14 printf(f("%d"), 123);15 printf(f("%d %d"), 123); // expected-warning{{more '%' conversions than data arguments}}16 17 printf(h(18 "", // expected-warning {{format string is empty}}19 "" // expected-warning {{format string is empty}}20 ), 123);21 printf(h(22 "%d",23 "" // expected-warning {{format string is empty}}24 ), 123);25 printf(h(26 "", // expected-warning {{format string is empty}}27 "%d"28 ), 123);29 printf(h("%d", "%d"), 123);30}31