@@ -125,6 +125,15 @@ struct TestMachineModulePass : public PassInfoMixin<TestMachineModulePass> {
125
125
std::vector<int > &Counts;
126
126
};
127
127
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
+
128
137
std::unique_ptr<Module> parseIR (LLVMContext &Context, const char *IR) {
129
138
SMDiagnostic Err;
130
139
return parseAssemblyString (IR, Err, Context);
@@ -176,10 +185,10 @@ TEST_F(PassManagerTest, Basic) {
176
185
MachineModuleInfo MMI (LLVMTM);
177
186
178
187
LoopAnalysisManager LAM;
188
+ MachineFunctionAnalysisManager MFAM;
179
189
FunctionAnalysisManager FAM;
180
190
CGSCCAnalysisManager CGAM;
181
191
ModuleAnalysisManager MAM;
182
- MachineFunctionAnalysisManager MFAM;
183
192
PassBuilder PB (TM.get ());
184
193
PB.registerModuleAnalyses (MAM);
185
194
PB.registerCGSCCAnalyses (CGAM);
@@ -204,10 +213,49 @@ TEST_F(PassManagerTest, Basic) {
204
213
MFPM.addPass (TestMachineFunctionPass (Count, Counts));
205
214
MPM.addPass (createModuleToMachineFunctionPassAdaptor (std::move (MFPM)));
206
215
216
+ testing::internal::CaptureStderr ();
207
217
MPM.run (*M, MAM);
218
+ std::string Output = testing::internal::GetCapturedStderr ();
208
219
209
220
EXPECT_EQ ((std::vector<int >{10 , 16 , 18 , 20 , 30 , 36 , 38 , 40 }), Counts);
210
221
EXPECT_EQ (40 , Count);
211
222
}
212
223
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
+
213
261
} // namespace
0 commit comments