Map filename from print in gfortran with -ffile-prefix-map (PR96069)

Message ID CAMvDr+SVwKN0q8g5KhZsA+=h-x10jv6ojZAO4ba2ZUcguicKsg@mail.gmail.com
State New
Headers show
Series
  • Map filename from print in gfortran with -ffile-prefix-map (PR96069)
Related show

Commit Message

Jason Merrill via Gcc-patches July 6, 2020, 12:50 a.m.
Sorry I think I accidentally had rich text mode on and also forgot the
`[PATCH]` in the title in the previous email... Try again...

Currently this is using the macro prefix map without allowing the
-fmacro-prefix-map argument, which is arguably pretty weird... but I
don't know what would be a better way.

I think this remapping should happen with `file-prefix-map` but
shouldn't with `debug-prefix-map` (though if it happens for both it's
also not too bad) and I believe this patch is the minimum change to
achieve that. I think it makes sense to make this follow
`macro-prefix-map` although I'm not sure if this is a macro... (OTOH,
__builtin_FILE isn't a macro either so maybe it's fine?). I haven't
figured out how I can allow the option in gfortran or how to document
this new behavior though (e.g. I actually don't know what this is
called in fortran...)

---
 gcc/fortran/trans-io.c                |  3 ++-
gcc/testsuite/gfortran.dg/pr96069.f90 | 11 +++++++++++
2 files changed, 13 insertions(+), 1 deletion(-)
create mode 100644 gcc/testsuite/gfortran.dg/pr96069.f90

--
2.27.0

Comments

Jason Merrill via Gcc-patches July 6, 2020, 1:29 a.m. | #1
> I think this remapping should happen with `file-prefix-map` but

> shouldn't with `debug-prefix-map` (though if it happens for both it's

> also not too bad) and I believe this patch is the minimum change to

> achieve that. I think it makes sense to make this follow

> `macro-prefix-map` although I'm not sure if this is a macro... (OTOH,

> __builtin_FILE isn't a macro either so maybe it's fine?). I haven't

> figured out how I can allow the option in gfortran or how to document

> this new behavior though (e.g. I actually don't know what this is

> called in fortran...)


And here's a version that makes -fmacro-prefix-remap a common option.

---
diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c
index 9b6300f330f..6d105e24f16 100644
--- a/gcc/c-family/c-opts.c
+++ b/gcc/c-family/c-opts.c
@@ -40,7 +40,6 @@ along with GCC; see the file COPYING3.  If not see
#include "plugin.h"            /* For PLUGIN_INCLUDE_FILE event.  */
#include "mkdeps.h"
#include "dumpfile.h"
-#include "file-prefix-map.h"    /* add_*_prefix_map()  */

