diff options
author | Jason Merrill <jason@redhat.com> | 2015-01-21 15:15:27 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2015-01-21 15:15:27 -0500 |
commit | 6875457f349eebb3d13d780e909b131bfff87e16 (patch) | |
tree | 334f6df3b4d1b74ca05e70878a04ce65b928fe88 | |
parent | 4195393b3ce259c11e0fb7ea9985ca4357b37e1a (diff) | |
download | gcc-6875457f349eebb3d13d780e909b131bfff87e16.zip gcc-6875457f349eebb3d13d780e909b131bfff87e16.tar.gz gcc-6875457f349eebb3d13d780e909b131bfff87e16.tar.bz2 |
re PR c++/64629 (-Wformat-security warns with const char *const vars)
PR c++/64629
* c-format.c (check_format_arg): Call decl_constant_value.
From-SVN: r219964
-rw-r--r-- | gcc/c-family/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/c-family/c-format.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Wformat-1.C | 10 |
3 files changed, 22 insertions, 0 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index df56b31..3b9a3d4 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,8 @@ +2015-01-21 Jason Merrill <jason@redhat.com> + + PR c++/64629 + * c-format.c (check_format_arg): Call decl_constant_value. + 2015-01-19 Martin Liska <mliska@suse.cz> * c-common.c (handle_noicf_attribute): New function. diff --git a/gcc/c-family/c-format.c b/gcc/c-family/c-format.c index e47c190..faaca09 100644 --- a/gcc/c-family/c-format.c +++ b/gcc/c-family/c-format.c @@ -1443,6 +1443,13 @@ check_format_arg (void *ctx, tree format_tree, tree array_init; alloc_pool fwt_pool; + if (TREE_CODE (format_tree) == VAR_DECL) + { + /* Pull out a constant value if the front end didn't. */ + format_tree = decl_constant_value (format_tree); + STRIP_NOPS (format_tree); + } + if (integer_zerop (format_tree)) { /* Skip to first argument to check, so we can see if this format diff --git a/gcc/testsuite/g++.dg/warn/Wformat-1.C b/gcc/testsuite/g++.dg/warn/Wformat-1.C new file mode 100644 index 0000000..6094a9c --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wformat-1.C @@ -0,0 +1,10 @@ +// PR c++/64629 +// { dg-options "-Wformat -Wformat-security" } + +extern void bar (int, const char *, ...) __attribute__((format (printf, 2, 3))); +void +foo (void) +{ + const char *const msg = "abc"; + bar (1, msg); +} |