Patchwork Add PR55430 testcase (PR middle-end/55430)

login
register
mail settings
Submitter Jakub Jelinek
Date Nov. 23, 2012, 2:44 p.m.
Message ID <20121123144432.GZ2315@tucnak.redhat.com>
Download mbox | patch
Permalink /patch/201335/
State New
Headers show

Comments

Jakub Jelinek - Nov. 23, 2012, 2:44 p.m.
Hi!

On Thu, Nov 22, 2012 at 08:29:36PM -0500, Vladimir Makarov wrote:
>   The following patch fixes
> 
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55430
> 
>   The patch was successfully bootstrapped and tested on x86/x86-64.
> 
>   Committed as rev. 193742.
> 
> 2012-11-22  Vladimir Makarov  <vmakarov@redhat.com>
> 
>         PR middle-end/55430
>         * lra.c: Move #include "hard-reg-set.h" before #include "rtl.h".
>         (new_insn_reg): Update biggest_mode.
>         (collect_non_operand_hard_regs): Check eliminable regs too.
>         (initialize_lra_reg_info_element): Initialize biggest_mode.
>         (add_regs_to_insn_regno_info): Ignore non-allocatable
>         non-eliminable hard regs.
>         (lra.c): Move setting lra_no_alloc_regs before
>         init_insn_recog_data.
>         * lra-constraints.c (simplify_operand_subreg): Add a comment.
>         (lra_constraints): Ignore equivalent memory of
>         regs occuring in paradoxical subregs.
>         * lra-lives.c (lra_create_live_ranges): Add a comment.

You haven't committed a testcase for this.  I've adjusted my testcase
to match what e.g. gcc.dg/20030711-1.c testcase does (to make sure it
will work even on weirdo effective target mmap targets).  Ok for trunk?

And thanks for the bugfix.

2012-11-23  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/55430
	* gcc.dg/pr55430.c: New test.


	Jakub
Vladimir Makarov - Nov. 23, 2012, 3:05 p.m.
On 12-11-23 9:44 AM, Jakub Jelinek wrote:
> Hi!
>
> On Thu, Nov 22, 2012 at 08:29:36PM -0500, Vladimir Makarov wrote:
>>    The following patch fixes
>>
>> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55430
>>
>>    The patch was successfully bootstrapped and tested on x86/x86-64.
>>
>>    Committed as rev. 193742.
>>
>> 2012-11-22  Vladimir Makarov  <vmakarov@redhat.com>
>>
>>          PR middle-end/55430
>>          * lra.c: Move #include "hard-reg-set.h" before #include "rtl.h".
>>          (new_insn_reg): Update biggest_mode.
>>          (collect_non_operand_hard_regs): Check eliminable regs too.
>>          (initialize_lra_reg_info_element): Initialize biggest_mode.
>>          (add_regs_to_insn_regno_info): Ignore non-allocatable
>>          non-eliminable hard regs.
>>          (lra.c): Move setting lra_no_alloc_regs before
>>          init_insn_recog_data.
>>          * lra-constraints.c (simplify_operand_subreg): Add a comment.
>>          (lra_constraints): Ignore equivalent memory of
>>          regs occuring in paradoxical subregs.
>>          * lra-lives.c (lra_create_live_ranges): Add a comment.
> You haven't committed a testcase for this.  I've adjusted my testcase
> to match what e.g. gcc.dg/20030711-1.c testcase does (to make sure it
> will work even on weirdo effective target mmap targets).  Ok for trunk?
Sure, Jakub.  You  are more experienced in adding tests than me.

Patch

--- gcc/testsuite/gcc.dg/pr55430.c.jj	2012-11-23 15:40:04.724649106 +0100
+++ gcc/testsuite/gcc.dg/pr55430.c	2012-11-23 15:27:15.000000000 +0100
@@ -0,0 +1,43 @@ 
+/* PR middle-end/55430 */
+/* { dg-do run { target mmap } } */
+/* { dg-options "-O2" } */
+
+#include <stddef.h>
+#include <stdio.h>
+#include <sys/mman.h>
+#ifndef MAP_ANONYMOUS
+#define MAP_ANONYMOUS MAP_ANON
+#endif
+#ifndef MAP_ANON
+#define MAP_ANON 0
+#endif
+#include <stdlib.h>
+
+struct S
+{
+  unsigned int s1 : 8;
+  unsigned int s2 : 2;
+};
+
+__attribute__((noinline, noclone)) int
+foo (int x, int y, struct S *z, unsigned int w)
+{
+  if (z[y].s2 == x && z[y].s1 == w)
+    return 1;
+  return 0;
+}
+
+int
+main ()
+{
+  char *p = mmap (NULL, 131072, PROT_READ | PROT_WRITE,
+		  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+  if (p == MAP_FAILED)
+    return 0;
+  if (munmap (p + 65536, 65536) < 0)
+    return 0;
+  if ((65536 / sizeof (struct S)) * sizeof (struct S) != 65536)
+    return 0;
+  struct S *s = (struct S *) (p + 65536);
+  return foo (0, 0, s - 1, 0) != 1;
+}