#ifndef DOLLARS_IN_IDENTIFIERS
# define DOLLARS_IN_IDENTIFIERS true
@@ -443,10 +442,6 @@ c_common_handle_option (size_t scode, const char
*arg, HOST_WIDE_INT value
,
      cpp_opts->dollars_in_ident = value;
      break;

-    case OPT_fmacro_prefix_map_:
-      add_macro_prefix_map (arg);
-      break;
-
    case OPT_ffreestanding:
      value = !value;
      /* Fall through.  */
diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
index 89a58282b3f..bf9899d1aef 100644
--- a/gcc/c-family/c.opt
+++ b/gcc/c-family/c.opt
@@ -1517,10 +1517,6 @@ fdollars-in-identifiers
C ObjC C++ ObjC++
Permit '$' as an identifier character.

-fmacro-prefix-map=
-C ObjC C++ ObjC++ Joined RejectNegative
--fmacro-prefix-map=<old>=<new> Map one directory name to another in
__FILE__, __BASE_FILE__, a
nd __builtin_FILE().
-
fdump-ada-spec
C ObjC C++ ObjC++ RejectNegative Var(flag_dump_ada_spec)
Write all declarations as Ada code transitively.
diff --git a/gcc/common.opt b/gcc/common.opt
index df8af365d1b..e018716af89 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -1217,6 +1217,10 @@ fdebug-prefix-map=
Common Joined RejectNegative Var(common_deferred_options) Defer
-fdebug-prefix-map=<old>=<new> Map one directory name to another in
debug information.

+fmacro-prefix-map=
+Common Joined RejectNegative Var(common_deferred_options) Defer
+-fmacro-prefix-map=<old>=<new> Map one directory name to another in
__FILE__, __BASE_FILE__, a
nd __builtin_FILE().
+
ffile-prefix-map=
Common Joined RejectNegative Var(common_deferred_options) Defer
-ffile-prefix-map=<old>=<new>  Map one directory name to another in
compilation result.
diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c
index 21bdd5ef0d8..4d406493603 100644
--- a/gcc/fortran/trans-io.c
+++ b/gcc/fortran/trans-io.c
@@ -33,6 +33,7 @@ along with GCC; see the file COPYING3.  If not see
#include "trans-types.h"
#include "trans-const.h"
#include "options.h"
+#include "file-prefix-map.h" /* remap_macro_filename()  */

/* Members of the ioparm structure.  */

@@ -1026,7 +1027,7 @@ set_error_locus (stmtblock_t * block, tree var,
locus * where)
                               TREE_TYPE (p->field), locus_file,
                               p->field, NULL_TREE);
  f = where->lb->file;
-  str = gfc_build_cstring_const (f->filename);
+  str = gfc_build_cstring_const (remap_macro_filename(f->filename));

  str = gfc_build_addr_expr (pchar_type_node, str);
  gfc_add_modify (block, locus_file, str);
diff --git a/gcc/opts-global.c b/gcc/opts-global.c
index b1a8429dc3c..574db430430 100644
--- a/gcc/opts-global.c
+++ b/gcc/opts-global.c
@@ -380,6 +380,10 @@ handle_common_deferred_options (void)
         add_debug_prefix_map (opt->arg);
         break;

+       case OPT_fmacro_prefix_map_:
+         add_macro_prefix_map (opt->arg);
+         break;
+
       case OPT_ffile_prefix_map_:
         add_file_prefix_map (opt->arg);
         break;
diff --git a/gcc/testsuite/gfortran.dg/pr96069.f90
b/gcc/testsuite/gfortran.dg/pr96069.f90
new file mode 100644
index 00000000000..d7fed59a150
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr96069.f90
@@ -0,0 +1,11 @@
+! { dg-do compile }
+! { dg-options "-fmacro-prefix-map==MACRO-PREFIX" }
+
+subroutine f(name)
+  implicit none
+  character*(*) name
+  print *,name
+  return
+end subroutine f
+
+! { dg-final { scan-assembler ".string\t\"MACRO-PREFIX" } }



>

> ---

>  gcc/fortran/trans-io.c                |  3 ++-

> gcc/testsuite/gfortran.dg/pr96069.f90 | 11 +++++++++++

> 2 files changed, 13 insertions(+), 1 deletion(-)

> create mode 100644 gcc/testsuite/gfortran.dg/pr96069.f90

>

> diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c

> index 21bdd5ef0d8..4d406493603 100644

> --- a/gcc/fortran/trans-io.c

> +++ b/gcc/fortran/trans-io.c

> @@ -33,6 +33,7 @@ along with GCC; see the file COPYING3.  If not see

> #include "trans-types.h"

> #include "trans-const.h"

> #include "options.h"

> +#include "file-prefix-map.h" /* remap_macro_filename()  */

>

> /* Members of the ioparm structure.  */

>

> @@ -1026,7 +1027,7 @@ set_error_locus (stmtblock_t * block, tree var,

> locus * where)

>                                TREE_TYPE (p->field), locus_file,

>                                p->field, NULL_TREE);

>   f = where->lb->file;

