diff options
author | David Malcolm <dmalcolm@redhat.com> | 2018-11-08 15:31:13 +0000 |
---|---|---|
committer | David Malcolm <dmalcolm@redhat.com> | 2018-11-08 15:31:13 +0000 |
commit | e1d77c7aa913c88fdcaf9a365a1d86b071215a99 (patch) | |
tree | 165ff5ba4d3971a53895f9ffd34e233e26a72cc2 | |
parent | b24970ab1b20f74eb71044e48cf62a8a82b91468 (diff) |
Support %f in pp_format
Numerous formatted messages from the inliner use %f, mostly as %f, but
occasionally with length modifiers.
This patch implements the simplest case of "%f" for pp_format (with no
modifier support) to make it easier to port these messages from fprintf
to dump_printf_loc.
The selftest has an assertion that %f on 1.0 is printed as "1.000000".
This comes from the host's sprintf, and I believe this is guaranteed by
POSIX: "If the precision is missing, it shall be taken as 6". If this is
an issue I can drop the selftest.
gcc/c-family/ChangeLog:
* c-format.c (gcc_dump_printf_char_table): Add entry for %f.
gcc/ChangeLog:
* pretty-print.c (pp_format): Handle %f.
(selftest::test_pp_format): Add test of %f.
* pretty-print.h (pp_double): New macro.
gcc/testsuite/ChangeLog:
* gcc.dg/format/gcc_diag-10.c: Add coverage for %f.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@265919 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c-family/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/c-family/c-format.c | 3 | ||||
-rw-r--r-- | gcc/pretty-print.c | 6 | ||||
-rw-r--r-- | gcc/pretty-print.h | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/format/gcc_diag-10.c | 2 |
7 files changed, 26 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0ebab865cee..bc91ee298d8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2018-11-08 David Malcolm <dmalcolm@redhat.com> + * pretty-print.c (pp_format): Handle %f. + (selftest::test_pp_format): Add test of %f. + * pretty-print.h (pp_double): New macro. + +2018-11-08 David Malcolm <dmalcolm@redhat.com> + * dump-context.h (ASSERT_IS_CGRAPH_NODE): New macro. * dumpfile.c (make_item_for_dump_cgraph_node): Move to before... (dump_pretty_printer::decode_format): Implement "%C" for diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 11978713ee2..ac2353978b1 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,5 +1,9 @@ 2018-11-08 David Malcolm <dmalcolm@redhat.com> + * c-format.c (gcc_dump_printf_char_table): Add entry for %f. + +2018-11-08 David Malcolm <dmalcolm@redhat.com> + * c-format.c (local_cgraph_node_ptr_node): New variable. (gcc_dump_printf_char_table): Add entry for %C. (get_pointer_to_named_type): New function, taken from the handling diff --git a/gcc/c-family/c-format.c b/gcc/c-family/c-format.c index c8ae6c40275..6613092c6fd 100644 --- a/gcc/c-family/c-format.c +++ b/gcc/c-family/c-format.c @@ -810,6 +810,9 @@ static const format_char_info gcc_dump_printf_char_table[] = /* T requires a "tree" at runtime. */ { "T", 1, STD_C89, { T89_T, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "", "\"", NULL }, + /* %f requires a "double"; it doesn't support modifiers. */ + { "f", 0, STD_C89, { T89_D, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "", "\"", NULL }, + { NULL, 0, STD_C89, NOLENGTHS, NULL, NULL, NULL } }; diff --git a/gcc/pretty-print.c b/gcc/pretty-print.c index 7dd900b3bbf..19ef75bdfcf 100644 --- a/gcc/pretty-print.c +++ b/gcc/pretty-print.c @@ -977,6 +977,7 @@ pp_indent (pretty_printer *pp) %ld, %li, %lo, %lu, %lx: long versions of the above. %lld, %lli, %llo, %llu, %llx: long long versions. %wd, %wi, %wo, %wu, %wx: HOST_WIDE_INT versions. + %f: double %c: character. %s: string. %p: pointer (printed in a host-dependent manner). @@ -1307,6 +1308,10 @@ pp_format (pretty_printer *pp, text_info *text) (pp, *text->args_ptr, precision, unsigned, "u"); break; + case 'f': + pp_double (pp, va_arg (*text->args_ptr, double)); + break; + case 'Z': { int *v = va_arg (*text->args_ptr, int *); @@ -2160,6 +2165,7 @@ test_pp_format () ASSERT_PP_FORMAT_2 ("17 12345678", "%wo %x", (HOST_WIDE_INT)15, 0x12345678); ASSERT_PP_FORMAT_2 ("0xcafebabe 12345678", "%wx %x", (HOST_WIDE_INT)0xcafebabe, 0x12345678); + ASSERT_PP_FORMAT_2 ("1.000000 12345678", "%f %x", 1.0, 0x12345678); ASSERT_PP_FORMAT_2 ("A 12345678", "%c %x", 'A', 0x12345678); ASSERT_PP_FORMAT_2 ("hello world 12345678", "%s %x", "hello world", 0x12345678); diff --git a/gcc/pretty-print.h b/gcc/pretty-print.h index 2decc516b1f..a6e60f110f0 100644 --- a/gcc/pretty-print.h +++ b/gcc/pretty-print.h @@ -330,6 +330,7 @@ pp_get_prefix (const pretty_printer *pp) { return pp->prefix; } pp_string (PP, pp_buffer (PP)->digit_buffer); \ } \ while (0) +#define pp_double(PP, F) pp_scalar (PP, "%f", F) #define pp_pointer(PP, P) pp_scalar (PP, "%p", P) #define pp_identifier(PP, ID) pp_string (PP, (pp_translate_identifiers (PP) \ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1799cb58ffb..f4fd981d98c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2018-11-08 David Malcolm <dmalcolm@redhat.com> + * gcc.dg/format/gcc_diag-10.c: Add coverage for %f. + +2018-11-08 David Malcolm <dmalcolm@redhat.com> + * gcc.dg/format/gcc_diag-10.c (cgraph_node): New typedef. (test_dump): Add testing of %C. diff --git a/gcc/testsuite/gcc.dg/format/gcc_diag-10.c b/gcc/testsuite/gcc.dg/format/gcc_diag-10.c index 97a1993dc8f..ba2629b3ecb 100644 --- a/gcc/testsuite/gcc.dg/format/gcc_diag-10.c +++ b/gcc/testsuite/gcc.dg/format/gcc_diag-10.c @@ -183,4 +183,6 @@ void test_dump (tree t, gimple *stmt, cgraph_node *node) dump ("%T", t); dump ("%G", stmt); dump ("%C", node); + dump ("%f", 1.0); + dump ("%4.2f", 1.0); /* { dg-warning "format" } */ } |