This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Hi!
When building new with processing_template_decl, where neither args, placement
nor type are type dependent, but something is value dependent, build_new
might create NON_DEPENDENT_EXPRs:
if (processing_template_decl)
{
if (dependent_type_p (type)
|| any_type_dependent_arguments_p (placement)
|| (nelts && type_dependent_expression_p (nelts))
|| (init != void_zero_node
&& any_type_dependent_arguments_p (init)))
return build_raw_new_expr (placement, type, nelts, init,
use_global_new);
placement = build_non_dependent_args (placement);
if (nelts)
nelts = build_non_dependent_expr (nelts);
if (init != void_zero_node)
init = build_non_dependent_args (init);
}
and call build_new_1 with that. But stabilize_expr doesn't really like
to be called with NON_DEPENDENT_EXPR with side effects, e.g. get_target_expr
on it won't return a TARGET_EXPR, and there is really no point in
stabilizing expressions in templates, all we care about is issue proper
diagnostic and then throw everything away and just build_raw_new_expr
from the original arguments.
Attached are 2 possible approaches, one modifies stabilize_call and
stabilize_init to return immediately if processing_template_decl
(similarly e.g. to how cp_save_expr returns immediately), the other
modifies the caller (build_new_1) not to call these when
processing_template_decl. stabilize_call is only called by stabilize_init
and build_new_1, stabilize_init is only called by build_new_1 and
build_throw (but the later only if !processing_template_decl).
So both patches are functionally equivalent. I've regtested both with
make check-g++ and will throw the first one in the bootstrap/full regtest
I'm about to start.
Ok for trunk? Which one?
Jakub
Attachment:
Z86
Description: Text document
Attachment:
Z86a
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |