Bug 31437 - [4.3 regression] ICE with invalid use of parameter pack in member function arg
Summary: [4.3 regression] ICE with invalid use of parameter pack in member function arg
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 4.3.0
: P3 normal
Target Milestone: 4.3.0
Assignee: dgregor
URL:
Keywords: error-recovery, ice-on-invalid-code, monitored
Depends on:
Blocks:
 
Reported: 2007-04-02 20:51 UTC by Volker Reichelt
Modified: 2007-05-25 17:54 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2007-04-25 18:00:05


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Volker Reichelt 2007-04-02 20:51:15 UTC
More fallout from the variadic templates on mainline:

===========================================================
template <typename... T> struct A
{
  A(T* p) { (A<T...>*)(p); }
};

A<int> a(0);
===========================================================

bug.cc:3: error: parameter packs not expanded with `...':
bug.cc:3: note:         'T'
bug.cc:3: error: parameter packs not expanded with `...':
bug.cc:3: note:         'T'
bug.cc: In constructor 'A<T>::A(T*) [with T = int]':
bug.cc:6:   instantiated from here
bug.cc:3: internal compiler error: tree check: expected record_type or union_type or qual_union_type, have template_type_parm in lookup_base, at cp/search.c:213
Please submit a full bug report, [etc.]

Similar to PR31436 as this is also invalid use of a parameter pack
in a function argument and triggers an ICE in a lookup_* function.
Comment 1 dgregor 2007-05-25 14:15:53 UTC
Subject: Bug 31437

Author: dgregor
Date: Fri May 25 13:15:04 2007
New Revision: 125062

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=125062
Log:
2007-05-25  Douglas Gregor <doug.gregor@gmail.com>

	PR c++/31431
	PR c++/31432
	PR c++/31434
	PR c++/31435
	PR c++/31437
	PR c++/31438
	PR c++/31442
	PR c++/31443
	PR c++/31444
	PR c++/31445
	* error.c (dump_type): Dump TYPE_ARGUMENT_PACK nodes.
	* cp-tree.h (check_for_bare_parameter_packs): Returns bool.
	* pt.c (check_for_bare_parameter_packs): Return bool indicated
	whether everything was okay. Fix indentation.
	(push_template_decl_real): Check for bare parameter packs in
	function parameters; where errors occur, mark the parameter types
	with ERROR_MARK_NODEs to avert ICEs.
	(coerce_template_parameter_pack): New.
	(coerce_template_parms): Moved parameter pack coercion into
	coerce_template_parameter_pack, and permit it anywhere in the
	template parameter list (not just at the end). Parameter and
	argument indices can vary (somewhat) separately now, so add
	PARM_IDX and ARG_IDX.
	(fn_type_unification): Don't set an argument pack as incomplete if
	no argument pack was deduced.
	(type_unification_real): If a type parameter is a parameter pack
	and has not otherwise been deduced, it will be deduced to an empty
	parameter pack.
	(more_specialized_fn): Use the actual lengths of the argument
	lists when comparing against expansions.
	* semantics.c (finish_member_declaration): If a field's type has
	bare parameter packs, error and set its type to ERROR_MARK_NODE.
	
2007-05-25  Douglas Gregor <doug.gregor@gmail.com>

	PR c++/31431
	PR c++/31432
	PR c++/31434
	PR c++/31435
	PR c++/31437
	PR c++/31438
	PR c++/31442
	PR c++/31443
	PR c++/31444
	PR c++/31445
	* g++.dg/cpp0x/pr31431.C: New.
	* g++.dg/cpp0x/pr31437.C: New.
	* g++.dg/cpp0x/pr31442.C: New.
	* g++.dg/cpp0x/pr31444.C: New.
	* g++.dg/cpp0x/pr31431-2.C: New.
	* g++.dg/cpp0x/pr31432.C: New.
	* g++.dg/cpp0x/pr31434.C: New.
	* g++.dg/cpp0x/pr31438.C: New.
	* g++.dg/cpp0x/pr31443.C: New.
	* g++.dg/cpp0x/pr31445.C: New.
	* g++.dg/cpp0x/variadic-crash1.C: New.

	
	
	

Added:
    trunk/gcc/testsuite/g++.dg/cpp0x/pr31431-2.C
    trunk/gcc/testsuite/g++.dg/cpp0x/pr31431.C
    trunk/gcc/testsuite/g++.dg/cpp0x/pr31432.C
    trunk/gcc/testsuite/g++.dg/cpp0x/pr31434.C
    trunk/gcc/testsuite/g++.dg/cpp0x/pr31437.C
    trunk/gcc/testsuite/g++.dg/cpp0x/pr31438.C
    trunk/gcc/testsuite/g++.dg/cpp0x/pr31442.C
    trunk/gcc/testsuite/g++.dg/cpp0x/pr31443.C
    trunk/gcc/testsuite/g++.dg/cpp0x/pr31444.C
    trunk/gcc/testsuite/g++.dg/cpp0x/pr31445.C
    trunk/gcc/testsuite/g++.dg/cpp0x/variadic-crash1.C
Modified:
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/cp-tree.h
    trunk/gcc/cp/error.c
    trunk/gcc/cp/pt.c
    trunk/gcc/cp/semantics.c
    trunk/gcc/testsuite/ChangeLog

Comment 2 dgregor 2007-05-25 17:54:01 UTC
Fixed on mainline.