public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "rguenth at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug tree-optimization/85803] [6/7/8/9 Regression] DSE removes live global store
Date: Wed, 16 May 2018 13:19:00 -0000	[thread overview]
Message-ID: <bug-85803-4-YUy8A0jIgp@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-85803-4@http.gcc.gnu.org/bugzilla/>

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85803

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P3                          |P2
                 CC|                            |ebotcazou at gcc dot gnu.org
   Target Milestone|---                         |6.5

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
More simple cases involve externally thrown (non-call or from const function)
exceptions like

  *p = 42;
  a / 0;
  *p = 0;

or

  *p = 42;
  *(void *)0 = 0;
  *p = 0;

note that with externally thrown EH we do not have any CFG reflecting the EH
and thus other passes are usually also free in re-ordering stmts to make the
*p = 42 side-effect invisible.

I think the only in-tree language eventually specifying behavior for stuff
like above is Ada - so, any comments / attempts for testcases where we do
not follow language specified behavior?

One idea that crossed our minds is to add a return statement to the exit
block having the virtual operand and have externally throwing stmts have
an EH edge to that block (and a fallthru from the regular exit / return stmt).
>From gcc-bugs-return-604822-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Wed May 16 13:39:15 2018
Return-Path: <gcc-bugs-return-604822-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 74290 invoked by alias); 16 May 2018 13:39:15 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 74255 invoked by uid 48); 16 May 2018 13:39:11 -0000
From: "mpolacek at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c++/85363] Throwing exception from member constructor (brace initializer vs initializer list)
Date: Wed, 16 May 2018 13:39:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: c++
X-Bugzilla-Version: 7.2.1
X-Bugzilla-Keywords: wrong-code
X-Bugzilla-Severity: normal
X-Bugzilla-Who: mpolacek at gcc dot gnu.org
X-Bugzilla-Status: ASSIGNED
X-Bugzilla-Resolution:
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: mpolacek at gcc dot gnu.org
X-Bugzilla-Target-Milestone: ---
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: bug_status assigned_to
Message-ID: <bug-85363-4-ABIa5Jmw2H@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-85363-4@http.gcc.gnu.org/bugzilla/>
References: <bug-85363-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2018-05/txt/msg01717.txt.bz2
Content-length: 384

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85363

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |mpolacek at gcc dot gnu.org
>From gcc-bugs-return-604823-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Wed May 16 13:39:28 2018
Return-Path: <gcc-bugs-return-604823-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 75119 invoked by alias); 16 May 2018 13:39:27 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 75084 invoked by uid 48); 16 May 2018 13:39:22 -0000
From: "Casey at Carter dot net" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c++/85806] New: [concepts] Hard error for "invalid use of non-static data member" in a requires expression
Date: Wed, 16 May 2018 13:39:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: new
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: c++
X-Bugzilla-Version: 8.1.0
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: Casey at Carter dot net
X-Bugzilla-Status: UNCONFIRMED
X-Bugzilla-Resolution:
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: ---
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: bug_id short_desc product version bug_status bug_severity priority component assigned_to reporter target_milestone
Message-ID: <bug-85806-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2018-05/txt/msg01718.txt.bz2
Content-length: 1110

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85806

            Bug ID: 85806
           Summary: [concepts] Hard error for "invalid use of non-static
                    data member" in a requires expression
           Product: gcc
           Version: 8.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: Casey at Carter dot net
  Target Milestone: ---