> -  str = gfc_build_cstring_const (f->filename);

> +  str = gfc_build_cstring_const (remap_macro_filename(f->filename));

>

>   str = gfc_build_addr_expr (pchar_type_node, str);

>   gfc_add_modify (block, locus_file, str);

> diff --git a/gcc/testsuite/gfortran.dg/pr96069.f90

> b/gcc/testsuite/gfortran.dg/pr96069.f90

> new file mode 100644

> index 00000000000..de8bd3a14de

> --- /dev/null

> +++ b/gcc/testsuite/gfortran.dg/pr96069.f90

> @@ -0,0 +1,11 @@

> +! { dg-do compile }

> +! { dg-options "-ffile-prefix-map==MACRO-PREFIX" }

> +

> +subroutine f(name)

> +  implicit none

> +  character*(*) name

> +  print *,name

> +  return

> +end subroutine f

> +

> +! { dg-final { scan-assembler ".string\t\"MACRO-PREFIX" } }

> --

> 2.27.0
Jason Merrill via Gcc-patches July 8, 2020, 1:52 p.m. | #2
Forwarding to fortran@gcc.gnu.org as suggested by Dominique d'Humieres.

On Sun, Jul 5, 2020 at 9:29 PM Yichao Yu <yyc1992@gmail.com> wrote:
>

> > I think this remapping should happen with `file-prefix-map` but

> > shouldn't with `debug-prefix-map` (though if it happens for both it's

> > also not too bad) and I believe this patch is the minimum change to

> > achieve that. I think it makes sense to make this follow

> > `macro-prefix-map` although I'm not sure if this is a macro... (OTOH,

> > __builtin_FILE isn't a macro either so maybe it's fine?). I haven't

> > figured out how I can allow the option in gfortran or how to document

> > this new behavior though (e.g. I actually don't know what this is

> > called in fortran...)

>

> And here's a version that makes -fmacro-prefix-remap a common option.

>

> ---

> diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c

> index 9b6300f330f..6d105e24f16 100644

> --- a/gcc/c-family/c-opts.c

> +++ b/gcc/c-family/c-opts.c

> @@ -40,7 +40,6 @@ along with GCC; see the file COPYING3.  If not see

> #include "plugin.h"            /* For PLUGIN_INCLUDE_FILE event.  */

> #include "mkdeps.h"

> #include "dumpfile.h"

> -#include "file-prefix-map.h"    /* add_*_prefix_map()  */

>

> #ifndef DOLLARS_IN_IDENTIFIERS

> # define DOLLARS_IN_IDENTIFIERS true

