From 663507a0231a44c3f0441e75c468cb05e8ae0418 Mon Sep 17 00:00:00 2001 From: marxin Date: Mon, 20 Mar 2017 10:04:06 +0000 Subject: [PATCH 15/19] Backport r246275 gcc/ChangeLog: 2017-03-20 Martin Liska PR target/79769 PR target/79770 * tree-chkp.c (chkp_find_bounds_1): Handle REAL_CST, COMPLEX_CST and VECTOR_CST. gcc/testsuite/ChangeLog: 2017-03-20 Martin Liska PR target/79769 PR target/79770 * g++.dg/pr79769.C: New test. * gcc.target/i386/mpx/pr79770.c: New test. --- gcc/testsuite/g++.dg/pr79769.C | 4 ++++ gcc/testsuite/gcc.target/i386/mpx/pr79770.c | 19 +++++++++++++++++++ gcc/tree-chkp.c | 2 ++ 3 files changed, 25 insertions(+) create mode 100644 gcc/testsuite/g++.dg/pr79769.C create mode 100644 gcc/testsuite/gcc.target/i386/mpx/pr79770.c diff --git a/gcc/testsuite/g++.dg/pr79769.C b/gcc/testsuite/g++.dg/pr79769.C new file mode 100644 index 00000000000..c3186877f60 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr79769.C @@ -0,0 +1,4 @@ +/* { dg-do compile { target { { i?86-*-* x86_64-*-* } && { ! x32 } } } } */ +/* { dg-options "-fcheck-pointer-bounds -mmpx -mabi=ms" } */ + +void a (_Complex) { a (3); } diff --git a/gcc/testsuite/gcc.target/i386/mpx/pr79770.c b/gcc/testsuite/gcc.target/i386/mpx/pr79770.c new file mode 100644 index 00000000000..0890fcc7bf1 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/mpx/pr79770.c @@ -0,0 +1,19 @@ +/* { dg-do compile { target lp64 } } */ +/* { dg-options "-fcheck-pointer-bounds -mmpx -mabi=ms -Wno-psabi" } */ + +typedef unsigned U __attribute__ ((vector_size (64))); +typedef unsigned __int128 V __attribute__ ((vector_size (64))); + +static inline V +bar (U u, U x, V v) +{ + v = (V)(U) { 0, ~0 }; + v[x[0]] <<= u[-63]; + return v; +} + +V +foo (U u) +{ + return bar (u, (U) {}, (V) {}); +} diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c index 9ab47b8adaf..c9c4b4fc8e0 100644 --- a/gcc/tree-chkp.c +++ b/gcc/tree-chkp.c @@ -3662,6 +3662,8 @@ chkp_find_bounds_1 (tree ptr, tree ptr_src, gimple_stmt_iterator *iter) break; case INTEGER_CST: + case COMPLEX_CST: + case VECTOR_CST: if (integer_zerop (ptr_src)) bounds = chkp_get_none_bounds (); else -- 2.12.0