Compiling this program fragment with g++ -std=c++17 -fconcepts
(https://godbolt.org/g/L1b6TS):

  template<int> using helper = void;

  template<typename T>
  concept bool HasCount = requires {
      typename ::helper<T::count>;
  };

  struct S {
      int count = 42;
  };
  static_assert(!HasCount<S>);

produces a diagnostic:

  <source>:11:18: error: invalid use of non-static data member 'S::count'
     static_assert(!HasCount<S>);
                    ^~~~~~~~~~~
  <source>:9:19: note: declared here
         int count = 42;
                     ^~

rather than the expected successful and silent compile.
>From gcc-bugs-return-604824-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Wed May 16 13:56:28 2018
Return-Path: <gcc-bugs-return-604824-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 21624 invoked by alias); 16 May 2018 13:56:27 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 20962 invoked by uid 48); 16 May 2018 13:56:22 -0000
From: "peter.azmanov at transas dot com" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c++/85807] New: ICEs related to noexcept
Date: Wed, 16 May 2018 13:56:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: new
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: c++
X-Bugzilla-Version: 8.1.0
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: peter.azmanov at transas dot com
X-Bugzilla-Status: UNCONFIRMED
X-Bugzilla-Resolution:
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: ---
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: bug_id short_desc product version bug_status bug_severity priority component assigned_to reporter target_milestone attachments.created
Message-ID: <bug-85807-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2018-05/txt/msg01719.txt.bz2
Content-length: 3477

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85807

            Bug ID: 85807
           Summary: ICEs related to noexcept
           Product: gcc
           Version: 8.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: peter.azmanov at transas dot com
  Target Milestone: ---

Created attachment 44138
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44138&action=edit
self-contained test

After upgrade to version 8.1.0, encountered ICE:
"internal compiler error: in check_noexcept_r, at cp/except.c:1027"

Slight modifications led to other ICEs.

Test script:
echo "==== Segfault internal compiler error"
/usr/bin/g++ -DSEGFAULT_ERROR test.cpp
echo "==== Noexcept internal compiler error"
/usr/bin/g++ -DNOEXCEPT_ERROR test.cpp
echo "==== Unexpected expression internal compiler error"
/usr/bin/g++ -DUNEXPECTED_EXPR_ERROR -Wall test.cpp
echo "==== cp_get_fndecl_from_callee internal compiler error (1)"
/usr/bin/g++ -DUNEXPECTED_EXPR_ERROR test.cpp
echo "==== cp_get_fndecl_from_callee internal compiler error (2)"
/usr/bin/g++ test.cpp

echo "==== Workaround"
/usr/bin/g++ -DWORKAROUND test.cpp

