@@ -125,6 +125,15 @@ struct TestMachineModulePass : public PassInfoMixin<TestMachineModulePass> {
125125 std::vector<int > &Counts;
126126};
127127
128+ struct ReportWarningPass : public PassInfoMixin <ReportWarningPass> {
129+ PreservedAnalyses run (MachineFunction &MF,
130+ MachineFunctionAnalysisManager &MFAM) {
131+ auto &Ctx = MF.getContext ();
132+ Ctx.reportWarning (SMLoc (), " Test warning message." );
133+ return PreservedAnalyses::all ();
134+ }
135+ };
136+
128137std::unique_ptr<Module> parseIR (LLVMContext &Context, const char *IR) {
129138 SMDiagnostic Err;
130139 return parseAssemblyString (IR, Err, Context);
@@ -176,10 +185,10 @@ TEST_F(PassManagerTest, Basic) {
176185 MachineModuleInfo MMI (LLVMTM);
177186
178187 LoopAnalysisManager LAM;
188+ MachineFunctionAnalysisManager MFAM;
179189 FunctionAnalysisManager FAM;
180190 CGSCCAnalysisManager CGAM;
181191 ModuleAnalysisManager MAM;
182- MachineFunctionAnalysisManager MFAM;
183192 PassBuilder PB (TM.get ());
184193 PB.registerModuleAnalyses (MAM);
185194 PB.registerCGSCCAnalyses (CGAM);
@@ -204,10 +213,49 @@ TEST_F(PassManagerTest, Basic) {
204213 MFPM.addPass (TestMachineFunctionPass (Count, Counts));
205214 MPM.addPass (createModuleToMachineFunctionPassAdaptor (std::move (MFPM)));
206215
216+ testing::internal::CaptureStderr ();
207217 MPM.run (*M, MAM);
218+ std::string Output = testing::internal::GetCapturedStderr ();
208219
209220 EXPECT_EQ ((std::vector<int >{10 , 16 , 18 , 20 , 30 , 36 , 38 , 40 }), Counts);
210221 EXPECT_EQ (40 , Count);
211222}
212223
224+ TEST_F (PassManagerTest, DiagnosticHandler) {
225+ if (!TM)
226+ GTEST_SKIP ();
227+
228+ LLVMTargetMachine *LLVMTM = static_cast <LLVMTargetMachine *>(TM.get ());
229+ M->setDataLayout (TM->createDataLayout ());
230+
231+ MachineModuleInfo MMI (LLVMTM);
232+
233+ LoopAnalysisManager LAM;
234+ MachineFunctionAnalysisManager MFAM;
235+ FunctionAnalysisManager FAM;
236+ CGSCCAnalysisManager CGAM;
237+ ModuleAnalysisManager MAM;
238+ PassBuilder PB (TM.get ());
239+ PB.registerModuleAnalyses (MAM);
240+ PB.registerCGSCCAnalyses (CGAM);
241+ PB.registerFunctionAnalyses (FAM);
242+ PB.registerLoopAnalyses (LAM);
243+ PB.registerMachineFunctionAnalyses (MFAM);
244+ PB.crossRegisterProxies (LAM, FAM, CGAM, MAM, &MFAM);
245+
246+ MAM.registerPass ([&] { return MachineModuleAnalysis (MMI); });
247+
248+ ModulePassManager MPM;
249+ FunctionPassManager FPM;
250+ MachineFunctionPassManager MFPM;
251+ MFPM.addPass (ReportWarningPass ());
252+ MPM.addPass (createModuleToMachineFunctionPassAdaptor (std::move (MFPM)));
253+ testing::internal::CaptureStderr ();
254+ MPM.run (*M, MAM);
255+ std::string Output = testing::internal::GetCapturedStderr ();
256+
257+ EXPECT_TRUE (Output.find (" warning: <unknown>:0: Test warning message." ) !=
258+ std::string::npos);
259+ }
260+
213261} // namespace
0 commit comments