Files
gcc-reflection/gcc/cif-code.def
Michal Jires cf4eb26905 lto: Add must_remain_in_tu flags to symtab_node
With toplevel assembly we are sometimes not allowed to globalize static
symbols. So such symbols cannot be in more than one partition.

must_remain_in_tu_* guarantee that such symbols or references to them do
not escape the original translation unit. Thus 1to1 partitioning is always
valid.

gcc/ChangeLog:

	* cgraph.h: Add must_remain_in_tu_*.
	* cgraphclones.cc (cgraph_node::create_clone): Propagate
	must_remain_in_tu_body.
	* cif-code.def (MUST_REMAIN_IN_TU): New.
	* ipa-icf.cc (sem_function::equals_wpa): Check
	must_remain_in_tu_*
	(sem_variable::equals_wpa): Likewise.
	* ipa-inline-transform.cc (inline_call): Propagate
	must_remain_in_tu_body.
	* ipa-inline.cc (can_inline_edge_p): Check
	must_remain_in_tu_body.
	* lto-cgraph.cc (lto_output_node): Output must_remain_in_tu_*
	(lto_output_varpool_node): Likewise.
	(input_overwrite_node): Input must_remain_in_tu_*.
	(input_varpool_node): Likewise.
	* tree.cc (decl_address_ip_invariant_p): Check
	must_remain_in_tu_name.
	* varpool.cc (varpool_node::ctor_useable_for_folding_p): Check
	must_remain_in_tu_body.

gcc/lto/ChangeLog:

	* lto-symtab.cc (lto_cgraph_replace_node): Propagate
	must_remain_in_tu_*.
	(lto_varpool_replace_node): Likewise.
2026-01-11 22:48:54 +01:00

155 lines
5.9 KiB
Modula-2