Output:
==== Segfault internal compiler error
test.cpp: In function ‘value_statistics_t<> calc() [with T = double]’:
test.cpp:25:13: internal compiler error: Segmentation fault
     return {};
             ^
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://bugs.archlinux.org/> for instructions.
==== Noexcept internal compiler error
test.cpp: In instantiation of ‘value_statistics_t<> calc() [with T = double]’:
test.cpp:39:46:   required from here
test.cpp:28:24: internal compiler error: in check_noexcept_r, at
cp/except.c:1027
   value_statistics_t<> result;
                        ^~~~~~
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://bugs.archlinux.org/> for instructions.
==== Unexpected expression internal compiler error
test.cpp: In instantiation of ‘value_statistics_t<> calc() [with T = double]’:
test.cpp:39:46:   required from here
test.cpp:31:31: internal compiler error: unexpected expression ‘(size_t)0’ of
kind implicit_conv_expr
   return value_statistics_t<>{};
                               ^
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://bugs.archlinux.org/> for instructions.
==== cp_get_fndecl_from_callee internal compiler error (1)
test.cpp: In instantiation of ‘value_statistics_t<> calc() [with T = double]’:
test.cpp:39:46:   required from here
test.cpp:35:1: internal compiler error: in cp_get_fndecl_from_callee, at
cp/cvt.c:957
 }
 ^
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://bugs.archlinux.org/> for instructions.
==== cp_get_fndecl_from_callee internal compiler error (2)
test.cpp: In instantiation of ‘value_statistics_t<> calc() [with T = double]’:
test.cpp:39:46:   required from here
test.cpp:35:1: internal compiler error: in cp_get_fndecl_from_callee, at
cp/cvt.c:957
 }
 ^
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://bugs.archlinux.org/> for instructions.
==== Workaround
>From gcc-bugs-return-604825-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Wed May 16 13:58:32 2018
Return-Path: <gcc-bugs-return-604825-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 106519 invoked by alias); 16 May 2018 13:58:32 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 106006 invoked by uid 89); 16 May 2018 13:58:31 -0000
Authentication-Results: sourceware.org; auth=none
X-Virus-Found: No
X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=dias, Wilson, tC, HX-Received:sk:g10-v6m
X-HELO: mail-ot0-f196.google.com
Received: from mail-ot0-f196.google.com (HELO mail-ot0-f196.google.com) (74.125.82.196) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 16 May 2018 13:58:30 +0000
Received: by mail-ot0-f196.google.com with SMTP id n1-v6so997272otf.7        for <gcc-bugs@gcc.gnu.org>; Wed, 16 May 2018 06:58:30 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;        d\x1e100.net; s 161025;        h=x-gm-message-state:mime-version:in-reply-to:references:from:date         :message-id:subject:to:cc:content-transfer-encoding;        bh=khnKwcwJFFWB0l+yAV75p9Bl7k5LPO3a3fRiBnXriyk=;        b=OtudxHw6xjIMHU5itnBQlMqv5sTshUdLyMIsbKU7sZLDI4JZfjfF5RX0sZ03ruS4yd         oqnFNvDwofeQF+iFuryGELrrt1rkbWRNMQOC28IlGpmJRYIlePro3PrcM/tHhLdH/0z0         NfxAIDCYnWnfyF6He0RQkzxK/KMPpwTzAk9ZmAB7lDZ9NpXuOOPobzm0vita6jNsReZE         htQMrwv9ef9ca7tLg7ZYH+kwc5nMAoDikGOZsrvarN+1aWgORMDvRsdsv72P7HkaSCNM         4e7+xdB9ES+V/KECsUELCgRPaG7h1/hcFNdFpo3OV8Bk9TqgJfideYpHybtdo7Mpx0qw         PBVQ=X-Gm-Message-State: ALKqPwfg56rp6DqDQ9Wurt3+2wyNgQvP0dvye9DgZr3SoRN6T0viUJMG	A63UqH09a5AmdFBDoDbSbmKF17bhhdcScmuO8S0X-Google-Smtp-Source: AB8JxZorJOdXbaJBCQVU4MZCXP5el1/IpYKwKhEjGSonWtH+LobYYQhzqff1CJQrv+Kc5iKoBGWwGk6zOYeck7nmjksX-Received: by 2002:a9d:620a:: with SMTP id g10-v6mr722142otj.288.1526479108495; Wed, 16 May 2018 06:58:28 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.74.211.138 with HTTP; Wed, 16 May 2018 06:58:27 -0700 (PDT)
In-Reply-To: <f0aa39a7-cdae-764c-3273-298a96899261@sifive.com>
References: <o9iac8sg.fsf@gmail.com> <f0aa39a7-cdae-764c-3273-298a96899261@sifive.com>
From: Jason Vas Dias <jason.vas.dias@gmail.com>
Date: Wed, 16 May 2018 13:58:00 -0000
Message-ID: <CALyZvKw+JE+WP8KvNZQLOt-h6Ymr_4it7KX2xvOY4heQ4G3y_g@mail.gmail.com>
Subject: Re: bug ? : -Wpedantic -Wconversion 'short a=1; a-=1;' complaint
To: Jim Wilson <jimw@sifive.com>
Cc: gcc-bugs@gcc.gnu.org, gcc@gcc.org
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-IsSubscribed: yes
X-SW-Source: 2018-05/txt/msg01720.txt.bz2
Content-length: 3732

Great thanks for your informative response, Jim! :
RE:
On 23/04/2018, Jim Wilson <jimw@sifive.com> wrote:
> On 04/23/2018 07:11 AM, Jason Vas Dias wrote:
>>
>> I really do not think a '-Wpedantic -Wconversion' warning should
>> be generated for the following code, but it is
>> (with GCC 6.4.1 and 7.3.1 on RHEL-7.5 Linux) :
>>
>>   $ echo '
>>   typedef unsigned short U16_t;
>>   static void f(void)
>>   { U16_t a = 1;
>>     a-=1;
>>   }' > t.C;
>
> gcc@gcc.gnu.org dropped as inappropriate.  Note that gcc-bugs is output
> from our bugzilla.  Sending email here isn't very useful.  If you want a
> bug fixed, you have to open a bug report in bugzilla.  You can ask gcc
> questions on gcc help.
>
> In the C language, operations on short and always performed as int, and
> then converted back to short.  Subtracting one may generated a negative
> number, which converted to unsigned short will change its value.  So the
> warning seems appropriate.
>
> Note that -Wconversion means different things in different gcc versions.
>   It current meaning is to warn for any implicit cast that may change a
> value.  This is not very useful in general, and is not an option that I
> would recommend using by default.  In old gcc versions, -Wconversion
> warned for code that had different meaning in K&R C and ISO C.  That was
> useful, and some people used that option by default, but the option no
> longer does that.
>
> You can silence the warning by adding an explicit cast.
>     a = (U16_t) (a - 1);
>
> Jim
>

But I still think, in modern GCC, the behaviour of this warning option is a bug.
When I look at the code generated for the above example, I can see
the compiler is actually generating 16-bit operations:

$ gcc -std=c11 -Wall -Wextra -pedantic -Wconversion -S -o u16.s u16.c
u16.c: In function ‘f’:
u16.c:9:6: warning: conversion to ‘U16_t {aka short unsigned int}’
from ‘int’ may alter its value [-Wconversion]
   v-=1;
      ^

But looking at the assembler generated :

	movw	$1, -2(%rbp)
	subw	$1, -2(%rbp)

we see that on x86_64 at least, the compiler is actually generating
16-bit operations on two-byte values.

I can understand that on architectures such as ARM , it might be
appropriate to generate the warning, because on that platform,
a 32-bit operation may actually be generated for the code.
But if no 32-bit operation is being generated, why issue the warning?

So it is not the case that
> In the C language, operations on short are always performed as int, and
> then converted back to short .

That may have been true with ANSI C90, but not with more recent versions
of the C language; surely GCC should know what standard & CPU it is generating
code for, and emit appropriate warnings for that standard and CPU ?

And your suggested fix illustrates my point about the warning encouraging
unnecessary casts:
> You can silence the warning by adding an explicit cast.
>     a = (U16_t) (a - 1);
Actually, in this case, gcc is clever enough to realize that a cast is
not required,
and actually generates identical code with or without the cast:

        movw	$1, -2(%rbp)
	subw	$1, -2(%rbp)

But C++ programmers are encouraged to look at any C-style "(X)y" cast as
"Create an anonymous Temporary to hold y cast to type X " .
Even though that is not what is going on here, I think the warning does
not help programmers understand what code is being generated
(the 16-bit operations) and incorrectly makes them think a 32-bit
temporary is being generated.

So I think that '-Wconversion' should have no effect if '-pedantic'
is in effect,
because that combination produces erroneous and misleading warnings .

Thanks & Best Regards,
Jason


       reply	other threads:[~2018-05-16 13:19 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <bug-85803-4@http.gcc.gnu.org/bugzilla/>
2018-05-16 13:19 ` rguenth at gcc dot gnu.org [this message]
2021-05-14  9:50 ` [Bug tree-optimization/85803] [9/10/11/12 " jakub at gcc dot gnu.org
2021-06-01  8:11 ` rguenth at gcc dot gnu.org
2022-03-07  8:12 ` rguenth at gcc dot gnu.org
2022-03-07 11:32 ` rguenth at gcc dot gnu.org
2022-05-27  9:39 ` [Bug tree-optimization/85803] [10/11/12/13 " rguenth at gcc dot gnu.org
2022-06-28 10:35 ` jakub at gcc dot gnu.org
2023-07-07 10:33 ` [Bug tree-optimization/85803] [11/12/13/14 " rguenth at gcc dot gnu.org

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-85803-4-YUy8A0jIgp@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).