> @@ -443,10 +442,6 @@ c_common_handle_option (size_t scode, const char

> *arg, HOST_WIDE_INT value

> ,

>       cpp_opts->dollars_in_ident = value;

>       break;

>

> -    case OPT_fmacro_prefix_map_:

> -      add_macro_prefix_map (arg);

> -      break;

> -

>     case OPT_ffreestanding:

>       value = !value;

>       /* Fall through.  */

> diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt

> index 89a58282b3f..bf9899d1aef 100644

> --- a/gcc/c-family/c.opt

> +++ b/gcc/c-family/c.opt

> @@ -1517,10 +1517,6 @@ fdollars-in-identifiers

> C ObjC C++ ObjC++

> Permit '$' as an identifier character.

>

> -fmacro-prefix-map=

> -C ObjC C++ ObjC++ Joined RejectNegative

> --fmacro-prefix-map=<old>=<new> Map one directory name to another in

> __FILE__, __BASE_FILE__, a

> nd __builtin_FILE().

> -

> fdump-ada-spec

> C ObjC C++ ObjC++ RejectNegative Var(flag_dump_ada_spec)

> Write all declarations as Ada code transitively.

> diff --git a/gcc/common.opt b/gcc/common.opt

> index df8af365d1b..e018716af89 100644

> --- a/gcc/common.opt

> +++ b/gcc/common.opt

> @@ -1217,6 +1217,10 @@ fdebug-prefix-map=

> Common Joined RejectNegative Var(common_deferred_options) Defer

> -fdebug-prefix-map=<old>=<new> Map one directory name to another in

> debug information.

>

> +fmacro-prefix-map=

> +Common Joined RejectNegative Var(common_deferred_options) Defer

> +-fmacro-prefix-map=<old>=<new> Map one directory name to another in

> __FILE__, __BASE_FILE__, a

> nd __builtin_FILE().

> +

> ffile-prefix-map=

> Common Joined RejectNegative Var(common_deferred_options) Defer

> -ffile-prefix-map=<old>=<new>  Map one directory name to another in

> compilation result.

> diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c

> index 21bdd5ef0d8..4d406493603 100644

> --- a/gcc/fortran/trans-io.c

> +++ b/gcc/fortran/trans-io.c

> @@ -33,6 +33,7 @@ along with GCC; see the file COPYING3.  If not see

> #include "trans-types.h"

> #include "trans-const.h"

> #include "options.h"

> +#include "file-prefix-map.h" /* remap_macro_filename()  */

>

> /* Members of the ioparm structure.  */

>

> @@ -1026,7 +1027,7 @@ set_error_locus (stmtblock_t * block, tree var,

> locus * where)

>                                TREE_TYPE (p->field), locus_file,

>                                p->field, NULL_TREE);

>   f = where->lb->file;

> -  str = gfc_build_cstring_const (f->filename);

> +  str = gfc_build_cstring_const (remap_macro_filename(f->filename));

>

>   str = gfc_build_addr_expr (pchar_type_node, str);

>   gfc_add_modify (block, locus_file, str);

> diff --git a/gcc/opts-global.c b/gcc/opts-global.c

> index b1a8429dc3c..574db430430 100644

> --- a/gcc/opts-global.c

> +++ b/gcc/opts-global.c

> @@ -380,6 +380,10 @@ handle_common_deferred_options (void)

>          add_debug_prefix_map (opt->arg);

>          break;

>

> +       case OPT_fmacro_prefix_map_:

> +         add_macro_prefix_map (opt->arg);

> +         break;

> +

>        case OPT_ffile_prefix_map_:

>          add_file_prefix_map (opt->arg);

>          break;

> diff --git a/gcc/testsuite/gfortran.dg/pr96069.f90

> b/gcc/testsuite/gfortran.dg/pr96069.f90

> new file mode 100644

> index 00000000000..d7fed59a150

> --- /dev/null

> +++ b/gcc/testsuite/gfortran.dg/pr96069.f90

> @@ -0,0 +1,11 @@

> +! { dg-do compile }

> +! { dg-options "-fmacro-prefix-map==MACRO-PREFIX" }

> +

> +subroutine f(name)

> +  implicit none

> +  character*(*) name

> +  print *,name

> +  return

> +end subroutine f

> +

> +! { dg-final { scan-assembler ".string\t\"MACRO-PREFIX" } }

>

>

>

> >

> > ---

> >  gcc/fortran/trans-io.c                |  3 ++-

> > gcc/testsuite/gfortran.dg/pr96069.f90 | 11 +++++++++++

> > 2 files changed, 13 insertions(+), 1 deletion(-)

> > create mode 100644 gcc/testsuite/gfortran.dg/pr96069.f90

> >

> > diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c

> > index 21bdd5ef0d8..4d406493603 100644

> > --- a/gcc/fortran/trans-io.c

> > +++ b/gcc/fortran/trans-io.c

> > @@ -33,6 +33,7 @@ along with GCC; see the file COPYING3.  If not see

> > #include "trans-types.h"

> > #include "trans-const.h"

> > #include "options.h"

> > +#include "file-prefix-map.h" /* remap_macro_filename()  */

> >

> > /* Members of the ioparm structure.  */

> >

