]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++: remove NON_DEPENDENT_EXPR, part 1
authorPatrick Palka <ppalka@redhat.com>
Fri, 20 Oct 2023 14:45:00 +0000 (10:45 -0400)
committerPatrick Palka <ppalka@redhat.com>
Fri, 20 Oct 2023 14:45:00 +0000 (10:45 -0400)
commitdad311874ac3b3cf4eca1c04f67cae80c953f7b8
treefe3872c2053d84288e5bdf1986e8f365bc700761
parenteb15fad3190a8b33e3e451b964ff1ecf08bbb113
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: Jason Merrill <jason@redhat.com>
15 files changed:
gcc/c-family/c-warn.cc
gcc/cp/class.cc
gcc/cp/constexpr.cc
gcc/cp/coroutines.cc
gcc/cp/cp-objcp-common.cc
gcc/cp/cp-tree.def
gcc/cp/cp-tree.h
gcc/cp/cvt.cc
gcc/cp/cxx-pretty-print.cc
gcc/cp/error.cc
gcc/cp/expr.cc
gcc/cp/pt.cc
gcc/cp/tree.cc
gcc/cp/typeck.cc
gcc/testsuite/g++.dg/concepts/var-concept3.C