Bug 35023 - [4.3 regression] ICE with parameter pack in variable declaration
Summary: [4.3 regression] ICE with parameter pack in variable declaration
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 4.3.0
: P5 normal
Target Milestone: 4.3.0
Assignee: dgregor
URL: http://gcc.gnu.org/ml/gcc-patches/200...
Keywords: error-recovery, ice-on-invalid-code, monitored
Depends on:
Blocks:
 
Reported: 2008-01-30 00:06 UTC by Volker Reichelt
Modified: 2008-02-15 17:34 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2008-02-14 21:42:20


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Volker Reichelt 2008-01-30 00:06:42 UTC
The following invalid code snippet triggers an ICE on mainline since today:

=============================================================
template<typename... T> int foo()
{
  T t;
  return t;
}

void bar()
{
  foo<int>();
}
=============================================================

bug.cc: In function 'int foo()':
bug.cc:3: error: parameter packs not expanded with `...':
bug.cc:3: note:         'T'
bug.cc: In function 'int foo() [with T = int]':
bug.cc:9:   instantiated from here
bug.cc:4: internal compiler error: tree check: expected record_type or union_type or qual_union_type, have template_type_parm in lookup_conversions, at cp/search.c:2444
Please submit a full bug report, [etc.]
Comment 1 dgregor 2008-02-15 03:51:05 UTC
Patch here: http://gcc.gnu.org/ml/gcc-patches/2008-02/msg00529.html
Comment 2 dgregor 2008-02-15 17:33:48 UTC
Subject: Bug 35023

Author: dgregor
Date: Fri Feb 15 17:33:02 2008
New Revision: 132348

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

	PR c++/35023
	PR c++/35024
	PR c++/35026
	* pt.c (finish_member_template_decl): If the type in a TYPE_DECL
	is error_mark_node, return an error early.
	(find_parameter_packs_r): Pass the pointer set along to recursive
	calls of cp_walk_subtrees; don't try to manage the pointer set
	ourselves.
	(uses_parameter_packs): Pass the pointer set to cp_walk_tree.
	(make_pack_expansion): Ditto.
	(check_for_bare_parameter_packs): Ditto. Also, don't bother taking
	a second pass through the tree with find_parameter_packs_r; that
	second pass no longer does anything.
	(push_template_decl_real): If we have an erroneous declaration,
	set its type to error_mark_node before returning an error.

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

	PR c++/35023
	PR c++/35024
	PR c++/35026
	* g++.dg/cpp0x/vt-35026.C: New.
	* g++.dg/cpp0x/vt-35023.C: New.
	* g++.dg/cpp0x/vt-34055.C: Tweak expected error messages.
	* g++.dg/cpp0x/vt-35024.C: New.

Added:
    trunk/gcc/testsuite/g++.dg/cpp0x/vt-35023.C
    trunk/gcc/testsuite/g++.dg/cpp0x/vt-35024.C
    trunk/gcc/testsuite/g++.dg/cpp0x/vt-35026.C
Modified:
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/pt.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/g++.dg/cpp0x/vt-34055.C

Comment 3 dgregor 2008-02-15 17:34:53 UTC
Fixed on mainline