> > @@ -1026,7 +1027,7 @@ set_error_locus (stmtblock_t * block, tree var,

> > locus * where)

> >                                TREE_TYPE (p->field), locus_file,

> >                                p->field, NULL_TREE);

> >   f = where->lb->file;

> > -  str = gfc_build_cstring_const (f->filename);

> > +  str = gfc_build_cstring_const (remap_macro_filename(f->filename));

> >

> >   str = gfc_build_addr_expr (pchar_type_node, str);

> >   gfc_add_modify (block, locus_file, str);

> > diff --git a/gcc/testsuite/gfortran.dg/pr96069.f90

> > b/gcc/testsuite/gfortran.dg/pr96069.f90

> > new file mode 100644

> > index 00000000000..de8bd3a14de

> > --- /dev/null

> > +++ b/gcc/testsuite/gfortran.dg/pr96069.f90

> > @@ -0,0 +1,11 @@

> > +! { dg-do compile }

> > +! { dg-options "-ffile-prefix-map==MACRO-PREFIX" }

> > +

> > +subroutine f(name)

> > +  implicit none

> > +  character*(*) name

> > +  print *,name

> > +  return

> > +end subroutine f

> > +

> > +! { dg-final { scan-assembler ".string\t\"MACRO-PREFIX" } }

> > --

> > 2.27.0
Jason Merrill via Gcc-patches July 28, 2020, 3:12 p.m. | #3
> > > I think this remapping should happen with `file-prefix-map` but

> > > shouldn't with `debug-prefix-map` (though if it happens for both it's

> > > also not too bad) and I believe this patch is the minimum change to

> > > achieve that. I think it makes sense to make this follow

> > > `macro-prefix-map` although I'm not sure if this is a macro... (OTOH,

> > > __builtin_FILE isn't a macro either so maybe it's fine?). I haven't

> > > figured out how I can allow the option in gfortran or how to document

> > > this new behavior though (e.g. I actually don't know what this is

> > > called in fortran...)


Any comments?

> >

> > And here's a version that makes -fmacro-prefix-remap a common option.

> >

> > ---

> > diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c

> > index 9b6300f330f..6d105e24f16 100644

> > --- a/gcc/c-family/c-opts.c

> > +++ b/gcc/c-family/c-opts.c

> > @@ -40,7 +40,6 @@ along with GCC; see the file COPYING3.  If not see

> > #include "plugin.h"            /* For PLUGIN_INCLUDE_FILE event.  */

> > #include "mkdeps.h"

> > #include "dumpfile.h"

> > -#include "file-prefix-map.h"    /* add_*_prefix_map()  */

> >

> > #ifndef DOLLARS_IN_IDENTIFIERS

> > # define DOLLARS_IN_IDENTIFIERS true

