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) {
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) {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits