public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/95807] New: GCC accepts "void value not ignored as it ought to be" in function template
@ 2020-06-22  3:21 haoxintu at gmail dot com
  2020-06-22  3:24 ` [Bug c++/95807] " pinskia at gcc dot gnu.org
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: haoxintu at gmail dot com @ 2020-06-22  3:21 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 95807
           Summary: GCC accepts "void value not ignored as it ought to be"
                    in function template
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Keywords: accepts-invalid
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: haoxintu at gmail dot com
  Target Milestone: ---

GCC accepts "void value not ignored as it ought to be" in a function template
but rejects it in a normal function definition. 

$cat bug.cc
void foo1() {int var = throw;};
template <class> 
void foo2() {int var = throw;};

$g++ -c bug.cc
bug.cc: In function ‘void foo()’:
bug.cc:1:23: error: void value not ignored as it ought to be
    1 | void foo1() {int var = throw;};
      |                       ^~~~~

Noted that GCC only rejects line 1 but accepts line 3.

In clang
$clang++ -c bug.cc
bug.cc:1:18: error: cannot initialize a variable of type 'int' with an rvalue
of type 'void'
void foo1() {int var = throw;};
                 ^     ~~~~~
bug.cc:3:18: error: cannot initialize a variable of type 'int' with an rvalue
of type 'void'
void foo2(){ int var = throw;};
                 ^     ~~~~~
2 errors generated.

My GCC version is
$g++ --version
g++ (GCC) 11.0.0 20200605 (experimental)
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug c++/95807] GCC accepts "void value not ignored as it ought to be" in function template
  2020-06-22  3:21 [Bug c++/95807] New: GCC accepts "void value not ignored as it ought to be" in function template haoxintu at gmail dot com
@ 2020-06-22  3:24 ` pinskia at gcc dot gnu.org
  2020-06-22  3:48 ` haoxintu at gmail dot com
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: pinskia at gcc dot gnu.org @ 2020-06-22  3:24 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
I think it is rejected at instanition time.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug c++/95807] GCC accepts "void value not ignored as it ought to be" in function template
  2020-06-22  3:21 [Bug c++/95807] New: GCC accepts "void value not ignored as it ought to be" in function template haoxintu at gmail dot com
  2020-06-22  3:24 ` [Bug c++/95807] " pinskia at gcc dot gnu.org
@ 2020-06-22  3:48 ` haoxintu at gmail dot com
  2020-06-22  9:46 ` redi at gcc dot gnu.org
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: haoxintu at gmail dot com @ 2020-06-22  3:48 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Haoxin Tu <haoxintu at gmail dot com> ---
(In reply to Andrew Pinski from comment #1)
> I think it is rejected at instanition time.

Hi, Andrew. Shouldn't it be rejected at compiling time?

Please take a look at another case, test.cc

$cat test.cc
void foo1(int var = throw) {};
template <class> 
void foo2(int var = throw){ };

$g++ -c test.cc
test.cc:1:21: error: could not convert ‘<throw-expression>’ from ‘void’ to
‘int’
    1 | void foo1(int var = throw){ };
      |                     ^~~~~
      |                     |
      |                     void


$clang++ -c test.c
test.cc:1:15: error: cannot initialize a parameter of type 'int' with an rvalue
of type 'void'
void foo1(int var = throw){ };
              ^     ~~~~~
test.cc:1:15: note: passing argument to parameter 'var' here
test.cc:3:15: error: cannot initialize a parameter of type 'int' with an rvalue
of type 'void'
void foo2(int var = throw){ };
              ^     ~~~~~
test.cc:3:15: note: passing argument to parameter 'var' here
2 errors generated.

Is this case similar with bug.cc?
I guess an "void" can't be a rvalue at any time.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug c++/95807] GCC accepts "void value not ignored as it ought to be" in function template
  2020-06-22  3:21 [Bug c++/95807] New: GCC accepts "void value not ignored as it ought to be" in function template haoxintu at gmail dot com
  2020-06-22  3:24 ` [Bug c++/95807] " pinskia at gcc dot gnu.org
  2020-06-22  3:48 ` haoxintu at gmail dot com
@ 2020-06-22  9:46 ` redi at gcc dot gnu.org
  2020-06-22 10:01 ` haoxintu at gmail dot com
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: redi at gcc dot gnu.org @ 2020-06-22  9:46 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Haoxin Tu from comment #2)
> (In reply to Andrew Pinski from comment #1)
> > I think it is rejected at instanition time.
> 
> Hi, Andrew. Shouldn't it be rejected at compiling time?

It could be, but that is not required by the C++ standard.

> Is this case similar with bug.cc?

Yes. The ill-formed template is not diagnosed unless you instantiate it. That
is allowed by the standard.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug c++/95807] GCC accepts "void value not ignored as it ought to be" in function template
  2020-06-22  3:21 [Bug c++/95807] New: GCC accepts "void value not ignored as it ought to be" in function template haoxintu at gmail dot com
                   ` (2 preceding siblings ...)
  2020-06-22  9:46 ` redi at gcc dot gnu.org
@ 2020-06-22 10:01 ` haoxintu at gmail dot com
  2020-06-22 13:06 ` redi at gcc dot gnu.org
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: haoxintu at gmail dot com @ 2020-06-22 10:01 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #4 from Haoxin Tu <haoxintu at gmail dot com> ---
(In reply to Jonathan Wakely from comment #3)
>  The ill-formed template is not diagnosed unless you instantiate it.
> That is allowed by the standard.

Thank you Jonathan, thanks for your response.

As other major compilers reject this by default, I just suggest GCC should emit
a appropriate diagnostic message (maybe a warning is fine).

Just a suggestion, please understand if it is inappropriate ~

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug c++/95807] GCC accepts "void value not ignored as it ought to be" in function template
  2020-06-22  3:21 [Bug c++/95807] New: GCC accepts "void value not ignored as it ought to be" in function template haoxintu at gmail dot com
                   ` (3 preceding siblings ...)
  2020-06-22 10:01 ` haoxintu at gmail dot com
@ 2020-06-22 13:06 ` redi at gcc dot gnu.org
  2020-06-22 13:59 ` haoxintu at gmail dot com
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: redi at gcc dot gnu.org @ 2020-06-22 13:06 UTC (permalink / raw)
  To: gcc-bugs

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

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1
           Severity|normal                      |enhancement
   Last reconfirmed|                            |2020-06-22

--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Haoxin Tu from comment #4)
> As other major compilers reject this by default, I just suggest GCC should
> emit a appropriate diagnostic message (maybe a warning is fine).

What practical impact does this have on any real world code?

Why should we spend time on that, rather than the million other things we have
to fix?

Obviously in an ideal world GCC would be perfect, but the majority of your bug
reports are asking for time to be spent on things that just don't matter.

If you really want it fixed, you can always do it yourself:
https://gcc.gnu.org/contribute.html

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug c++/95807] GCC accepts "void value not ignored as it ought to be" in function template
  2020-06-22  3:21 [Bug c++/95807] New: GCC accepts "void value not ignored as it ought to be" in function template haoxintu at gmail dot com
                   ` (4 preceding siblings ...)
  2020-06-22 13:06 ` redi at gcc dot gnu.org
