summaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-decl.c
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2016-08-15 09:50:33 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2016-08-15 09:50:33 +0000
commit4d8caf18251a82c67d3cfe3583b7eb41223d3193 (patch)
tree081e5d0d4e40144ee0cd92dbd5c087ccd07cebd2 /gcc/fortran/trans-decl.c
parent5790765518c78737ef7c56d34a62b8e62262734a (diff)
downloadgcc-4d8caf18251a82c67d3cfe3583b7eb41223d3193.tar.gz
PR debug/71906
* dwarf2out.c (string_types): New variable. (gen_array_type_die): Change early_dwarf handling of DW_AT_string_length, create DW_OP_call4 referencing the length var temporarily. Handle parameters that are pointers to string length. (adjust_string_types): New function. (gen_subprogram_die): Temporarily set string_types to local var, call adjust_string_types if needed. (non_dwarf_expression, copy_deref_exprloc, optimize_string_length): New functions. (resolve_addr): Adjust DW_AT_string_length if it is DW_OP_call4. * trans-decl.c (gfc_get_symbol_decl): Call gfc_finish_var_decl for decl's character length before gfc_finish_var_decl on the decl itself. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@239469 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/trans-decl.c')
-rw-r--r--gcc/fortran/trans-decl.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index 2a34a4c2346..25b846e7b85 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -1676,26 +1676,23 @@ gfc_get_symbol_decl (gfc_symbol * sym)
&& !(sym->attr.use_assoc && !intrinsic_array_parameter)))
gfc_defer_symbol_init (sym);
+ /* Associate names can use the hidden string length variable
+ of their associated target. */
+ if (sym->ts.type == BT_CHARACTER
+ && TREE_CODE (length) != INTEGER_CST)
+ {
+ gfc_finish_var_decl (length, sym);
+ gcc_assert (!sym->value);
+ }
+
gfc_finish_var_decl (decl, sym);
if (sym->ts.type == BT_CHARACTER)
- {
- /* Character variables need special handling. */
- gfc_allocate_lang_decl (decl);
-
- /* Associate names can use the hidden string length variable
- of their associated target. */
- if (TREE_CODE (length) != INTEGER_CST)
- {
- gfc_finish_var_decl (length, sym);
- gcc_assert (!sym->value);
- }
- }
+ /* Character variables need special handling. */
+ gfc_allocate_lang_decl (decl);
else if (sym->attr.subref_array_pointer)
- {
- /* We need the span for these beasts. */
- gfc_allocate_lang_decl (decl);
- }
+ /* We need the span for these beasts. */
+ gfc_allocate_lang_decl (decl);
if (sym->attr.subref_array_pointer)
{