diff options
author | Ted Kremenek <kremenek@apple.com> | 2007-12-17 19:03:13 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2007-12-17 19:03:13 +0000 |
commit | 4a33646560c4faf8fb82a681360eb2dc0573d558 (patch) | |
tree | 7bffe6120ece1ff1e67399232b36df4614509e49 /test/Sema/format-strings.c | |
parent | ba8326517548d1d7773c4040aef4a4d91bb99df0 (diff) |
Modified format-string checking to not emit a warning when all of the
following hold:
(1) A vprintf-like function is called that takes the argument list via a
via_list argument.
(2) The format string is a non-literal that is the parameter value of
the enclosing function, e.g:
void logmessage(const char *fmt,...) {
va_list ap;
va_start(ap,fmt);
fprintf(fmt,ap); // Do not emit a warning.
}
In the future this special case will be enhanced to consult the "format"
attribute attached to a function declaration instead of just allowing a blank
check for all function parameters to be used as format strings to vprintf-like
functions. This will happen when more support for attributes becomes
available.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45114 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Sema/format-strings.c')
-rw-r--r-- | test/Sema/format-strings.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/test/Sema/format-strings.c b/test/Sema/format-strings.c index e5bbd70bfd..c1e690a3b8 100644 --- a/test/Sema/format-strings.c +++ b/test/Sema/format-strings.c @@ -3,6 +3,8 @@ #include <stdio.h> #include <stdarg.h> +char * global_fmt; + void check_string_literal( FILE* fp, const char* s, char *buf, ... ) { char * b; @@ -10,15 +12,16 @@ void check_string_literal( FILE* fp, const char* s, char *buf, ... ) { va_start(ap,buf); printf(s); // expected-warning {{format string is not a string literal}} - vprintf(s,ap); // expected-warning {{format string is not a string liter}} + vprintf(s,ap); // // no-warning fprintf(fp,s); // expected-warning {{format string is not a string literal}} - vfprintf(fp,s,ap); // expected-warning {{format string is not a string lit}} + vfprintf(fp,s,ap); // no-warning asprintf(&b,s); // expected-warning {{format string is not a string lit}} - vasprintf(&b,s,ap); // expected-warning {{format string is not a string lit}} + vasprintf(&b,s,ap); // no-warning sprintf(buf,s); // expected-warning {{format string is not a string literal}} snprintf(buf,2,s); // expected-warning {{format string is not a string lit}} - vsprintf(buf,s,ap); // expected-warning {{format string is not a string lit}} - vsnprintf(buf,2,s,ap); // expected-warning {{mat string is not a string lit}} + vsprintf(buf,s,ap); // no-warning + vsnprintf(buf,2,s,ap); // no-warning + vsnprintf(buf,2,global_fmt,ap); // expected-warning {{format string is not a string literal}} } void check_writeback_specifier() |