@@ -360,4 +360,27 @@ TEST_F(SuppressionMappingTest, ParsingRespectsOtherWarningOpts) {
360360 clang::ProcessWarningOptions (Diags, Diags.getDiagnosticOptions (), *FS);
361361 EXPECT_THAT (diags (), IsEmpty ());
362362}
363+
364+ TEST_F (SuppressionMappingTest, ForwardSlashMatchesBothDirections) {
365+ llvm::StringLiteral SuppressionMappingFile = R"(
366+ [unused]
367+ src:*clang/*
368+ src:*clang/lib/Sema/*=emit
369+ src:*clang/lib\\Sema/foo*)" ;
370+ Diags.getDiagnosticOptions ().DiagnosticSuppressionMappingsFile = " foo.txt" ;
371+ FS->addFile (" foo.txt" , /* ModificationTime=*/ {},
372+ llvm::MemoryBuffer::getMemBuffer (SuppressionMappingFile));
373+ clang::ProcessWarningOptions (Diags, Diags.getDiagnosticOptions (), *FS);
374+ EXPECT_THAT (diags (), IsEmpty ());
375+
376+ EXPECT_TRUE (Diags.isSuppressedViaMapping (
377+ diag::warn_unused_function, locForFile (R"( clang/lib/Basic/foo.h)" )));
378+ EXPECT_FALSE (Diags.isSuppressedViaMapping (
379+ diag::warn_unused_function, locForFile (R"( clang/lib/Sema\bar.h)" )));
380+ EXPECT_TRUE (Diags.isSuppressedViaMapping (
381+ diag::warn_unused_function, locForFile (R"( clang\lib\Sema/foo.h)" )));
382+ // The third pattern requires a literal backslash before Sema
383+ EXPECT_FALSE (Diags.isSuppressedViaMapping (
384+ diag::warn_unused_function, locForFile (R"( clang/lib/Sema/foo.h)" )));
385+ }
363386} // namespace
0 commit comments