/* This file contains the definitions of the cgraph_inline_failed_t
enums used in GCC.
Copyright (C) 2008-2026 Free Software Foundation, Inc.
Contributed by Doug Kwan <dougkwan@google.com>
This file is part of GCC.
GCC is free software you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation either version 3, or (at your option) any later
version.
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with GCC see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
/* The format of this file is
DEFCIFCODE(code, string).
Where symbol is the enumeration name without the ``''.
The argument STRING is a explain the failure. Except for OK,
which is a NULL pointer. */
/* Inlining successful. This must be the first code. */
DEFCIFCODE(OK, CIF_FINAL_NORMAL, NULL)
/* Inlining failed for an unspecified reason. */
DEFCIFCODE(UNSPECIFIED, CIF_FINAL_ERROR, "")
/* Function has not be considered for inlining. This is the code for
functions that have not been rejected for inlining yet. */
DEFCIFCODE(FUNCTION_NOT_CONSIDERED, CIF_FINAL_NORMAL,
N_("function not considered for inlining"))
/* Caller is compiled with optimizations disabled. */
DEFCIFCODE(FUNCTION_NOT_OPTIMIZED, CIF_FINAL_ERROR,
N_("caller is not optimized"))
/* Inlining failed owing to unavailable function body. */
DEFCIFCODE(BODY_NOT_AVAILABLE, CIF_FINAL_ERROR,
N_("function body not available"))
/* Extern inline function that has been redefined. */
DEFCIFCODE(REDEFINED_EXTERN_INLINE, CIF_FINAL_ERROR,
N_("redefined extern inline functions are not considered for "
"inlining"))
/* Function is not inlinable. */
DEFCIFCODE(FUNCTION_NOT_INLINABLE, CIF_FINAL_ERROR,
N_("function not inlinable"))
/* Function is overwritable. */
DEFCIFCODE(OVERWRITABLE, CIF_FINAL_ERROR,
N_("function body can be overwritten at link time"))
/* Function is not an inlining candidate. */
DEFCIFCODE(FUNCTION_NOT_INLINE_CANDIDATE, CIF_FINAL_NORMAL,
N_("function not inline candidate"))
/* Inlining failed because of various limit parameters. */
DEFCIFCODE(LARGE_FUNCTION_GROWTH_LIMIT, CIF_FINAL_NORMAL,
N_("--param large-function-growth limit reached"))
DEFCIFCODE(LARGE_STACK_FRAME_GROWTH_LIMIT, CIF_FINAL_NORMAL,
N_("--param large-stack-frame-growth limit reached"))
DEFCIFCODE(MAX_INLINE_INSNS_SINGLE_LIMIT, CIF_FINAL_NORMAL,
N_("--param max-inline-insns-single limit reached"))
DEFCIFCODE(MAX_INLINE_INSNS_AUTO_LIMIT, CIF_FINAL_NORMAL,
N_("--param max-inline-insns-auto limit reached"))
DEFCIFCODE(INLINE_UNIT_GROWTH_LIMIT, CIF_FINAL_NORMAL,
N_("--param inline-unit-growth limit reached"))
/* Recursive inlining. */
DEFCIFCODE(RECURSIVE_INLINING, CIF_FINAL_NORMAL,
N_("recursive inlining"))
/* Call is unlikely. */
DEFCIFCODE(UNLIKELY_CALL, CIF_FINAL_NORMAL,
N_("call is unlikely and code size would grow"))
/* Call is considered never executed. */
DEFCIFCODE(NEVER_CALL, CIF_FINAL_NORMAL,
N_("call is considered never executed and code size would grow"))
/* Function is not declared as inline. */
DEFCIFCODE(NOT_DECLARED_INLINED, CIF_FINAL_NORMAL,
N_("function not declared inline and code size would grow"))
/* Caller and callee disagree on the arguments. */
DEFCIFCODE(LTO_MISMATCHED_DECLARATIONS, CIF_FINAL_ERROR,
N_("mismatched declarations during linktime optimization"))
/* Caller is variadic thunk. */
DEFCIFCODE(VARIADIC_THUNK, CIF_FINAL_ERROR,
N_("variadic thunk call"))
/* Call was originally indirect. */
DEFCIFCODE(ORIGINALLY_INDIRECT_CALL, CIF_FINAL_NORMAL,
N_("originally indirect function call not considered for inlining"))
/* Ths edge represents an indirect edge with a yet-undetermined callee . */
DEFCIFCODE(INDIRECT_UNKNOWN_CALL, CIF_FINAL_NORMAL,
N_("indirect function call with a yet undetermined callee"))
/* We can't inline different EH personalities together. */
DEFCIFCODE(EH_PERSONALITY, CIF_FINAL_ERROR,
N_("exception handling personality mismatch"))
/* We can't inline if the callee can throw non-call exceptions but the
caller cannot. */
DEFCIFCODE(NON_CALL_EXCEPTIONS, CIF_FINAL_ERROR,
N_("non-call exception handling mismatch"))
/* We can't inline because of mismatched target specific options. */
DEFCIFCODE(TARGET_OPTION_MISMATCH, CIF_FINAL_ERROR,
N_("target specific option mismatch"))
/* We can't inline because of mismatched optimization levels. */
DEFCIFCODE(OPTIMIZATION_MISMATCH, CIF_FINAL_ERROR,
N_("optimization level attribute mismatch"))
/* We can't inline because the callee refers to comdat-local symbols. */
DEFCIFCODE(USES_COMDAT_LOCAL, CIF_FINAL_NORMAL,
N_("callee refers to comdat-local symbols"))
/* We can't inline because of mismatched caller/callee
sanitizer attributes. */
DEFCIFCODE(SANITIZE_ATTRIBUTE_MISMATCH, CIF_FINAL_ERROR,
N_("sanitizer function attribute mismatch"))
/* We can't inline because the user requests only static functions
but the function has external linkage for live patching purpose. */
DEFCIFCODE(EXTERN_LIVE_ONLY_STATIC, CIF_FINAL_ERROR,
N_("function has external linkage when the user requests only"
" inlining static for live patching"))
/* We can't inline because callee must remain in translation unit
and caller is in another. */
DEFCIFCODE(MUST_REMAIN_IN_TU, CIF_FINAL_ERROR,
N_("callee must remain in translation unit"))
/* We proved that the call is unreachable. */
DEFCIFCODE(UNREACHABLE, CIF_FINAL_ERROR,
N_("unreachable"))
/* Callback edges cannot be inlined, as the corresponding call
statement does not exist. */
DEFCIFCODE(CALLBACK_EDGE, CIF_FINAL_ERROR,
N_("callback edges cannot be inlined"))