Bug 34103 - [4.3 regression] ICE with invalid variadic template functions
Summary: [4.3 regression] ICE with invalid variadic template functions
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 4.3.0
: P2 normal
Target Milestone: 4.3.0
Assignee: dgregor
URL:
Keywords: error-recovery, ice-on-invalid-code, monitored
Depends on:
Blocks:
 
Reported: 2007-11-15 07:54 UTC by Volker Reichelt
Modified: 2008-01-29 14:24 UTC (History)
6 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2008-01-28 21:35:20


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Volker Reichelt 2007-11-15 07:54:04 UTC
The following invalid testcase triggers an ICE on mainline:

============================================================
template<typename> struct A {};

template<typename...T> void foo(A<T>, A<T>);

template<typename...T> void foo(A<T>, A<T>) {}
============================================================

bug.cc:3: error: parameter packs not expanded with `...':
bug.cc:3: note:         'T'
bug.cc:5: error: parameter packs not expanded with `...':
bug.cc:5: note:         'T'
bug.cc:5: internal compiler error: canonical types differ for identical types A<<expression error> > and A<<expression error> >
Please submit a full bug report, [etc.]

The bug appeared between 2007-11-03 and 2007-11-06.
Comment 1 Andrew Pinski 2007-11-19 05:21:38 UTC
Confirmed.
Comment 2 Andrew Pinski 2007-11-27 22:08:53 UTC
Mark,
Why was this marked as a P2 as this is only an error recovery regression?

Thanks,
Andrew Pinski
Comment 3 Mark Mitchell 2007-11-27 22:15:45 UTC
My mistake.  I moved too quickly, and thought this was ICE-on-invalid without a previous valid error.  P4.
Comment 4 dgregor 2008-01-15 16:59:36 UTC
Patch here: http://gcc.gnu.org/ml/gcc-patches/2008-01/msg00650.html
Comment 5 dgregor 2008-01-15 18:08:52 UTC
Subject: Bug 34103

Author: dgregor
Date: Tue Jan 15 18:08:00 2008
New Revision: 131547

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=131547
Log:
2008-01-15  Douglas Gregor  <doug.gregor@gmail.com>

	PR c++/34051
	PR c++/34055
	PR c++/34102
	PR c++/34103
	* typeck.c (check_return_expr): If there are bare parameter packs
	in the return value, set it to error_mark_node.
	* tree.c (cp_walk_subtrees): Walk USING_DECL nodes.
	* pt.c (find_parameter_packs_r): Look at the type of
	IDENTIFIER_NODEs (e.g., for user-defined conversions).
	(check_for_bare_parameter_packs): Flip the result: now returns
	TRUE when there were bare parameter packs, FALSE otherwise.
	(push_template_decl_real): Deal with flipped result of
	check_for_bare_parameter_packs.
	* semantics.c (finish_cond): If there are bare parameter packs in
	the conditional, set it to error_mark_node.
	(finish_expr_stmt): If there are bare parameter packs in the
	expression, set it to error_mark_node.
	(finish_for_expr): Ditto.
	(finish_switch_cond): If there are bare parameter packs in
	the conditional, set it to error_mark_node.
	(finish_mem_initializers): If there are bare parameter packs in
	the member initializer, set it to error_mark_node.
	(finish_member_declaration): Check the attributes of the
	declaration for bare parameter packs, and remove the attributes if
	any have bare parameter packs.
	* parser.c (cp_parser_using_declaration): Check the using
	declaration for bare parameter packs.
	(cp_parser_base_clause): If there are bare parameter packs in a
	base specifier, don't add it to the chain.

2008-01-15  Douglas Gregor  <doug.gregor@gmail.com>

	PR c++/34051
	PR c++/34055
	PR c++/34102
	PR c++/34103
	* g++.dg/cpp0x/vt-34051-2.C: New.
	* g++.dg/cpp0x/vt-34102.C: New.
	* g++.dg/cpp0x/vt-34051.C: New.
	* g++.dg/cpp0x/vt-34055.C: New.
	* g++.dg/cpp0x/vt-34103.C: New.


