Alexandre Oliva <aol...@redhat.com> a écrit: [...]
> Anyway, the problem is that, for some unsuitable candidate template > specializations, tsubst returns error_mark_node, which tsubst_decl > stores in argvec, and later on register_specialization gets this > error_mark_node and tries to access it as a tree_vec. > > The trivial patch that avoids the misbehavior is returning > error_mark_node as soon as we get that for argvec. Bootstrapped on > i686-pc-linux-gnu and x86_64-linux-gnu, regstrapped on the latter. > > Ok to install? FYI, this has been reported as http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53209, so you might add a reference to that bug in the ChangeLog. Other than that, I cannot approve or reject this patch, but FWIW, it looks fine to me. Let's CC jason. > for gcc/cp/ChangeLog > from Alexandre Oliva <aol...@redhat.com> > > * pt.c (tsubst_decl): Bail out if argvec is error_mark_node. > > Index: gcc/cp/pt.c > =================================================================== > --- gcc/cp/pt.c.orig 2012-04-30 15:34:44.018432544 -0300 > +++ gcc/cp/pt.c 2012-04-30 15:34:47.988375071 -0300 > @@ -10626,6 +10626,8 @@ tsubst_decl (tree t, tree args, tsubst_f > tmpl = DECL_TI_TEMPLATE (t); > gen_tmpl = most_general_template (tmpl); > argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl); > + if (argvec == error_mark_node) > + RETURN (error_mark_node); > hash = hash_tmpl_and_args (gen_tmpl, argvec); > spec = retrieve_specialization (gen_tmpl, argvec, hash); > } Thanks. -- Dodji