Skip to content
Snippets Groups Projects
Commit dad31187 authored by Patrick Palka's avatar Patrick Palka
Browse files

c++: remove NON_DEPENDENT_EXPR, part 1

This tree code dates all the way back to r69130[1] which implemented
typing of non-dependent expressions.  Its motivation was never clear (to
me at least) since its documentation in e.g. cp-tree.def doesn't seem
accurate anymore.  build_non_dependent_expr has since gained a bunch of
edge cases about whether or how to wrap certain templated trees, making
it hard to reason about in general.

So this patch removes this tree code, and temporarily turns
build_non_dependent_expr into the identity function.  The subsequent
patch will remove build_non_dependent_expr and adjust its callers
appropriately.

We now need to more thoroughly handle templated (sub)trees in a couple
of places which previously didn't need to since they didn't look through
NON_DEPENDENT_EXPR.

[1]: https://gcc.gnu.org/pipermail/gcc-patches/2003-July/109355.html



gcc/c-family/ChangeLog:

	* c-warn.cc (check_address_or_pointer_of_packed_member): Handle
	type-dependent callee of CALL_EXPR.

gcc/cp/ChangeLog:

	* class.cc (instantiate_type): Remove NON_DEPENDENT_EXPR
	handling.
	* constexpr.cc (cxx_eval_constant_expression): Likewise.
	(potential_constant_expression_1): Likewise.
	* coroutines.cc (coro_validate_builtin_call): Don't
	expect ALIGNOF_EXPR to be wrapped in NON_DEPENDENT_EXPR.
	* cp-objcp-common.cc (cp_common_init_ts): Remove
	NON_DEPENDENT_EXPR handling.
	* cp-tree.def (NON_DEPENDENT_EXPR): Remove.
	* cp-tree.h (build_non_dependent_expr): Temporarily redefine as
	the identity function.
	* cvt.cc (maybe_warn_nodiscard): Handle type-dependent and
	variable callee of CALL_EXPR.
	* cxx-pretty-print.cc (cxx_pretty_printer::expression): Remove
	NON_DEPENDENT_EXPR handling.
	* error.cc (dump_decl): Likewise.
	(dump_expr): Likewise.
	* expr.cc (mark_use): Likewise.
	(mark_exp_read): Likewise.
	* pt.cc (build_non_dependent_expr): Remove.
	* tree.cc (lvalue_kind): Remove NON_DEPENDENT_EXPR handling.
	(cp_stabilize_reference): Likewise.
	* typeck.cc (warn_for_null_address): Likewise.
	(cp_build_binary_op): Handle type-dependent SIZEOF_EXPR operands.
	(cp_build_unary_op) <case TRUTH_NOT_EXPR>: Don't fold inside a
	template.

gcc/testsuite/ChangeLog:

	* g++.dg/concepts/var-concept3.C: Adjust expected diagnostic
	for attempting to call a variable concept.

Reviewed-by: default avatarJason Merrill <jason@redhat.com>
parent eb15fad3
No related branches found
No related tags found
No related merge requests found
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment