Author: Mark Danial
Date: 2023-02-21T16:34:26-05:00
New Revision: 1360bfb05b3153ad93a7e866f0ac6860d94337a2
URL:
https://github.com/llvm/llvm-project/commit/1360bfb05b3153ad93a7e866f0ac6860d94337a2
DIFF:
https://github.com/llvm/llvm-project/commit/1360bfb05b3153ad93a7e866f0ac6860d94337a2.diff
LOG: [Flang] Add user option -funderscoring/-fnounderscoring to control
trailing underscore added to external names
This patch adds user option -funderscoring/-fnounderscoring to control the
trailing underscore being appended to external names (e.g. procedure names,
common block names). The option in gfortran is documented in
https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html.
Reviewed By: clementval
Differential Revision: https://reviews.llvm.org/D140795
Added:
flang/test/Driver/underscoring.f90
Modified:
clang/include/clang/Driver/Options.td
clang/lib/Driver/ToolChains/Flang.cpp
flang/include/flang/Frontend/CodeGenOptions.def
flang/include/flang/Optimizer/Transforms/Passes.h
flang/include/flang/Optimizer/Transforms/Passes.td
flang/include/flang/Tools/CLOptions.inc
flang/lib/Frontend/CompilerInvocation.cpp
flang/lib/Frontend/FrontendActions.cpp
flang/lib/Optimizer/Transforms/ExternalNameConversion.cpp
flang/test/Driver/driver-help-hidden.f90
flang/test/Driver/driver-help.f90
flang/test/Fir/external-mangling.fir
Removed:
diff --git a/clang/include/clang/Driver/Options.td
b/clang/include/clang/Driver/Options.td
index f84522c741561..a26af0af2c946 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -5028,7 +5028,6 @@ defm recursive : BooleanFFlag<"recursive">,
Group;
defm repack_arrays : BooleanFFlag<"repack-arrays">, Group;
defm second_underscore : BooleanFFlag<"second-underscore">,
Group;
defm sign_zero : BooleanFFlag<"sign-zero">, Group;
-defm underscoring : BooleanFFlag<"underscoring">, Group;
defm whole_file : BooleanFFlag<"whole-file">, Group;
// C++ SYCL options
@@ -5103,6 +5102,7 @@ defm backslash : OptInFC1FFlag<"backslash", "Specify that
backslash in string in
defm xor_operator : OptInFC1FFlag<"xor-operator", "Enable .XOR. as a synonym
of .NEQV.">;
defm logical_abbreviations : OptInFC1FFlag<"logical-abbreviations", "Enable
logical abbreviations">;
defm implicit_none : OptInFC1FFlag<"implicit-none", "No implicit typing
allowed unless overridden by IMPLICIT statements">;
+defm underscoring : OptInFC1FFlag<"underscoring", "Appends one trailing
underscore to external names">;
def fno_automatic : Flag<["-"], "fno-automatic">, Group,
HelpText<"Implies the SAVE attribute for non-automatic local objects in
subprograms unless RECURSIVE">;
diff --git a/clang/lib/Driver/ToolChains/Flang.cpp
b/clang/lib/Driver/ToolChains/Flang.cpp
index 8d9fae58ce50e..cd3907c099481 100644
--- a/clang/lib/Driver/ToolChains/Flang.cpp
+++ b/clang/lib/Driver/ToolChains/Flang.cpp
@@ -56,7 +56,8 @@ void Flang::addOtherOptions(const ArgList &Args,
ArgStringList &CmdArgs) const {
{options::OPT_module_dir, options::OPT_fdebug_module_writer,
options::OPT_fintrinsic_modules_path, options::OPT_pedantic,
options::OPT_std_EQ, options::OPT_W_Joined,
- options::OPT_fconvert_EQ, options::OPT_fpass_plugin_EQ});
+ options::OPT_fconvert_EQ, options::OPT_fpass_plugin_EQ,
+ options::OPT_funderscoring, options::OPT_fno_underscoring});
Arg *stackArrays =
Args.getLastArg(options::OPT_Ofast, options::OPT_fstack_arrays,
diff --git a/flang/include/flang/Frontend/CodeGenOptions.def
b/flang/include/flang/Frontend/CodeGenOptions.def
index 0de2360fd95be..7f50442af6d09 100644
--- a/flang/include/flang/Frontend/CodeGenOptions.def
+++ b/flang/include/flang/Frontend/CodeGenOptions.def
@@ -28,6 +28,7 @@ CODEGENOPT(PICLevel, 2, 0) ///< PIC level of the LLVM module.
CODEGENOPT(IsPIE, 1, 0) ///< PIE level is the same as PIC Level.
CODEGENOPT(StackArrays, 1, 0) ///< -fstack-arrays (enable the stack-arrays
pass)
+CODEGENOPT(Underscoring, 1, 1)
ENUM_CODEGENOPT(RelocationModel, llvm::Reloc::Model, 3, llvm::Reloc::PIC_)
///< Name of the relocation model to use.
#undef CODEGENOPT
diff --git a/flang/include/flang/Optimizer/Transforms/Passes.h
b/flang/include/flang/Optimizer/Transforms/Passes.h
index efe55cecce30b..55f000f067b52 100644
--- a/flang/include/flang/Optimizer/Transforms/Passes.h
+++ b/flang/include/flang/Optimizer/Transforms/Passes.h
@@ -52,6 +52,8 @@ createArrayValueCopyPass(fir::ArrayValueCopyOptions options =
{});
std::unique_ptr createFirToCfgPass();
std::unique_ptr createCharacterConversionPass();
std::unique_ptr createExternalNameConversionPass();
+std::unique_ptr
+createExternalNameConversionPass(bool appendUnderscore);
std::unique_ptr createMemDataFlowOptPass();
std::unique_ptr crea