137969b7e14d6a4dfd934ef6d3738cc90b832ec1dHans Wennborg/* RUN: %clang_cc1 -fsyntax-only -verify -triple i386-apple-darwin9 -pedantic -std=c89 %s 2d02deebce5f1b283101e035a7f5d5bab0d2068ecHans Wennborg */ 3d02deebce5f1b283101e035a7f5d5bab0d2068ecHans Wennborg 4d02deebce5f1b283101e035a7f5d5bab0d2068ecHans Wennborgint scanf(const char * restrict, ...); 5d02deebce5f1b283101e035a7f5d5bab0d2068ecHans Wennborgint printf(const char *restrict, ...); 6d02deebce5f1b283101e035a7f5d5bab0d2068ecHans Wennborg 7d02deebce5f1b283101e035a7f5d5bab0d2068ecHans Wennborgvoid foo(char **sp, float *fp, int *ip) { 8f85626453123f9691bcef13cff963f556e209c27Hans Wennborg scanf("%as", sp); /* expected-warning{{'a' length modifier is not supported by ISO C}} */ 9f85626453123f9691bcef13cff963f556e209c27Hans Wennborg scanf("%a[abc]", sp); /* expected-warning{{'a' length modifier is not supported by ISO C}} */ 10d02deebce5f1b283101e035a7f5d5bab0d2068ecHans Wennborg 11d02deebce5f1b283101e035a7f5d5bab0d2068ecHans Wennborg /* TODO: Warn that the 'a' conversion specifier is a C99 feature. */ 12d02deebce5f1b283101e035a7f5d5bab0d2068ecHans Wennborg scanf("%a", fp); 13d02deebce5f1b283101e035a7f5d5bab0d2068ecHans Wennborg scanf("%afoobar", fp); 14d02deebce5f1b283101e035a7f5d5bab0d2068ecHans Wennborg printf("%a", 1.0); 15d02deebce5f1b283101e035a7f5d5bab0d2068ecHans Wennborg printf("%as", 1.0); 16d02deebce5f1b283101e035a7f5d5bab0d2068ecHans Wennborg printf("%aS", 1.0); 17d02deebce5f1b283101e035a7f5d5bab0d2068ecHans Wennborg printf("%a[", 1.0); 18d02deebce5f1b283101e035a7f5d5bab0d2068ecHans Wennborg printf("%afoo", 1.0); 19d02deebce5f1b283101e035a7f5d5bab0d2068ecHans Wennborg 20d02deebce5f1b283101e035a7f5d5bab0d2068ecHans Wennborg scanf("%da", ip); 2137969b7e14d6a4dfd934ef6d3738cc90b832ec1dHans Wennborg 2237969b7e14d6a4dfd934ef6d3738cc90b832ec1dHans Wennborg /* Test argument type check for the 'a' length modifier. */ 2376517426dc8bf7734c07eefc35171a6bfdba1a2bHans Wennborg scanf("%as", fp); /* expected-warning{{format specifies type 'char **' but the argument has type 'float *'}} 24f85626453123f9691bcef13cff963f556e209c27Hans Wennborg expected-warning{{'a' length modifier is not supported by ISO C}} */ 2576517426dc8bf7734c07eefc35171a6bfdba1a2bHans Wennborg scanf("%aS", fp); /* expected-warning{{format specifies type 'wchar_t **' (aka 'int **') but the argument has type 'float *'}} 26f85626453123f9691bcef13cff963f556e209c27Hans Wennborg expected-warning{{'a' length modifier is not supported by ISO C}} 27f85626453123f9691bcef13cff963f556e209c27Hans Wennborg expected-warning{{'S' conversion specifier is not supported by ISO C}} */ 2876517426dc8bf7734c07eefc35171a6bfdba1a2bHans Wennborg scanf("%a[abc]", fp); /* expected-warning{{format specifies type 'char **' but the argument has type 'float *'}} 29f85626453123f9691bcef13cff963f556e209c27Hans Wennborg expected-warning{{'a' length modifier is not supported by ISO C}} */ 30d02deebce5f1b283101e035a7f5d5bab0d2068ecHans Wennborg} 31