diff options
Diffstat (limited to 'gcc/ada/gcc-interface/decl.cc')
-rw-r--r-- | gcc/ada/gcc-interface/decl.cc | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/ada/gcc-interface/decl.cc b/gcc/ada/gcc-interface/decl.cc index 2d9b41f..50d17f7 100644 --- a/gcc/ada/gcc-interface/decl.cc +++ b/gcc/ada/gcc-interface/decl.cc @@ -630,6 +630,17 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) break; case E_Constant: + /* If this is a constant related to a return in a function returning by + invisible reference without expression, get the return object. */ + if (Is_Related_To_Func_Return (gnat_entity) + && current_function_decl + && TREE_ADDRESSABLE (TREE_TYPE (current_function_decl)) + && !gnu_expr) + { + gnu_decl = DECL_RESULT (current_function_decl); + break; + } + /* Ignore constant definitions already marked with the error node. See the N_Object_Declaration case of gnat_to_gnu for the rationale. */ if (definition |