aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-pretty-print.c
diff options
context:
space:
mode:
authormsebor <msebor@138bc75d-0d04-0410-961f-82ee72b054a4>2017-08-14 18:35:13 +0000
committermsebor <msebor@138bc75d-0d04-0410-961f-82ee72b054a4>2017-08-14 18:35:13 +0000
commitc8616982bf80f59b0fc485b5993a0adf7821ae94 (patch)
treed3cc608c3e0c1104bf054ef4e742c6af1439c24f /gcc/gimple-pretty-print.c
parentd5e69e3759d3925e04ab02027a0074f037851b81 (diff)
PR c/81117 - Improve buffer overflow checking in strncpy - part 1
gcc/ChangeLog: PR c/81117 * tree-diagnostic.c (default_tree_printer): Handle %G. * gimple-pretty-print.h (percent_G_format): Declare new function. * gimple-pretty-print.c (percent_G_format): Define. * tree-pretty-print.c (percent_K_format): Add argument. gcc/c/ChangeLog: PR c/81117 * c-objc-common.c (c_objc_common_init): Handle 'G'. gcc/c-family/ChangeLog: PR c/81117 * c-format.h (T89_G): New macro. * c-format.c (local_gcall_ptr_node): New variable. (init_dynamic_diag_info): Initialize it. gcc/cp/ChangeLog: PR c/81117 * error.c (cp_printer): Handle 'G'. gcc/testsuite/ChangeLog: PR c/81117 * gcc.dg/format/gcc_diag-10.c: Exercise %G. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@251098 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/gimple-pretty-print.c')
-rw-r--r--gcc/gimple-pretty-print.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/gcc/gimple-pretty-print.c b/gcc/gimple-pretty-print.c
index 5727d14777a..ed8e51c1c46 100644
--- a/gcc/gimple-pretty-print.c
+++ b/gcc/gimple-pretty-print.c
@@ -2911,3 +2911,22 @@ gimple_dump_bb_for_graph (pretty_printer *pp, basic_block bb)
pp_write_text_as_dot_label_to_stream (pp, /*for_record=*/true);
}
+
+/* Handle the %G format for TEXT. Same as %K in handle_K_format in
+ tree-pretty-print.c but with a Gimple call statement as an argument. */
+
+void
+percent_G_format (text_info *text)
+{
+ gcall *stmt = va_arg (*text->args_ptr, gcall*);
+
+ /* Build a call expression from the Gimple call statement and
+ pass it to the K formatter that knows how to format it. */
+ tree exp = build_vl_exp (CALL_EXPR, gimple_call_num_args (stmt) + 3);
+ CALL_EXPR_FN (exp) = gimple_call_fn (stmt);
+ TREE_TYPE (exp) = gimple_call_return_type (stmt);
+ CALL_EXPR_STATIC_CHAIN (exp) = gimple_call_chain (stmt);
+ SET_EXPR_LOCATION (exp, gimple_location (stmt));
+
+ percent_K_format (text, exp);
+}