Do UBSAN sanitization just when current_function_decl != NULL_TREE (PR sanitize/81530).
2017-07-31 Martin Liska <mliska@suse.cz> PR sanitize/81530 * cp-gimplify.c (cp_genericize): Guard condition with flag_sanitize_p also with current_function_decl non-null equality. * cp-ubsan.c (cp_ubsan_instrument_vptr_p): Likewise. * decl.c (compute_array_index_type): Likewise. * init.c (finish_length_check): Likewise. * typeck.c (cp_build_binary_op): Likewise. 2017-07-31 Martin Liska <mliska@suse.cz> PR sanitize/81530 * c-convert.c (convert): Guard condition with flag_sanitize_p also with current_function_decl non-null equality. * c-decl.c (grokdeclarator): Likewise. * c-typeck.c (build_binary_op): Likewise. 2017-07-31 Martin Liska <mliska@suse.cz> PR sanitize/81530 * convert.c (convert_to_integer_1): Guard condition with flag_sanitize_p also with current_function_decl non-null equality. 2017-07-31 Martin Liska <mliska@suse.cz> PR sanitize/81530 * c-ubsan.c (ubsan_maybe_instrument_array_ref): Guard condition with flag_sanitize_p also with current_function_decl non-null equality. (ubsan_maybe_instrument_reference_or_call): Likewise. 2017-07-31 Martin Liska <mliska@suse.cz> PR sanitize/81530 * g++.dg/ubsan/pr81530.C: New test. From-SVN: r250730
This commit is contained in:
parent
066bbc5721
commit
f34ebeb25e
16 changed files with 62 additions and 6 deletions
|
@ -1,3 +1,9 @@
|
|||
2017-07-31 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR sanitize/81530
|
||||
* convert.c (convert_to_integer_1): Guard condition with flag_sanitize_p
|
||||
also with current_function_decl non-null equality.
|
||||
|
||||
2017-07-31 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR sanitizer/81604
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
2017-07-31 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR sanitize/81530
|
||||
* c-ubsan.c (ubsan_maybe_instrument_array_ref):
|
||||
Guard condition with flag_sanitize_p also with current_function_decl
|
||||
non-null equality.
|
||||
(ubsan_maybe_instrument_reference_or_call): Likewise.
|
||||
|
||||
2017-07-30 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
* c-format.c (asm_fprintf_char_table): Add 'z' to format_chars.
|
||||
|
|
|
@ -373,7 +373,8 @@ void
|
|||
ubsan_maybe_instrument_array_ref (tree *expr_p, bool ignore_off_by_one)
|
||||
{
|
||||
if (!ubsan_array_ref_instrumented_p (*expr_p)
|
||||
&& sanitize_flags_p (SANITIZE_BOUNDS | SANITIZE_BOUNDS_STRICT))
|
||||
&& sanitize_flags_p (SANITIZE_BOUNDS | SANITIZE_BOUNDS_STRICT)
|
||||
&& current_function_decl != NULL_TREE)
|
||||
{
|
||||
tree op0 = TREE_OPERAND (*expr_p, 0);
|
||||
tree op1 = TREE_OPERAND (*expr_p, 1);
|
||||
|
@ -393,7 +394,8 @@ static tree
|
|||
ubsan_maybe_instrument_reference_or_call (location_t loc, tree op, tree ptype,
|
||||
enum ubsan_null_ckind ckind)
|
||||
{
|
||||
if (!sanitize_flags_p (SANITIZE_ALIGNMENT | SANITIZE_NULL))
|
||||
if (!sanitize_flags_p (SANITIZE_ALIGNMENT | SANITIZE_NULL)
|
||||
|| current_function_decl == NULL_TREE)
|
||||
return NULL_TREE;
|
||||
|
||||
tree type = TREE_TYPE (ptype);
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
2017-07-31 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR sanitize/81530
|
||||
* c-convert.c (convert): Guard condition with flag_sanitize_p
|
||||
also with current_function_decl non-null equality.
|
||||
* c-decl.c (grokdeclarator): Likewise.
|
||||
* c-typeck.c (build_binary_op): Likewise.
|
||||
|
||||
2017-07-25 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
* c-decl.c (grokfield): Remove local variable.
|
||||
|
|
|
@ -108,6 +108,7 @@ convert (tree type, tree expr)
|
|||
case INTEGER_TYPE:
|
||||
case ENUMERAL_TYPE:
|
||||
if (sanitize_flags_p (SANITIZE_FLOAT_CAST)
|
||||
&& current_function_decl != NULL_TREE
|
||||
&& TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
|
||||
&& COMPLETE_TYPE_P (type))
|
||||
{
|
||||
|
|
|
@ -6052,6 +6052,7 @@ grokdeclarator (const struct c_declarator *declarator,
|
|||
this_size_varies = size_varies = true;
|
||||
warn_variable_length_array (name, size);
|
||||
if (sanitize_flags_p (SANITIZE_VLA)
|
||||
&& current_function_decl != NULL_TREE
|
||||
&& decl_context == NORMAL)
|
||||
{
|
||||
/* Evaluate the array size only once. */
|
||||
|
|
|
@ -11838,6 +11838,7 @@ build_binary_op (location_t location, enum tree_code code,
|
|||
|
||||
if (sanitize_flags_p ((SANITIZE_SHIFT
|
||||
| SANITIZE_DIVIDE | SANITIZE_FLOAT_DIVIDE))
|
||||
&& current_function_decl != NULL_TREE
|
||||
&& (doing_div_or_mod || doing_shift)
|
||||
&& !require_constant_value)
|
||||
{
|
||||
|
|
|
@ -938,7 +938,8 @@ convert_to_integer_1 (tree type, tree expr, bool dofold)
|
|||
return build1 (CONVERT_EXPR, type, expr);
|
||||
|
||||
case REAL_TYPE:
|
||||
if (sanitize_flags_p (SANITIZE_FLOAT_CAST))
|
||||
if (sanitize_flags_p (SANITIZE_FLOAT_CAST)
|
||||
&& current_function_decl != NULL_TREE)
|
||||
{
|
||||
expr = save_expr (expr);
|
||||
tree check = ubsan_instrument_float_cast (loc, type, expr);
|
||||
|
|
|
@ -1,3 +1,13 @@
|
|||
2017-07-31 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR sanitize/81530
|
||||
* cp-gimplify.c (cp_genericize): Guard condition with flag_sanitize_p
|
||||
also with current_function_decl non-null equality.
|
||||
* cp-ubsan.c (cp_ubsan_instrument_vptr_p): Likewise.
|
||||
* decl.c (compute_array_index_type): Likewise.
|
||||
* init.c (finish_length_check): Likewise.
|
||||
* typeck.c (cp_build_binary_op): Likewise.
|
||||
|
||||
2017-07-29 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* cp-objcp-common.c (cp_decl_dwarf_attribute): Handle
|
||||
|
|
|
@ -1668,7 +1668,8 @@ cp_genericize (tree fndecl)
|
|||
walk_tree's hash functionality. */
|
||||
cp_genericize_tree (&DECL_SAVED_TREE (fndecl), true);
|
||||
|
||||
if (sanitize_flags_p (SANITIZE_RETURN))
|
||||
if (sanitize_flags_p (SANITIZE_RETURN)
|
||||
&& current_function_decl != NULL_TREE)
|
||||
cp_ubsan_maybe_instrument_return (fndecl);
|
||||
|
||||
/* Do everything else. */
|
||||
|
|
|
@ -36,6 +36,9 @@ cp_ubsan_instrument_vptr_p (tree type)
|
|||
if (!sanitize_flags_p (SANITIZE_VPTR))
|
||||
return false;
|
||||
|
||||
if (current_function_decl == NULL_TREE)
|
||||
return false;
|
||||
|
||||
if (type)
|
||||
{
|
||||
type = TYPE_MAIN_VARIANT (type);
|
||||
|
|
|
@ -9482,7 +9482,8 @@ compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
|
|||
|
||||
stabilize_vla_size (itype);
|
||||
|
||||
if (sanitize_flags_p (SANITIZE_VLA))
|
||||
if (sanitize_flags_p (SANITIZE_VLA)
|
||||
&& current_function_decl != NULL_TREE)
|
||||
{
|
||||
/* We have to add 1 -- in the ubsan routine we generate
|
||||
LE_EXPR rather than LT_EXPR. */
|
||||
|
|
|
@ -3910,7 +3910,8 @@ finish_length_check (tree atype, tree iterator, tree obase, unsigned n)
|
|||
}
|
||||
/* Don't check an array new when -fno-exceptions. */
|
||||
}
|
||||
else if (sanitize_flags_p (SANITIZE_BOUNDS))
|
||||
else if (sanitize_flags_p (SANITIZE_BOUNDS)
|
||||
&& current_function_decl != NULL_TREE)
|
||||
{
|
||||
/* Make sure the last element of the initializer is in bounds. */
|
||||
finish_expr_stmt
|
||||
|
|
|
@ -5256,6 +5256,7 @@ cp_build_binary_op (location_t location,
|
|||
|
||||
if (sanitize_flags_p ((SANITIZE_SHIFT
|
||||
| SANITIZE_DIVIDE | SANITIZE_FLOAT_DIVIDE))
|
||||
&& current_function_decl != NULL_TREE
|
||||
&& !processing_template_decl
|
||||
&& (doing_div_or_mod || doing_shift))
|
||||
{
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2017-07-31 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR sanitize/81530
|
||||
* g++.dg/ubsan/pr81530.C: New test.
|
||||
|
||||
2017-07-31 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR sanitizer/81604
|
||||
|
|
6
gcc/testsuite/g++.dg/ubsan/pr81530.C
Normal file
6
gcc/testsuite/g++.dg/ubsan/pr81530.C
Normal file
|
@ -0,0 +1,6 @@
|
|||
/* PR sanitizer/81530 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-fsanitize=undefined" } */
|
||||
|
||||
int a[(long) 4e20]; /* { dg-error "overflow in constant expression" } */
|
||||
/* { dg-error "size of array .a. is too large" "" { target *-*-* } .-1 } */
|
Loading…
Add table
Reference in a new issue