diff options
author | Martin Sebor <msebor@redhat.com> | 2019-11-22 16:47:22 +0000 |
---|---|---|
committer | Martin Sebor <msebor@gcc.gnu.org> | 2019-11-22 09:47:22 -0700 |
commit | b5338fb359ea3480d6ed37bbc52fe2df49b82fb9 (patch) | |
tree | 2216f90a2e8eee2cdeb3d613c5d53dc9e791f4a9 /gcc/builtins.h | |
parent | 86b0eb81837f4912d3f10bcfad35086cc54a1841 (diff) | |
download | gcc-b5338fb359ea3480d6ed37bbc52fe2df49b82fb9.zip gcc-b5338fb359ea3480d6ed37bbc52fe2df49b82fb9.tar.gz gcc-b5338fb359ea3480d6ed37bbc52fe2df49b82fb9.tar.bz2 |
PR middle-end/88226 - missing warning on fprintf, fputs, and puts with an unterminated array
gcc/ChangeLog:
PR middle-end/88226
* builtins.c (check_nul_terminated_array): New function.
(fold_builtin_0): Remove declaration.
(fold_builtin_1): Same.
(fold_builtin_2): Same.
(fold_builtin_3): Same.
(fold_builtin_strpbrk): Add argument.
(fold_builtin_strspn): Same.
(fold_builtin_strcspn): Same.
(expand_builtin_strcat): Call it. Remove unused argument.
(expand_builtin_stpncpy): Same.
(expand_builtin_strncat): Same.
(expand_builtin_strncpy): Same. Adjust indentation.
(expand_builtin_strcmp): Same.
(expand_builtin_strncmp): Same.
(expand_builtin_fork_or_exec): Same.
(expand_builtin): Handle more built-ins.
(fold_builtin_2): Add argument.
(fold_builtin_n): Make static. Add argument.
(fold_call_expr): Pass new argument to fold_builtin_n and fold_builtin_2.
(fold_builtin_call_array): Pass new argument to fold_builtin_n.
(fold_builtin_strpbrk): Add argument. Call check_nul_terminated_array.
(fold_call_stmt): Pass new argument to fold_builtin_n.
* builtins.h: Correct a comment.
* gimple-fold.c (gimple_fold_builtin_strchr): Call
check_nul_terminated_array.
* tree-ssa-strlen.c (handle_builtin_strlen): Call
check_nul_terminated_array.
(handle_builtin_strchr): Same.
(handle_builtin_string_cmp): Same.
gcc/testsuite/ChangeLog:
PR middle-end/88226
* gcc.dg/Wstringop-overflow-22.c: New test.
* gcc.dg/tree-ssa/builtin-fprintf-warn-1.c: Remove xfails.
From-SVN: r278623
Diffstat (limited to 'gcc/builtins.h')
-rw-r--r-- | gcc/builtins.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/builtins.h b/gcc/builtins.h index 1ad82e8..d9e27ca 100644 --- a/gcc/builtins.h +++ b/gcc/builtins.h @@ -91,7 +91,7 @@ struct c_strlen_data tree minlen; tree maxlen; tree maxbound; - /* When non-null, NONSTR refers to the declaration known to store + /* When non-null, DECL refers to the declaration known to store an unterminated constant character array, as in: const char s[] = { 'a', 'b', 'c' }; It is used to diagnose uses of such arrays in functions such as @@ -125,7 +125,6 @@ extern tree fold_builtin_expect (location_t, tree, tree, tree, tree); extern bool avoid_folding_inline_builtin (tree); extern tree fold_call_expr (location_t, tree, bool); extern tree fold_builtin_call_array (location_t, tree, tree, int, tree *); -extern tree fold_builtin_n (location_t, tree, tree *, int, bool); extern bool validate_gimple_arglist (const gcall *, ...); extern rtx default_expand_builtin (tree, rtx, rtx, machine_mode, int); extern bool fold_builtin_next_arg (tree, bool); @@ -148,6 +147,7 @@ extern bool target_char_cst_p (tree t, char *p); extern internal_fn associated_internal_fn (tree); extern internal_fn replacement_internal_fn (gcall *); +bool check_nul_terminated_array (tree, tree, tree = NULL_TREE); extern void warn_string_no_nul (location_t, const char *, tree, tree); extern tree unterminated_array (tree, tree * = NULL, bool * = NULL); extern bool builtin_with_linkage_p (tree); |