diff mbox

patch to fix PR65648

Message ID CAD57uCcf_5zj=_P_ASkF34ZMVBusVbN7bEz_9aP-ir3qx7Ocdg@mail.gmail.com
State New
Headers show

Commit Message

Yvan Roux April 7, 2015, 7:28 p.m. UTC
Hi Jakub,

On 7 April 2015 at 17:51, Jakub Jelinek <jakub@redhat.com> wrote:
> On Tue, Apr 07, 2015 at 11:01:59AM -0400, Vladimir Makarov wrote:
>> 2015-04-07  Vladimir Makarov  <vmakarov@redhat.com>
>>
>>         PR target/65678
>>         * lra-remat.c (do_remat): Process input and non-input insn
>>         registers separately.
>
> Don't have a quick access to arm box right now (without waiting for it to be
> installed etc.), but using a cross-compiler I can at least reproduce
> that your patch changes also:
>
> /* PR target/65648 */
>
> int a = 0, *b = 0, c = 0;
> static int d = 0;
> short e = 1;
> static long long f = 0;
> long long *i = &f;
> unsigned char j = 0;
>
> __attribute__((noinline, noclone)) void
> foo (int x, int *y)
> {
>   asm volatile ("" : : "r" (x), "r" (y) : "memory");
> }
>
> __attribute__((noinline, noclone)) void
> bar (const char *x, long long y)
> {
>   asm volatile ("" : : "r" (x), "r" (&y) : "memory");
>   if (y != 0)
>     __builtin_abort ();
> }
>
> int
> main ()
> {
>   int k = 0;
>   b = &k;
>   j = (!a) - (c <= e);
>   *i = j;
>   foo (a, &k);
>   bar ("", f);
>   return 0;
> }
>
> so, if anybody can confirm this testcase aborts with -march=armv6-m -mthumb -Os
> before Vlad's patch and doesn't abort afterwards, perhaps just sticking
> that into gcc.c-torture/execute/pr65648.c would be sufficient.
> Or, if people don't regularly test with -march=armv6-m -mthumb combination,
> perhaps put it into gcc.c-torture/execute/pr65648.c as is and
> add another gcc.target/arm/pr65648.c testcase that will #include this one,
> and use the right dg-options / dg-skip-if or dg-require-effective-target etc.
> for it to trigger.  As the testcase uses uninitialized r3 in the wrong case,
> I wonder if the usual _start initializes r3 to some value that triggers the abort
> without the fix; if not, perhaps it needs to be in another function and the caller
> should somehow attempt to set l3 somehow (pass arguments to another function etc.)
> to a value that will trigger the abort.

validation is ongoing, but here is my attempt to add this testcase,
does it look correct (it's the first time I use that kind of include
in testsuite)

Cheers,
Yvan

Comments

Yvan Roux April 7, 2015, 8:02 p.m. UTC | #1
On 7 April 2015 at 21:33, Jakub Jelinek <jakub@redhat.com> wrote:
> On Tue, Apr 07, 2015 at 09:28:51PM +0200, Yvan Roux wrote:
>> validation is ongoing, but here is my attempt to add this testcase,
>> does it look correct (it's the first time I use that kind of include
>> in testsuite)
>
> The intent is that we have a testcase for all targets at various
> optimization levels, plus one with specific options for the particular
> target.
> If you get at least one FAIL with this patch with Vlad's patch reverted and
> no FAILs with that patch, the patch is ok for trunk with the obvious
> ChangeLog entry.

Ok I understand.

Thanks

> Thanks.
>
>         Jakub
diff mbox

Patch

diff --git a/gcc/testsuite/gcc.c-torture/execute/pr65648.c b/gcc/testsuite/gcc.c-torture/execute/pr65648.c
new file mode 100644
index 0000000..88a2fc9
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr65648.c
@@ -0,0 +1,34 @@ 
+/* PR target/65648 */
+
+int a = 0, *b = 0, c = 0;
+static int d = 0;
+short e = 1;
+static long long f = 0;
+long long *i = &f;
+unsigned char j = 0;
+
+__attribute__((noinline, noclone)) void
+foo (int x, int *y)
+{
+  asm volatile ("" : : "r" (x), "r" (y) : "memory");
+}
+
+__attribute__((noinline, noclone)) void
+bar (const char *x, long long y)
+{
+  asm volatile ("" : : "r" (x), "r" (&y) : "memory");
+  if (y != 0)
+    __builtin_abort ();
+}
+
+int
+main ()
+{
+  int k = 0;
+  b = &k;
+  j = (!a) - (c <= e);
+  *i = j;
+  foo (a, &k);
+  bar ("", f);
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/pr65648.c b/gcc/testsuite/gcc.target/arm/pr65648.c
new file mode 100644
index 0000000..215c6a9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr65648.c
@@ -0,0 +1,8 @@ 
+/* { dg-do compile } */
+/* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-march=*" } { "-march=armv6-m" } } */
+/* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" } { "" } } */
+/* { dg-options "-mthumb -Os" } */
+/* { dg-add-options arm_arch_v6m } */
+
+#include "../../gcc.c-torture/execute/pr65648.c"
+