diff options
author | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2020-06-23 18:06:42 +0200 |
---|---|---|
committer | Giuliano Belinassi <giuliano.belinassi@usp.br> | 2020-08-17 13:14:36 -0300 |
commit | cd2db82e7a529f0121784aa90d103110bcd43f1a (patch) | |
tree | cfeff3c7e85fed42eeeba395b5cfde73769d71c9 /gcc | |
parent | e4fa68cadcc3873606aca48cdc704551d8c98ea2 (diff) | |
download | gcc-cd2db82e7a529f0121784aa90d103110bcd43f1a.zip gcc-cd2db82e7a529f0121784aa90d103110bcd43f1a.tar.gz gcc-cd2db82e7a529f0121784aa90d103110bcd43f1a.tar.bz2 |
Minor tweak to elaborate_expression_1
gcc/ada/ChangeLog:
* gcc-interface/decl.c (elaborate_expression_1): When GNAT encodings
are not used, do not create a variable for debug info purposes if
the expression is itself a user-declared variable.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/gcc-interface/decl.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c index 270710b..cad06a4 100644 --- a/gcc/ada/gcc-interface/decl.c +++ b/gcc/ada/gcc-interface/decl.c @@ -6823,6 +6823,18 @@ elaborate_expression_1 (tree gnu_expr, Entity_Id gnat_entity, const char *s, && Nkind (Associated_Node_For_Itype (gnat_entity)) == N_Loop_Parameter_Specification)); + /* If the GNAT encodings are not used, we don't need a variable for debug + info purposes if the expression is a constant or another variable, but + we need to be careful because we do not generate debug info for external + variables so DECL_IGNORED_P is not stable across units. */ + if (need_debug + && gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL + && (TREE_CONSTANT (gnu_expr) + || (!expr_public_p + && DECL_P (gnu_expr) + && !DECL_IGNORED_P (gnu_expr)))) + need_debug = false; + /* Now create it, possibly only for debugging purposes. */ if (use_variable || need_debug) { @@ -6843,10 +6855,7 @@ elaborate_expression_1 (tree gnu_expr, Entity_Id gnat_entity, const char *s, variable only if the variable is used by the generated code. Returning the variable ensures the caller will use it in generated code. Note that there is no need for a location if the debug info - contains an integer constant. - TODO: when the encoding-based debug scheme is dropped, move this - condition to the top-level IF block: we will not need to create a - variable anymore in such cases, then. */ + contains an integer constant. */ if (use_variable || (need_debug && !TREE_CONSTANT (gnu_expr))) return gnu_decl; } |