> > @@ -443,10 +442,6 @@ c_common_handle_option (size_t scode, const char

> > *arg, HOST_WIDE_INT value

> > ,

> >       cpp_opts->dollars_in_ident = value;

> >       break;

> >

> > -    case OPT_fmacro_prefix_map_:

> > -      add_macro_prefix_map (arg);

> > -      break;

> > -

> >     case OPT_ffreestanding:

> >       value = !value;

> >       /* Fall through.  */

> > diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt

> > index 89a58282b3f..bf9899d1aef 100644

> > --- a/gcc/c-family/c.opt

> > +++ b/gcc/c-family/c.opt

> > @@ -1517,10 +1517,6 @@ fdollars-in-identifiers

> > C ObjC C++ ObjC++

> > Permit '$' as an identifier character.

> >

> > -fmacro-prefix-map=

> > -C ObjC C++ ObjC++ Joined RejectNegative

> > --fmacro-prefix-map=<old>=<new> Map one directory name to another in

> > __FILE__, __BASE_FILE__, a

> > nd __builtin_FILE().

> > -

> > fdump-ada-spec

> > C ObjC C++ ObjC++ RejectNegative Var(flag_dump_ada_spec)

> > Write all declarations as Ada code transitively.

> > diff --git a/gcc/common.opt b/gcc/common.opt

> > index df8af365d1b..e018716af89 100644

> > --- a/gcc/common.opt

> > +++ b/gcc/common.opt

> > @@ -1217,6 +1217,10 @@ fdebug-prefix-map=

> > Common Joined RejectNegative Var(common_deferred_options) Defer

> > -fdebug-prefix-map=<old>=<new> Map one directory name to another in

> > debug information.

> >

> > +fmacro-prefix-map=

> > +Common Joined RejectNegative Var(common_deferred_options) Defer

> > +-fmacro-prefix-map=<old>=<new> Map one directory name to another in

> > __FILE__, __BASE_FILE__, a

> > nd __builtin_FILE().

> > +

> > ffile-prefix-map=

> > Common Joined RejectNegative Var(common_deferred_options) Defer

> > -ffile-prefix-map=<old>=<new>  Map one directory name to another in

> > compilation result.

> > diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c

> > index 21bdd5ef0d8..4d406493603 100644

> > --- a/gcc/fortran/trans-io.c

> > +++ b/gcc/fortran/trans-io.c

> > @@ -33,6 +33,7 @@ along with GCC; see the file COPYING3.  If not see

> > #include "trans-types.h"

> > #include "trans-const.h"

> > #include "options.h"

> > +#include "file-prefix-map.h" /* remap_macro_filename()  */

> >

> > /* Members of the ioparm structure.  */

> >

> > @@ -1026,7 +1027,7 @@ set_error_locus (stmtblock_t * block, tree var,

> > locus * where)

> >                                TREE_TYPE (p->field), locus_file,

> >                                p->field, NULL_TREE);

> >   f = where->lb->file;

> > -  str = gfc_build_cstring_const (f->filename);

> > +  str = gfc_build_cstring_const (remap_macro_filename(f->filename));

> >

> >   str = gfc_build_addr_expr (pchar_type_node, str);

> >   gfc_add_modify (block, locus_file, str);

> > diff --git a/gcc/opts-global.c b/gcc/opts-global.c

> > index b1a8429dc3c..574db430430 100644

> > --- a/gcc/opts-global.c

> > +++ b/gcc/opts-global.c

> > @@ -380,6 +380,10 @@ handle_common_deferred_options (void)

> >          add_debug_prefix_map (opt->arg);

> >          break;

> >

> > +       case OPT_fmacro_prefix_map_:

> > +         add_macro_prefix_map (opt->arg);

> > +         break;

> > +

> >        case OPT_ffile_prefix_map_:

> >          add_file_prefix_map (opt->arg);

> >          break;

> > diff --git a/gcc/testsuite/gfortran.dg/pr96069.f90

> > b/gcc/testsuite/gfortran.dg/pr96069.f90

> > new file mode 100644

> > index 00000000000..d7fed59a150

> > --- /dev/null

> > +++ b/gcc/testsuite/gfortran.dg/pr96069.f90

> > @@ -0,0 +1,11 @@

> > +! { dg-do compile }

> > +! { dg-options "-fmacro-prefix-map==MACRO-PREFIX" }

> > +

> > +subroutine f(name)

> > +  implicit none

> > +  character*(*) name

> > +  print *,name

> > +  return

> > +end subroutine f

> > +

> > +! { dg-final { scan-assembler ".string\t\"MACRO-PREFIX" } }

> >

> >

> >

> > >

> > > ---

> > >  gcc/fortran/trans-io.c                |  3 ++-

> > > gcc/testsuite/gfortran.dg/pr96069.f90 | 11 +++++++++++

> > > 2 files changed, 13 insertions(+), 1 deletion(-)

> > > create mode 100644 gcc/testsuite/gfortran.dg/pr96069.f90

> > >

> > > diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c

> > > index 21bdd5ef0d8..4d406493603 100644