@ 2020-06-22 13:59 ` haoxintu at gmail dot com
  2020-06-22 15:47 ` redi at gcc dot gnu.org
  2021-12-14  5:36 ` pinskia at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: haoxintu at gmail dot com @ 2020-06-22 13:59 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #6 from Haoxin Tu <haoxintu at gmail dot com> ---
(In reply to Jonathan Wakely from comment #5)

> What practical impact does this have on any real world code?
> Why should we spend time on that, rather than the million other things we
> have to fix?

Hi, Jonathan,
This is the question I am always thinking about. GCC is a big software somehow,
and that's impossible to treat every part equally when it has issues. 


> Obviously in an ideal world GCC would be perfect, but the majority of your
> bug reports are asking for time to be spent on things that just don't matter.

My team nowadays are focusing on improving the quality of mature compilers. We
just developed a tool to test them and then found those bugs. Our method might
not perfect now and it only found some issues in FE, and we are designing a
more effective approach to focus on the ME or BE parts (those parts might more
important for GCC), it still needs some time for us. So I totally agree with
that you said, and maybe later reports will be more useful for you.

> If you really want it fixed, you can always do it yourself:
> https://gcc.gnu.org/contribute.html

This is a really constructive suggestion for me. I will try to do this at some
time.

Anyway, thanks for your kind and helpful response!

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug c++/95807] GCC accepts "void value not ignored as it ought to be" in function template
  2020-06-22  3:21 [Bug c++/95807] New: GCC accepts "void value not ignored as it ought to be" in function template haoxintu at gmail dot com
                   ` (5 preceding siblings ...)
  2020-06-22 13:59 ` haoxintu at gmail dot com
@ 2020-06-22 15:47 ` redi at gcc dot gnu.org
  2021-12-14  5:36 ` pinskia at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: redi at gcc dot gnu.org @ 2020-06-22 15:47 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #7 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Haoxin Tu from comment #6)
> My team nowadays are focusing on improving the quality of mature compilers.
> We just developed a tool to test them and then found those bugs. Our method
> might not perfect now and it only found some issues in FE, and we are
> designing a more effective approach to focus on the ME or BE parts (those
> parts might more important for GCC), it still needs some time for us. So I
> totally agree with that you said, and maybe later reports will be more
> useful for you.

OK, thanks for the background information.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug c++/95807] GCC accepts "void value not ignored as it ought to be" in function template
  2020-06-22  3:21 [Bug c++/95807] New: GCC accepts "void value not ignored as it ought to be" in function template haoxintu at gmail dot com
                   ` (6 preceding siblings ...)
  2020-06-22 15:47 ` redi at gcc dot gnu.org
@ 2021-12-14  5:36 ` pinskia at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-12-14  5:36 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #8 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
*** Bug 96183 has been marked as a duplicate of this bug. ***

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2021-12-14  5:36 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-22  3:21 [Bug c++/95807] New: GCC accepts "void value not ignored as it ought to be" in function template haoxintu at gmail dot com
2020-06-22  3:24 ` [Bug c++/95807] " pinskia at gcc dot gnu.org
2020-06-22  3:48 ` haoxintu at gmail dot com
2020-06-22  9:46 ` redi at gcc dot gnu.org
2020-06-22 10:01 ` haoxintu at gmail dot com
2020-06-22 13:06 ` redi at gcc dot gnu.org
2020-06-22 13:59 ` haoxintu at gmail dot com
2020-06-22 15:47 ` redi at gcc dot gnu.org
2021-12-14  5:36 ` pinskia at gcc dot gnu.org

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).