From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9571 invoked by alias); 15 Mar 2015 03:00:28 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 9539 invoked by uid 89); 15 Mar 2015 03:00:26 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.4 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,KAM_FROM_URIBL_PCCC,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 X-HELO: mail-pa0-f54.google.com Received: from mail-pa0-f54.google.com (HELO mail-pa0-f54.google.com) (209.85.220.54) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Sun, 15 Mar 2015 03:00:24 +0000 Received: by padcy3 with SMTP id cy3so27962445pad.3 for ; Sat, 14 Mar 2015 20:00:22 -0700 (PDT) X-Received: by 10.70.108.232 with SMTP id hn8mr14460170pdb.68.1426388422768; Sat, 14 Mar 2015 20:00:22 -0700 (PDT) Received: from bubble.grove.modra.org (CPE-58-160-155-134.oycza5.sa.bigpond.net.au. [58.160.155.134]) by mx.google.com with ESMTPSA id ek7sm10390263pdb.44.2015.03.14.20.00.21 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 14 Mar 2015 20:00:21 -0700 (PDT) Received: by bubble.grove.modra.org (Postfix, from userid 1000) id B6D3AEA0139; Sun, 15 Mar 2015 13:30:16 +1030 (ACDT) Date: Sun, 15 Mar 2015 03:00:00 -0000 From: Alan Modra To: gcc-patches@gcc.gnu.org Subject: Re: Fix for PRs 36043, 58744 and 65408 Message-ID: <20150315030016.GF16488@bubble.grove.modra.org> Mail-Followup-To: gcc-patches@gcc.gnu.org References: <20150314130238.GD16488@bubble.grove.modra.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150314130238.GD16488@bubble.grove.modra.org> User-Agent: Mutt/1.5.23 (2014-03-12) X-IsSubscribed: yes X-SW-Source: 2015-03/txt/msg00785.txt.bz2 On Sat, Mar 14, 2015 at 11:32:38PM +1030, Alan Modra wrote: > I'll also throw together a testcase or three. * gcc.dg/pr65408.c: New. Index: gcc/testsuite/gcc.dg/pr65408.c =================================================================== --- gcc/testsuite/gcc.dg/pr65408.c (revision 0) +++ gcc/testsuite/gcc.dg/pr65408.c (working copy) @@ -0,0 +1,112 @@ +/* PR middle-end/36043 target/58744 target/65408 */ +/* { dg-do run { target mmap } } */ +/* { dg-options "-O2" } */ + +#include +#ifndef MAP_ANONYMOUS +#define MAP_ANONYMOUS MAP_ANON +#endif +#ifndef MAP_ANON +#define MAP_ANON 0 +#endif +#ifndef MAP_FAILED +#define MAP_FAILED ((void *)-1) +#endif + +typedef struct +{ + unsigned char r; + unsigned char g; + unsigned char b; +} __attribute__((packed)) pr58744; + +typedef struct +{ + unsigned short r; + unsigned short g; + unsigned short b; +} pr36043; + +typedef struct +{ + int r; + int g; + int b; +} pr65408; + +__attribute__ ((noinline, noclone)) +void +f1a (pr58744 x) +{ + if (x.r != 1 || x.g != 2 || x.b != 3) + __builtin_abort(); +} + +__attribute__ ((noinline, noclone)) +void +f1 (pr58744 *x) +{ + f1a (*x); +} + +__attribute__ ((noinline, noclone)) +void +f2a (pr36043 x) +{ + if (x.r != 1 || x.g != 2 || x.b != 3) + __builtin_abort(); +} + +__attribute__ ((noinline, noclone)) +void +f2 (pr36043 *x) +{ + f2a (*x); +} + +__attribute__ ((noinline, noclone)) +void +f3a (pr65408 x) +{ + if (x.r != 1 || x.g != 2 || x.b != 3) + __builtin_abort(); +} + +__attribute__ ((noinline, noclone)) +void +f3 (pr65408 *x) +{ + f3a (*x); +} + +int +main () +{ + char *p = mmap ((void *) 0, 131072, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + if (p == MAP_FAILED) + return 0; + char *endp = p + 65536; + if (munmap (endp, 65536) < 0) + return 0; + + pr58744 *s1 = (pr58744 *) endp - 1; + s1->r = 1; + s1->g = 2; + s1->b = 3; + f1 (s1); + + pr36043 *s2 = (pr36043 *) endp - 1; + s2->r = 1; + s2->g = 2; + s2->b = 3; + f2 (s2); + + pr65408 *s3 = (pr65408 *) endp - 1; + s3->r = 1; + s3->g = 2; + s3->b = 3; + f3 (s3); + + return 0; +} -- Alan Modra Australia Development Lab, IBM