https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110996

--- Comment #7 from JuzheZhong <juzhe.zhong at rivai dot ai> ---
(In reply to Mikael Morin from comment #6)
> (In reply to Mikael Morin from comment #5)
> > Here sym->formal_ns is NULL because the symbol C has not been completely
> > setup.
> 
> This makes the following an "obvious" fix:
> 
> diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc
> index 8182ef29f43..5afb9f2e2d3 100644
> --- a/gcc/fortran/decl.cc
> +++ b/gcc/fortran/decl.cc
> @@ -7496,6 +7496,7 @@ gfc_match_function_decl (void)
>      sym->attr.module_procedure = 1;
>  
>    gfc_new_block = sym;
> +  sym->formal_ns = gfc_current_ns;
>  
>    m = gfc_match_formal_arglist (sym, 0, 0);
>    if (m == MATCH_NO)
> @@ -7993,6 +7994,7 @@ gfc_match_subroutine (void)
>      sym = sym->result;
>  
>    gfc_new_block = sym;
> +  sym->formal_ns = gfc_current_ns;
>  
>    /* Check what next non-whitespace character is so we can tell if there
>       is the required parens if we have a BIND(C).  */
> 
> 
> However, that patch makes the situation worse by releasing the namespace for
> "c" too early, as we access it later in reject_statement (it is the
> "current" namespace).

Thanks for helping with this issue. 
Do you have a solution that we can fix RISC-V backend?
Or you will fix it in Fortran front-end?

Thanks.

Reply via email to