> > > --- a/gcc/fortran/trans-io.c

> > > +++ b/gcc/fortran/trans-io.c

> > > @@ -33,6 +33,7 @@ along with GCC; see the file COPYING3.  If not see

> > > #include "trans-types.h"

> > > #include "trans-const.h"

> > > #include "options.h"

> > > +#include "file-prefix-map.h" /* remap_macro_filename()  */

> > >

> > > /* Members of the ioparm structure.  */

> > >

> > > @@ -1026,7 +1027,7 @@ set_error_locus (stmtblock_t * block, tree var,

> > > locus * where)

> > >                                TREE_TYPE (p->field), locus_file,

> > >                                p->field, NULL_TREE);

> > >   f = where->lb->file;

> > > -  str = gfc_build_cstring_const (f->filename);

> > > +  str = gfc_build_cstring_const (remap_macro_filename(f->filename));

> > >

> > >   str = gfc_build_addr_expr (pchar_type_node, str);

> > >   gfc_add_modify (block, locus_file, str);

> > > diff --git a/gcc/testsuite/gfortran.dg/pr96069.f90

> > > b/gcc/testsuite/gfortran.dg/pr96069.f90

> > > new file mode 100644

> > > index 00000000000..de8bd3a14de

> > > --- /dev/null

> > > +++ b/gcc/testsuite/gfortran.dg/pr96069.f90

> > > @@ -0,0 +1,11 @@

> > > +! { dg-do compile }

> > > +! { dg-options "-ffile-prefix-map==MACRO-PREFIX" }

> > > +

> > > +subroutine f(name)

> > > +  implicit none

> > > +  character*(*) name

> > > +  print *,name

> > > +  return

> > > +end subroutine f

> > > +

> > > +! { dg-final { scan-assembler ".string\t\"MACRO-PREFIX" } }

> > > --

> > > 2.27.0
Jason Merrill via Gcc-patches July 28, 2020, 8:52 p.m. | #4
Hi Yichao,

> Forwarding to fortran@gcc.gnu.org as suggested by Dominique d'Humieres.

> 

> On Sun, Jul 5, 2020 at 9:29 PM Yichao Yu <yyc1992@gmail.com> wrote:

>>

>>> I think this remapping should happen with `file-prefix-map` but

>>> shouldn't with `debug-prefix-map` (though if it happens for both it's

>>> also not too bad) and I believe this patch is the minimum change to

>>> achieve that. I think it makes sense to make this follow

>>> `macro-prefix-map` although I'm not sure if this is a macro... (OTOH,

>>> __builtin_FILE isn't a macro either so maybe it's fine?). I haven't

>>> figured out how I can allow the option in gfortran or how to document

>>> this new behavior though (e.g. I actually don't know what this is

>>> called in fortran...)


I am not sure that -fmacro-prefix-map is the right name here.
The file names recorded in the Fortran source file are not macros,
so I think that -ffile-prefix-maps makes sense, -fmacro-prefix-map
does not.

Best regards

	Thomas
Jason Merrill via Gcc-patches July 28, 2020, 9:02 p.m. | #5
> >>> I think this remapping should happen with `file-prefix-map` but

> >>> shouldn't with `debug-prefix-map` (though if it happens for both it's

> >>> also not too bad) and I believe this patch is the minimum change to

> >>> achieve that. I think it makes sense to make this follow

> >>> `macro-prefix-map` although I'm not sure if this is a macro... (OTOH,

> >>> __builtin_FILE isn't a macro either so maybe it's fine?). I haven't

> >>> figured out how I can allow the option in gfortran or how to document

> >>> this new behavior though (e.g. I actually don't know what this is

> >>> called in fortran...)

>

> I am not sure that -fmacro-prefix-map is the right name here.

> The file names recorded in the Fortran source file are not macros,

> so I think that -ffile-prefix-maps makes sense, -fmacro-prefix-map

> does not.


