diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-03-20 21:35:28 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-03-20 21:35:28 +0000 |
commit | 082d936a5b8323ac2c04558d8bca277a647831a3 (patch) | |
tree | 619bfed951fd2b4bc19d9e51389da06eed965294 /test/Sema/format-strings.c | |
parent | 7d66ebb4c2af666961640e3727e9fc7fdbce5838 (diff) |
Fix <rdar://problem/6704086> by allowing the format string checking in Sema to
allow non-literal format strings that are variables that (a) permanently bind to
a string constant and (b) whose string constants are resolvable within the same
translation unit.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67404 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Sema/format-strings.c')
-rw-r--r-- | test/Sema/format-strings.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/test/Sema/format-strings.c b/test/Sema/format-strings.c index 5007bb0fa4..9237a5970e 100644 --- a/test/Sema/format-strings.c +++ b/test/Sema/format-strings.c @@ -99,3 +99,17 @@ void __attribute__((format(printf,1,3))) myprintf(const char*, int blah, ...); void test_myprintf() { myprintf("%d", 17, 18); // okay } + +void test_constant_bindings(void) { + const char * const s1 = "hello"; + const char s2[] = "hello"; + const char *s3 = "hello"; + char * const s4 = "hello"; + extern const char s5[]; + + printf(s1); // no-warning + printf(s2); // no-warning + printf(s3); // expected-warning{{not a string literal}} + printf(s4); // expected-warning{{not a string literal}} + printf(s5); // expected-warning{{not a string literal}} +} |