From 04b391c164bca9a8a332d5a5b8e3ee8cf86224b9 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Sun, 15 Apr 2012 13:07:30 -0400 Subject: [PATCH] re PR c++/52818 (printf format %lf is erroneously rejected by C++11) PR c++/52818 * c-format.c (CPLUSPLUS_STD_VER): C++11 inherits from C99. (C_STD_NAME): Distinguish between C++98 and C++11. From-SVN: r186468 --- gcc/c-family/ChangeLog | 6 ++++++ gcc/c-family/c-format.c | 5 +++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/warn/format8.C | 7 +++++++ 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/warn/format8.C diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 121d94a11a3d..98e496a9034b 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2012-04-15 Jason Merrill + + PR c++/52818 + * c-format.c (CPLUSPLUS_STD_VER): C++11 inherits from C99. + (C_STD_NAME): Distinguish between C++98 and C++11. + 2012-04-11 Eric Botcazou PR target/52624 diff --git a/gcc/c-family/c-format.c b/gcc/c-family/c-format.c index 9fabc399565a..b9674925204a 100644 --- a/gcc/c-family/c-format.c +++ b/gcc/c-family/c-format.c @@ -334,7 +334,7 @@ decode_format_attr (tree args, function_format_info *info, int validated_p) /* The C standard version C++ is treated as equivalent to or inheriting from, for the purpose of format features supported. */ -#define CPLUSPLUS_STD_VER STD_C94 +#define CPLUSPLUS_STD_VER (cxx_dialect < cxx11 ? STD_C94 : STD_C99) /* The C standard version we are checking formats against when pedantic. */ #define C_STD_VER ((int) (c_dialect_cxx () \ ? CPLUSPLUS_STD_VER \ @@ -345,7 +345,8 @@ decode_format_attr (tree args, function_format_info *info, int validated_p) pedantic. FEATURE_VER is the version in which the feature warned out appeared, which is higher than C_STD_VER. */ #define C_STD_NAME(FEATURE_VER) (c_dialect_cxx () \ - ? "ISO C++" \ + ? (cxx_dialect < cxx11 ? "ISO C++98" \ + : "ISO C++11") \ : ((FEATURE_VER) == STD_EXT \ ? "ISO C" \ : "ISO C90")) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1d3e820c2a7c..83af0658f009 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-04-15 Jason Merrill + + PR c++/52818 + * g++.dg/warn/format8.C: New. + 2012-04-15 Janus Weil PR fortran/51082 diff --git a/gcc/testsuite/g++.dg/warn/format8.C b/gcc/testsuite/g++.dg/warn/format8.C new file mode 100644 index 000000000000..ffceb797a7dc --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/format8.C @@ -0,0 +1,7 @@ +// PR c++/52818 +// { dg-options "-pedantic-errors -Wformat" } + +extern "C" int printf (const char *, ...); +void f() { + printf("%lf", 0.0); // { dg-warning "%lf" "" { target c++98 } } +}