Yes, I kinda agree with that, hence the first version of the patch,
(reattached below)

The main "problem" I see with it is that there isn't a way to enable
this without also enabling debug map, which really doesn't matter for
me but I imagine someone might, given that there are two separate
options...

Also, I feel like it's also just a "bad" option name, it affects
`__builtin_FILE` which isn't a macro either. That said, I'm perfectly
fine with leaving the argument parsing as is, until someone with a
better sense about naming than me comes up with a new option name that
does file-prefix-map minus debug-prefix-map...

---------------------

 gcc/fortran/trans-io.c                |  3 ++-
gcc/testsuite/gfortran.dg/pr96069.f90 | 11 +++++++++++
2 files changed, 13 insertions(+), 1 deletion(-)
create mode 100644 gcc/testsuite/gfortran.dg/pr96069.f90

diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c
index 21bdd5ef0d8..4d406493603 100644
--- a/gcc/fortran/trans-io.c
+++ b/gcc/fortran/trans-io.c
@@ -33,6 +33,7 @@ along with GCC; see the file COPYING3.  If not see
#include "trans-types.h"
#include "trans-const.h"
#include "options.h"
+#include "file-prefix-map.h" /* remap_macro_filename()  */

/* Members of the ioparm structure.  */

@@ -1026,7 +1027,7 @@ set_error_locus (stmtblock_t * block, tree var,
locus * where)
                               TREE_TYPE (p->field), locus_file,
                               p->field, NULL_TREE);
  f = where->lb->file;
-  str = gfc_build_cstring_const (f->filename);
+  str = gfc_build_cstring_const (remap_macro_filename(f->filename));

  str = gfc_build_addr_expr (pchar_type_node, str);
  gfc_add_modify (block, locus_file, str);
diff --git a/gcc/testsuite/gfortran.dg/pr96069.f90
b/gcc/testsuite/gfortran.dg/pr96069.f90
new file mode 100644
index 00000000000..de8bd3a14de
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr96069.f90
@@ -0,0 +1,11 @@
+! { dg-do compile }
+! { dg-options "-ffile-prefix-map==MACRO-PREFIX" }
+
+subroutine f(name)
+  implicit none
+  character*(*) name
+  print *,name
+  return
+end subroutine f
+
+! { dg-final { scan-assembler ".string\t\"MACRO-PREFIX" } }
--
2.27.0

------------------------------

> Best regards

>

>         Thomas

Patch

diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c
index 21bdd5ef0d8..4d406493603 100644
--- a/gcc/fortran/trans-io.c
+++ b/gcc/fortran/trans-io.c
@@ -33,6 +33,7 @@  along with GCC; see the file COPYING3.  If not see
#include "trans-types.h"
#include "trans-const.h"
#include "options.h"
+#include "file-prefix-map.h" /* remap_macro_filename()  */

/* Members of the ioparm structure.  */

@@ -1026,7 +1027,7 @@  set_error_locus (stmtblock_t * block, tree var,
locus * where)
                               TREE_TYPE (p->field), locus_file,
                               p->field, NULL_TREE);
  f = where->lb->file;
-  str = gfc_build_cstring_const (f->filename);
+  str = gfc_build_cstring_const (remap_macro_filename(f->filename));

  str = gfc_build_addr_expr (pchar_type_node, str);
  gfc_add_modify (block, locus_file, str);
diff --git a/gcc/testsuite/gfortran.dg/pr96069.f90
b/gcc/testsuite/gfortran.dg/pr96069.f90
new file mode 100644
index 00000000000..de8bd3a14de
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr96069.f90
@@ -0,0 +1,11 @@ 
+! { dg-do compile }
+! { dg-options "-ffile-prefix-map==MACRO-PREFIX" }
+
+subroutine f(name)
+  implicit none
+  character*(*) name
+  print *,name
+  return
+end subroutine f
+
+! { dg-final { scan-assembler ".string\t\"MACRO-PREFIX" } }