[PATCH] D70525: [clang][IFS][test] GreenDragon and Fuchsia Darwin bot fix: BindArchClass Nest.

Puyan Lotfi via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Nov 20 23:15:58 PST 2019


plotfi created this revision.
plotfi added a reviewer: compnerd.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

This is a post commit review. If I can re-implement this in a nicer way I will do an NFC commit.

  On Darwin the clang driver does not invoke Driver::BuildActions directly
  due to the need to handle Universal apps. Because of this there is a
  difference in code path where Driver::BuildUniversalActions is called
  instead of Driver::BuildActions. BuildUniversalActions ends up calling
  Driver::BuildAction but what it does differently is it takes the driver
  actions returned and wraps them each into a BindArchAction.
  
  In Driver::BuildJobs there is a check for '-o' to determine that
  multiple files are not specified when passing -o, except for Clang
  Interface Stub this need to be an exception as we actually want to write
  out multiple files: for every libfoo.so we have a libfoo.ifso sidecar
  ifso file, etc. To allow this to happen there is a check for
  IfsMergeAction, which is permitted to write out a secondary file. Except
  on Darwin, the IfsMergeAction gets wrapped in the BindArchAction by
  Driver::BuildUniversalActions so the check fails.
  
  This patch is to look inside a BindArchAction in Driver::BuildJobs to
  determine if there is in fact an IfsMergeAction, and if-so (pun intended)
  allow the secondary sidecard ifs/ifso file to be written out.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D70525

Files:
  clang/lib/Driver/Driver.cpp


Index: clang/lib/Driver/Driver.cpp
===================================================================
--- clang/lib/Driver/Driver.cpp
+++ clang/lib/Driver/Driver.cpp
@@ -3698,7 +3698,9 @@
     unsigned NumOutputs = 0;
     for (const Action *A : C.getActions())
       if (A->getType() != types::TY_Nothing &&
-          A->getKind() != Action::IfsMergeJobClass)
+          !(A->getKind() == Action::IfsMergeJobClass ||
+            (A->getKind() == Action::BindArchClass && A->getInputs().size() &&
+             A->getInputs().front()->getKind() == Action::IfsMergeJobClass)))
         ++NumOutputs;
 
     if (NumOutputs > 1) {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D70525.230374.patch
Type: text/x-patch
Size: 632 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20191121/3902a803/attachment.bin>


More information about the cfe-commits mailing list