================
@@ -977,14 +977,61 @@ bool tools::addOpenMPRuntime(ArgStringList &CmdArgs, 
const ToolChain &TC,
   return true;
 }
 
-void tools::addFortranRuntimeLibs(const ToolChain &TC,
+void tools::addFortranRuntimeLibs(const ToolChain &TC, const ArgList &Args,
                                   llvm::opt::ArgStringList &CmdArgs) {
   // These are handled earlier on Windows by telling the frontend driver to add
   // the correct libraries to link against as dependents in the object file.
   if (!TC.getTriple().isKnownWindowsMSVCEnvironment()) {
+    // The --whole-archive option needs to be part of the link line to
+    // make sure that the main() function from Fortran_main.a is pulled
+    // in by the linker.  Determine if --whole-archive is active when
+    // flang will try to link Fortran_main.a.  If it is, don't add the
+    // --whole-archive flag to the link line.  If it's not, add a proper
+    // --whole-archive/--no-whole-archive bracket to the link line.
+    bool NeedWholeArchive = true;
+    auto * Arg = Args.getLastArg(options::OPT_Wl_COMMA);
+    for (StringRef ArgValue : llvm::reverse(Arg->getValues())) {
+      if (ArgValue == "--whole-archive") {
+        NeedWholeArchive = false;
+        break;
+      }
----------------
mjklemm wrote:

Are you sure?  The default is to modify the link line and only not do it if 
--whole-archive was found.   However, there's an actual bug now, as this goes 
is treated wrongly:

`-Wl,--whole-archive -ldummy  -Wl,-dummy`

Now, the check does not see the --whole-archive anymore.  I need to go back to 
go through all the -Wl, and see which is the last one to have something to do 
with --whole-archive.

https://github.com/llvm/llvm-project/pull/73124
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to