Cyclic module dependency [Re: [llvm] r357201 - Temporarily revert "SafepointIRVerifier port to new Pass Manager"]
Adrian Prantl via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 29 13:29:33 PDT 2019
When you compile with -fmodules without local submodule visibility (which is a configuration we support in LLVM), including any header from one top-level module will implicitly also import all headers in that module, even ones that are not explicitly #included in the source file. So any cyclic header dependency between any two headers in two modules will be a problem, even if the two headers don't directly include each other.
-- adrian
> On Mar 29, 2019, at 6:12 AM, Fedor Sergeev <fedor.sergeev at azul.com> wrote:
>
> Adrian, (or anybody else who could help)
>
> this seemingly innocent port of SafepointIRVerifier caused a build failure in "modular" buildbot.
> I'm able to reproduce the failure but I have absolutely no clue on whats going on.
>
> Why SafepointIRVerifier.h gets included into compilations of, say, IR/BasicBlock.cpp or IR/AsmWriter.cpp?
>
> Also, SafepointIRVerifier.h was doing pretty much the same as Verifier.h does
> (i.e. includes PassManager.h to get PassInfoMixin template definition).
>
> Why Verifier.h does not cause a similar build issue?
>
> Could you, please, explain/help with this problem?
>
> regards,
> Fedor.
>
> On 3/28/19 9:34 PM, Adrian Prantl via llvm-commits wrote:
>> Author: adrian
>> Date: Thu Mar 28 11:34:34 2019
>> New Revision: 357201
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=357201&view=rev
>> Log:
>> Temporarily revert "SafepointIRVerifier port to new Pass Manager"
>> to unbreak the modular bots and its follow-up commit.
>>
>> This reverts commit https://reviews.llvm.org/D59825
>> because it introduced a
>>
>> fatal error: cyclic dependency in module 'LLVM_intrinsic_gen': LLVM_intrinsic_gen -> LLVM_IR -> LLVM_intrinsic_gen
>>
>> Modified:
>> llvm/trunk/include/llvm/IR/SafepointIRVerifier.h
>> llvm/trunk/lib/IR/SafepointIRVerifier.cpp
>> llvm/trunk/lib/Passes/PassBuilder.cpp
>> llvm/trunk/lib/Passes/PassRegistry.def
>>
>> Modified: llvm/trunk/include/llvm/IR/SafepointIRVerifier.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/SafepointIRVerifier.h?rev=357201&r1=357200&r2=357201&view=diff
>> ==============================================================================
>> --- llvm/trunk/include/llvm/IR/SafepointIRVerifier.h (original)
>> +++ llvm/trunk/include/llvm/IR/SafepointIRVerifier.h Thu Mar 28 11:34:34 2019
>> @@ -18,8 +18,6 @@
>> #ifndef LLVM_IR_SAFEPOINT_IR_VERIFIER
>> #define LLVM_IR_SAFEPOINT_IR_VERIFIER
>> -#include "llvm/IR/PassManager.h"
>> -
>> namespace llvm {
>> class Function;
>> @@ -31,16 +29,6 @@ void verifySafepointIR(Function &F);
>> /// Create an instance of the safepoint verifier pass which can be added to
>> /// a pass pipeline to check for relocation bugs.
>> FunctionPass *createSafepointIRVerifierPass();
>> -
>> -/// Create an instance of the safepoint verifier pass which can be added to
>> -/// a pass pipeline to check for relocation bugs.
>> -class SafepointIRVerifierPass : public PassInfoMixin<SafepointIRVerifierPass> {
>> -
>> -public:
>> - explicit SafepointIRVerifierPass() {}
>> -
>> - PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
>> -};
>> }
>> #endif // LLVM_IR_SAFEPOINT_IR_VERIFIER
>>
>> Modified: llvm/trunk/lib/IR/SafepointIRVerifier.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/SafepointIRVerifier.cpp?rev=357201&r1=357200&r2=357201&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/IR/SafepointIRVerifier.cpp (original)
>> +++ llvm/trunk/lib/IR/SafepointIRVerifier.cpp Thu Mar 28 11:34:34 2019
>> @@ -197,17 +197,6 @@ protected:
>> static void Verify(const Function &F, const DominatorTree &DT,
>> const CFGDeadness &CD);
>> -namespace llvm {
>> -PreservedAnalyses SafepointIRVerifierPass::run(Function &F,
>> - FunctionAnalysisManager &AM) {
>> - const auto &DT = AM.getResult<DominatorTreeAnalysis>(F);
>> - CFGDeadness CD;
>> - CD.processFunction(F, DT);
>> - Verify(F, DT, CD);
>> - return PreservedAnalyses::all();
>> -}
>> -}
>> -
>> namespace {
>> struct SafepointIRVerifier : public FunctionPass {
>>
>> Modified: llvm/trunk/lib/Passes/PassBuilder.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Passes/PassBuilder.cpp?rev=357201&r1=357200&r2=357201&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Passes/PassBuilder.cpp (original)
>> +++ llvm/trunk/lib/Passes/PassBuilder.cpp Thu Mar 28 11:34:34 2019
>> @@ -56,7 +56,6 @@
>> #include "llvm/IR/Dominators.h"
>> #include "llvm/IR/IRPrintingPasses.h"
>> #include "llvm/IR/PassManager.h"
>> -#include "llvm/IR/SafepointIRVerifier.h"
>> #include "llvm/IR/Verifier.h"
>> #include "llvm/Support/Debug.h"
>> #include "llvm/Support/FormatVariadic.h"
>>
>> Modified: llvm/trunk/lib/Passes/PassRegistry.def
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Passes/PassRegistry.def?rev=357201&r1=357200&r2=357201&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Passes/PassRegistry.def (original)
>> +++ llvm/trunk/lib/Passes/PassRegistry.def Thu Mar 28 11:34:34 2019
>> @@ -231,7 +231,6 @@ FUNCTION_PASS("verify<domtree>", Dominat
>> FUNCTION_PASS("verify<loops>", LoopVerifierPass())
>> FUNCTION_PASS("verify<memoryssa>", MemorySSAVerifierPass())
>> FUNCTION_PASS("verify<regions>", RegionInfoVerifierPass())
>> -FUNCTION_PASS("verify<safepoint-ir>", SafepointIRVerifierPass())
>> FUNCTION_PASS("view-cfg", CFGViewerPass())
>> FUNCTION_PASS("view-cfg-only", CFGOnlyViewerPass())
>> FUNCTION_PASS("transform-warning", WarnMissedTransformationsPass())
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list