* [Bug c++/56095] Crash casting function pointer as non-type template argument
2013-01-24 5:23 [Bug c++/56095] New: Crash casting function pointer as non-type template argument spoo at zarbosoft dot com
@ 2013-01-24 6:39 ` spoo at zarbosoft dot com
2013-01-24 11:56 ` daniel.kruegler at googlemail dot com
` (9 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: spoo at zarbosoft dot com @ 2013-01-24 6:39 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56095
--- Comment #1 from Rendaw <spoo at zarbosoft dot com> 2013-01-24 06:39:12 UTC ---
I tried one more case, casting before using the template:
Code (c.cxx):
int *a(void) { return 0; }
typedef void (*IntermediarySignature)(void);
template <IntermediarySignature b> void z(void) {}
int main(int argc, char **argv)
{
constexpr IntermediarySignature c = (IntermediarySignature)a;
z<c>();
return 0;
}
4.7 output:
> g++-4.7 -std=c++11 c.cxx
c.cxx: In function ‘int main(int, char**)’:
c.cxx:8:7: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.7/README.Bugs> for instructions.
Preprocessed source stored into /tmp/ccw2QOq9.out file, please attach this to
your bugreport.
4.6 output:
> g++ -std=c++0x c.cxx
c.cxx: In function ‘int main(int, char**)’:
c.cxx:8:7: error: ‘(IntermediarySignature)a’ is not a valid template argument
for type ‘void (*)()’ because function ‘#‘nop_expr’ not supported by
dump_decl#<declaration error>’ has not external linkage
c.cxx:8:7: error: no matching function for call to ‘z()’
c.cxx:8:7: note: candidate is:
c.cxx:3:41: note: template<void (* b)()> void z()
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c++/56095] Crash casting function pointer as non-type template argument
2013-01-24 5:23 [Bug c++/56095] New: Crash casting function pointer as non-type template argument spoo at zarbosoft dot com
2013-01-24 6:39 ` [Bug c++/56095] " spoo at zarbosoft dot com
@ 2013-01-24 11:56 ` daniel.kruegler at googlemail dot com
2013-01-24 12:02 ` redi at gcc dot gnu.org
` (8 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: daniel.kruegler at googlemail dot com @ 2013-01-24 11:56 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56095
Daniel Krügler <daniel.kruegler at googlemail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |daniel.kruegler at
| |googlemail dot com
--- Comment #2 from Daniel Krügler <daniel.kruegler at googlemail dot com> 2013-01-24 11:56:31 UTC ---
While I agree that the ICE needs to be fixed, let me add in here that any
conversion that requires the equivalent of a reinterpret_cast is not valid in a
constant expression in C++11. Furthermore, there are even more fundamental
restrictions on the form of the non-type template arguments as described in
[temp.arg.nontype] p1, which exclude *any* form of a cast expression at that
place. These rules also exclude the case that you tried in your second example
where you are attempting to use a constexpr variable.
The essential wording here is:
"a constant expression (5.19) that designates the address of [..] a function
with external or internal linkage, including function templates and function
template-ids [..], expressed (ignoring parentheses) as &id-expression, except
that the & may be omitted if the name refers to a function [..]"
Basically this means you can only directly name a function here such as
z<a>();
which of course won't work in your case because of the incompatible signature.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c++/56095] Crash casting function pointer as non-type template argument
2013-01-24 5:23 [Bug c++/56095] New: Crash casting function pointer as non-type template argument spoo at zarbosoft dot com
2013-01-24 6:39 ` [Bug c++/56095] " spoo at zarbosoft dot com
2013-01-24 11:56 ` daniel.kruegler at googlemail dot com
@ 2013-01-24 12:02 ` redi at gcc dot gnu.org
2013-01-24 12:08 ` daniel.kruegler at googlemail dot com
` (7 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: redi at gcc dot gnu.org @ 2013-01-24 12:02 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56095
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |ice-on-invalid-code
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> 2013-01-24 12:01:32 UTC ---
I cant reproduce the crash with any version
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c++/56095] Crash casting function pointer as non-type template argument
2013-01-24 5:23 [Bug c++/56095] New: Crash casting function pointer as non-type template argument spoo at zarbosoft dot com
` (2 preceding siblings ...)
2013-01-24 12:02 ` redi at gcc dot gnu.org
@ 2013-01-24 12:08 ` daniel.kruegler at googlemail dot com
2013-01-24 12:11 ` [Bug c++/56095] [4.6/4.7/4.8 Regression] " jakub at gcc dot gnu.org
` (6 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: daniel.kruegler at googlemail dot com @ 2013-01-24 12:08 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56095
--- Comment #4 from Daniel Krügler <daniel.kruegler at googlemail dot com> 2013-01-24 12:07:25 UTC ---
(In reply to comment #3)
> I cant reproduce the crash with any version
Here is what I get with my mingw-64 gcc 4.8.0 20130120 (experimental):
"main.cpp||In function 'int main(int, char**)':|
main.cpp|7|internal compiler error: tree check: expected tree that contains
'decl minimal' structure, have 'nop_expr' in decl_linkage, at cp/tree.c:3527"
When I use
http://liveworkspace.org/code/47sr7W$0
I also get "source.cpp:7:33: internal compiler error: Segmentation fault"
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c++/56095] [4.6/4.7/4.8 Regression] Crash casting function pointer as non-type template argument
2013-01-24 5:23 [Bug c++/56095] New: Crash casting function pointer as non-type template argument spoo at zarbosoft dot com
` (3 preceding siblings ...)
2013-01-24 12:08 ` daniel.kruegler at googlemail dot com
@ 2013-01-24 12:11 ` jakub at gcc dot gnu.org
2013-01-24 12:12 ` jakub at gcc dot gnu.org
` (5 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: jakub at gcc dot gnu.org @ 2013-01-24 12:11 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56095
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org
Summary|Crash casting function |[4.6/4.7/4.8 Regression]
|pointer as non-type |Crash casting function
|template argument |pointer as non-type
| |template argument
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-01-24 12:11:13 UTC ---
I can, with everything starting from
http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=166167
You need --enable-checking=yes compiler though.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c++/56095] [4.6/4.7/4.8 Regression] Crash casting function pointer as non-type template argument
2013-01-24 5:23 [Bug c++/56095] New: Crash casting function pointer as non-type template argument spoo at zarbosoft dot com
` (4 preceding siblings ...)
2013-01-24 12:11 ` [Bug c++/56095] [4.6/4.7/4.8 Regression] " jakub at gcc dot gnu.org
@ 2013-01-24 12:12 ` jakub at gcc dot gnu.org
2013-01-24 12:14 ` redi at gcc dot gnu.org
` (4 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: jakub at gcc dot gnu.org @ 2013-01-24 12:12 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56095
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jason at gcc dot gnu.org
Target Milestone|--- |4.6.4
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c++/56095] [4.6/4.7/4.8 Regression] Crash casting function pointer as non-type template argument
2013-01-24 5:23 [Bug c++/56095] New: Crash casting function pointer as non-type template argument spoo at zarbosoft dot com
` (5 preceding siblings ...)
2013-01-24 12:12 ` jakub at gcc dot gnu.org
@ 2013-01-24 12:14 ` redi at gcc dot gnu.org
2013-01-25 20:01 ` jason at gcc dot gnu.org
` (3 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: redi at gcc dot gnu.org @ 2013-01-24 12:14 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56095
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2013-01-24
Ever Confirmed|0 |1
--- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> 2013-01-24 12:13:56 UTC ---
Doh, sorry, copy'n'paste failure. I copied the test wrong.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c++/56095] [4.6/4.7/4.8 Regression] Crash casting function pointer as non-type template argument
2013-01-24 5:23 [Bug c++/56095] New: Crash casting function pointer as non-type template argument spoo at zarbosoft dot com
` (6 preceding siblings ...)
2013-01-24 12:14 ` redi at gcc dot gnu.org
@ 2013-01-25 20:01 ` jason at gcc dot gnu.org
2013-01-25 20:05 ` [Bug c++/56095] [4.6/4.7 " jakub at gcc dot gnu.org
` (2 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: jason at gcc dot gnu.org @ 2013-01-25 20:01 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56095
--- Comment #7 from Jason Merrill <jason at gcc dot gnu.org> 2013-01-25 20:01:35 UTC ---
Author: jason
Date: Fri Jan 25 20:01:29 2013
New Revision: 195474
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=195474
Log:
PR c++/56095
* pt.c (convert_nontype_argument_function): Handle invalid input.
(convert_nontype_argument): Likewise.
Added:
trunk/gcc/testsuite/g++.dg/template/fn-ptr2.C
Modified:
trunk/gcc/cp/ChangeLog
trunk/gcc/cp/pt.c
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c++/56095] [4.6/4.7 Regression] Crash casting function pointer as non-type template argument
2013-01-24 5:23 [Bug c++/56095] New: Crash casting function pointer as non-type template argument spoo at zarbosoft dot com
` (7 preceding siblings ...)
2013-01-25 20:01 ` jason at gcc dot gnu.org
@ 2013-01-25 20:05 ` jakub at gcc dot gnu.org
2013-01-25 20:20 ` jason at gcc dot gnu.org
2013-03-17 2:34 ` jason at gcc dot gnu.org
10 siblings, 0 replies; 12+ messages in thread
From: jakub at gcc dot gnu.org @ 2013-01-25 20:05 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56095
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|[4.6/4.7/4.8 Regression] |[4.6/4.7 Regression] Crash
|Crash casting function |casting function pointer as
|pointer as non-type |non-type template argument
|template argument |
--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-01-25 20:04:59 UTC ---
Fixed on the trunk so far.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c++/56095] [4.6/4.7 Regression] Crash casting function pointer as non-type template argument
2013-01-24 5:23 [Bug c++/56095] New: Crash casting function pointer as non-type template argument spoo at zarbosoft dot com
` (8 preceding siblings ...)
2013-01-25 20:05 ` [Bug c++/56095] [4.6/4.7 " jakub at gcc dot gnu.org
@ 2013-01-25 20:20 ` jason at gcc dot gnu.org
2013-03-17 2:34 ` jason at gcc dot gnu.org
10 siblings, 0 replies; 12+ messages in thread
From: jason at gcc dot gnu.org @ 2013-01-25 20:20 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56095
Jason Merrill <jason at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
Target Milestone|4.6.4 |4.8.0
--- Comment #9 from Jason Merrill <jason at gcc dot gnu.org> 2013-01-25 20:20:22 UTC ---
And we usually don't backport fixes for invalid code.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c++/56095] [4.6/4.7 Regression] Crash casting function pointer as non-type template argument
2013-01-24 5:23 [Bug c++/56095] New: Crash casting function pointer as non-type template argument spoo at zarbosoft dot com
` (9 preceding siblings ...)
2013-01-25 20:20 ` jason at gcc dot gnu.org
@ 2013-03-17 2:34 ` jason at gcc dot gnu.org
10 siblings, 0 replies; 12+ messages in thread
From: jason at gcc dot gnu.org @ 2013-03-17 2:34 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56095
--- Comment #10 from Jason Merrill <jason at gcc dot gnu.org> 2013-03-17 02:33:46 UTC ---
Author: jason
Date: Sun Mar 17 02:33:38 2013
New Revision: 196722
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=196722
Log:
PR c++/56095
* class.c (resolve_address_of_overloaded_function): Accept a
reference to function for target_type.
(instantiate_type): Likewise.
* pt.c (convert_nontype_argument): Pass it to
convert_nontype_argument_function.
Modified:
trunk/gcc/cp/ChangeLog
trunk/gcc/cp/class.c
trunk/gcc/cp/pt.c
^ permalink raw reply [flat|nested] 12+ messages in thread