mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-13 14:51:18 +08:00
MPX: Fix option handling.
2017-03-10 Martin Liska <mliska@suse.cz> PR target/65705 PR target/69804 * toplev.c (process_options): Enable MPX with LSAN and UBSAN. * tree-chkp.c (chkp_walk_pointer_assignments): Verify that FIELD != NULL. From-SVN: r246027
This commit is contained in:
parent
74106ead26
commit
8823ce3f54
@ -1,3 +1,11 @@
|
||||
2017-03-10 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR target/65705
|
||||
PR target/69804
|
||||
* toplev.c (process_options): Enable MPX with LSAN and UBSAN.
|
||||
* tree-chkp.c (chkp_walk_pointer_assignments): Verify that
|
||||
FIELD != NULL.
|
||||
|
||||
2017-03-10 Olivier Hainque <hainque@adacore.com>
|
||||
|
||||
* tree-switch-conversion (array_value_type): Start by resetting
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* { dg-do compile { target { ! x32 } } } */
|
||||
/* { dg-options "-fcheck-pointer-bounds -mmpx -fsanitize=bounds" } */
|
||||
/* { dg-error "-fcheck-pointer-bounds is not supported with Undefined Behavior Sanitizer" "" { target *-*-* } 0 } */
|
||||
/* { dg-error "'-fcheck-pointer-bounds' is not supported with '-fsanitize=bounds'" "" { target *-*-* } 0 } */
|
||||
|
||||
enum {} a[0];
|
||||
void fn1(int);
|
||||
|
46
gcc/toplev.c
46
gcc/toplev.c
@ -1270,31 +1270,39 @@ process_options (void)
|
||||
if (targetm.chkp_bound_mode () == VOIDmode)
|
||||
{
|
||||
error_at (UNKNOWN_LOCATION,
|
||||
"-fcheck-pointer-bounds is not supported for this target");
|
||||
"%<-fcheck-pointer-bounds%> is not supported for this "
|
||||
"target");
|
||||
flag_check_pointer_bounds = 0;
|
||||
}
|
||||
|
||||
if (flag_sanitize)
|
||||
if (flag_sanitize & SANITIZE_BOUNDS_STRICT)
|
||||
{
|
||||
if (flag_sanitize & SANITIZE_ADDRESS)
|
||||
error_at (UNKNOWN_LOCATION,
|
||||
"-fcheck-pointer-bounds is not supported with "
|
||||
"Address Sanitizer");
|
||||
error_at (UNKNOWN_LOCATION,
|
||||
"%<-fcheck-pointer-bounds%> is not supported with "
|
||||
"%<-fsanitize=bounds-strict%>");
|
||||
flag_check_pointer_bounds = 0;
|
||||
}
|
||||
else if (flag_sanitize & SANITIZE_BOUNDS)
|
||||
{
|
||||
error_at (UNKNOWN_LOCATION,
|
||||
"%<-fcheck-pointer-bounds%> is not supported with "
|
||||
"%<-fsanitize=bounds%>");
|
||||
flag_check_pointer_bounds = 0;
|
||||
}
|
||||
|
||||
if (flag_sanitize & (SANITIZE_UNDEFINED | SANITIZE_NONDEFAULT))
|
||||
error_at (UNKNOWN_LOCATION,
|
||||
"-fcheck-pointer-bounds is not supported with "
|
||||
"Undefined Behavior Sanitizer");
|
||||
if (flag_sanitize & SANITIZE_ADDRESS)
|
||||
{
|
||||
error_at (UNKNOWN_LOCATION,
|
||||
"%<-fcheck-pointer-bounds%> is not supported with "
|
||||
"Address Sanitizer");
|
||||
flag_check_pointer_bounds = 0;
|
||||
}
|
||||
|
||||
if (flag_sanitize & SANITIZE_LEAK)
|
||||
error_at (UNKNOWN_LOCATION,
|
||||
"-fcheck-pointer-bounds is not supported with "
|
||||
"Leak Sanitizer");
|
||||
|
||||
if (flag_sanitize & SANITIZE_THREAD)
|
||||
error_at (UNKNOWN_LOCATION,
|
||||
"-fcheck-pointer-bounds is not supported with "
|
||||
"Thread Sanitizer");
|
||||
if (flag_sanitize & SANITIZE_THREAD)
|
||||
{
|
||||
error_at (UNKNOWN_LOCATION,
|
||||
"%<-fcheck-pointer-bounds%> is not supported with "
|
||||
"Thread Sanitizer");
|
||||
|
||||
flag_check_pointer_bounds = 0;
|
||||
}
|
||||
|
@ -3803,7 +3803,7 @@ chkp_walk_pointer_assignments (tree lhs, tree rhs, void *arg,
|
||||
|
||||
FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (rhs), cnt, field, val)
|
||||
{
|
||||
if (chkp_type_has_pointer (TREE_TYPE (field)))
|
||||
if (field && chkp_type_has_pointer (TREE_TYPE (field)))
|
||||
{
|
||||
tree lhs_field = chkp_build_component_ref (lhs, field);
|
||||
chkp_walk_pointer_assignments (lhs_field, val, arg, handler);
|
||||
|
Loading…
x
Reference in New Issue
Block a user