Added:
    trunk/gcc/testsuite/g++.dg/cpp0x/vt-34051-2.C
    trunk/gcc/testsuite/g++.dg/cpp0x/vt-34051.C
    trunk/gcc/testsuite/g++.dg/cpp0x/vt-34055.C
    trunk/gcc/testsuite/g++.dg/cpp0x/vt-34102.C
    trunk/gcc/testsuite/g++.dg/cpp0x/vt-34103.C
Modified:
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/parser.c
    trunk/gcc/cp/pt.c
    trunk/gcc/cp/semantics.c
    trunk/gcc/cp/tree.c
    trunk/gcc/cp/typeck.c
    trunk/gcc/testsuite/ChangeLog

Comment 6 dgregor 2008-01-15 18:09:31 UTC
Fixed in mainline
Comment 7 Uroš Bizjak 2008-01-16 11:58:09 UTC
(In reply to comment #6)
> Fixed in mainline

Not yet:

FAIL: g++.dg/cpp0x/vt-34103.C (internal compiler error)
FAIL: g++.dg/cpp0x/vt-34103.C (test for excess errors)

/home/uros/gcc-svn/trunk/gcc/testsuite/g++.dg/cpp0x/vt-34103.C:7: note:         'T'

/home/uros/gcc-svn/trunk/gcc/testsuite/g++.dg/cpp0x/vt-34103.C:7: internal compiler error: canonical types differ for identical types A<<expression error> > and A<<expression error> >

Please submit a full bug report,


Comment 8 dgregor 2008-01-16 12:58:37 UTC
I'm unable to reproduce this failure now. What platform are you on and what configure flags did you use?
Comment 9 Richard Biener 2008-01-16 13:17:34 UTC
I also see those two ICEs on x86_64-unknown-linux-gnu.  P2 as this shows in
testresults on a primary platform.
Comment 10 Uroš Bizjak 2008-01-16 13:40:59 UTC
(In reply to comment #8)
> I'm unable to reproduce this failure now. What platform are you on and what
> configure flags did you use?

Target: i686-pc-linux-gnu
Configured with: ../gcc-svn/trunk/configure --with-mpfr=/usr/local --enable-languages=c,c++,fortran
gcc version 4.3.0 20080116 (experimental) [trunk revision 131569] (GCC)



Comment 11 Andrew Pinski 2008-01-16 15:07:24 UTC
I see the failure on i386-apple-darwin8.11.1 also.

(In reply to comment #8)
> I'm unable to reproduce this failure now. What platform are you on and what
> configure flags did you use?

Make sure you did not turn off checking.
Comment 12 John David Anglin 2008-01-19 18:33:55 UTC
I also see the ICE reported in comment #12 on hppa-unknown-linux-gnu.
Comment 13 dave 2008-01-19 18:36:12 UTC
Subject: Re:  [4.3 regression] ICE with invalid variadic template functions

> I also see the ICE reported in comment #12 on hppa-unknown-linux-gnu.

Sorry, comment #7.

Dave
Comment 14 Dominique d'Humieres 2008-01-28 09:20:25 UTC
At rev. 131891, the test gives the same ICE on ppc/Intel Darwin9, 32 and 64 modes.

Comment 15 dgregor 2008-01-28 21:35:20 UTC
Thanks everyone; I can reproduce this on i686-pc-linux-gnu. Patch in the works.
Comment 16 dgregor 2008-01-29 14:01:11 UTC
Subject: Bug 34103

Author: dgregor
Date: Tue Jan 29 13:59:59 2008
New Revision: 131938

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=131938
Log:
2008-01-29  Douglas Gregor  <doug.gregor@gmail.com>

	PR c++/34055
	PR c++/34103
	PR c++/34219
	PR c++/34606
	PR c++/34753
	PR c++/34754
	PR c++/34755
	PR c++/34919
	PR c++/34961
	* c-pretty-print.c (pp_c_type_qualifier_list): Don't try to print
	qualifiers for an ERROR_MARK_NODE or a NULL_TREE.


2008-01-29  Douglas Gregor  <doug.gregor@gmail.com>

	PR c++/34055
	PR c++/34103
	PR c++/34219
	PR c++/34606
	PR c++/34753
	PR c++/34754
	PR c++/34755
	PR c++/34919
	PR c++/34961
	* typeck.c (check_return_expr): Tweak call to
	check_for_bare_parameter_packs.
	* class.c (add_method): Be careful with error_mark_nodes.
	* cp-tree.h (check_for_bare_parameter_packs): Remove "*" from
	signature.
	* pt.c (struct find_parameter_pack_data): Remove
	SET_PACKS_TO_ERROR.
	(find_parameter_packs_r): Don't use SET_PACKS_TO_ERROR.
	(uses_parameter_packs): Don't set SET_PACKS_TO_ERROR.
	(make_pack_expansion): Ditto.
	(check_for_bare_parameter_packs): Parameter is now a tree, not a
	tree*.
	(process_template_parm): Tweak call to
	check_for_bare_parameter_packs.  
	(push_template_decl_real): Tweak calls to
	check_for_bare_parameter_packs. If bare parameter packs are found
	in the list of exceptions, clear out that list after giving an
	error.
	* semantics.c (finish_cond): Tweak call to
	check_for_bare_parameter_packs.
	(finish_expr_stmt): Ditto.
	(finish_for_expr): Ditto.
	(finish_switch_cond): Ditto.
	(finish_mem_initializers): Ditto.
	(finish_member_declaration): Ditto.
	(finish_static_assert): Check for bare parameter packs in the
	condition.
	* decl2.c (cplus_decl_attributes): Check for bare parameter packs in the
	attributes of a declaration.
	* parser.c (cp_parser_using_declaration): Tweak call to
	check_for_bare_parameter_packs.
	(cp_parser_base_clause): Ditto.
	

2008-01-29  Douglas Gregor  <doug.gregor@gmail.com>

	PR c++/34055
	PR c++/34103
	PR c++/34219
	PR c++/34606
	PR c++/34753
	PR c++/34754
	PR c++/34755
	PR c++/34919
	PR c++/34961
	* g++.dg/cpp0x/vt-34219-2.C: New.
	* g++.dg/cpp0x/pr32126.C: Tweak expected error messages.
	* g++.dg/cpp0x/vt-34961.C: New.
	* g++.dg/cpp0x/vt-34055.C: Tweak error messages; add new test
	cases from the re-opened PR.
	* g++.dg/cpp0x/vt-34753.C: New.
	* g++.dg/cpp0x/vt-34919.C: New.
	* g++.dg/cpp0x/vt-34754.C: New.
	* g++.dg/cpp0x/vt-34606.C: New.
	* g++.dg/cpp0x/vt-34219.C: New.
	* g++.dg/cpp0x/pr32125.C: Tweak expected error messages.
	* g++.dg/cpp0x/vt-34755.C: New.
	* g++.dg/cpp0x/pr31438.C: Ditto.
	* g++.dg/cpp0x/variadic81.C: Ditto.

Added:
    trunk/gcc/testsuite/g++.dg/cpp0x/vt-34219-2.C
    trunk/gcc/testsuite/g++.dg/cpp0x/vt-34219.C
    trunk/gcc/testsuite/g++.dg/cpp0x/vt-34606.C
    trunk/gcc/testsuite/g++.dg/cpp0x/vt-34753.C
    trunk/gcc/testsuite/g++.dg/cpp0x/vt-34754.C
    trunk/gcc/testsuite/g++.dg/cpp0x/vt-34755.C
    trunk/gcc/testsuite/g++.dg/cpp0x/vt-34919.C
    trunk/gcc/testsuite/g++.dg/cpp0x/vt-34961.C
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/c-pretty-print.c
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/class.c
    trunk/gcc/cp/cp-tree.h
    trunk/gcc/cp/decl.c
    trunk/gcc/cp/decl2.c
    trunk/gcc/cp/parser.c
    trunk/gcc/cp/pt.c
    trunk/gcc/cp/semantics.c
    trunk/gcc/cp/typeck.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/g++.dg/cpp0x/pr31438.C
    trunk/gcc/testsuite/g++.dg/cpp0x/pr32125.C
    trunk/gcc/testsuite/g++.dg/cpp0x/pr32126.C
    trunk/gcc/testsuite/g++.dg/cpp0x/variadic81.C
    trunk/gcc/testsuite/g++.dg/cpp0x/vt-34055.C

Comment 17 dgregor 2008-01-29 14:24:38 UTC
Fixed on mainline