From e0af8f52b10385d859d60a4ee6b89d274e4044bb Mon Sep 17 00:00:00 2001 From: "Steven G. Kargl" Date: Tue, 6 Aug 2019 21:32:09 +0000 Subject: re PR fortran/91359 (logical function X returns .TRUE. - Warning: spaghetti code) 2019-08-06 Steven G. Kargl PR fortran/91359 * trans-decl.c (gfc_generate_return): Ensure something is returned from a function. 2019-08-06 Steven G. Kargl PR fortran/91359 * gfortran.dg/pr91359_1.f: New test. * gfortran.dg/pr91359_2.f: Ditto. From-SVN: r274149 --- gcc/fortran/trans-decl.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'gcc/fortran/trans-decl.c') diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 96f0e1e..86c3d3a 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -6449,6 +6449,20 @@ gfc_generate_return (void) TREE_TYPE (result), DECL_RESULT (fndecl), result); } + else + { + /* If the function does not have a result variable, result is + NULL_TREE, and a 'return' is generated without a variable. + The following generates a 'return __result_XXX' where XXX is + the function name. */ + if (sym == sym->result && sym->attr.function) + { + result = gfc_get_fake_result_decl (sym, 0); + result = fold_build2_loc (input_location, MODIFY_EXPR, + TREE_TYPE (result), + DECL_RESULT (fndecl), result); + } + } } return build1_v (RETURN_EXPR, result); -- cgit v1.1