Forwarding to fort...@gcc.gnu.org as suggested by Dominique d'Humieres.
On Sun, Jul 5, 2020 at 9:29 PM Yichao Yu <yyc1...@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