@@ -2276,4 +2276,46 @@ TEST(DWARFDebugInfo, TestDWARF64UnitLength) {
22762276 });
22772277}
22782278
2279+ TEST (DWARFDebugInfo, TestLanguageDescription_Versioned) {
2280+ // Tests for the llvm::dwarf::LanguageDescription API that
2281+ // takes a name *and* a version.
2282+
2283+ // Unknown language.
2284+ EXPECT_EQ (
2285+ llvm::dwarf::LanguageDescription (static_cast <SourceLanguageName>(0 )),
2286+ " Unknown" );
2287+
2288+ // Test that specifying an invalid version falls back to a valid language name
2289+ // regardless.
2290+ EXPECT_EQ (llvm::dwarf::LanguageDescription (
2291+ static_cast <SourceLanguageName>(DW_LNAME_ObjC), 0 ),
2292+ " Objective C" );
2293+ EXPECT_EQ (llvm::dwarf::LanguageDescription (
2294+ static_cast <SourceLanguageName>(DW_LNAME_Julia), 0 ),
2295+ " Julia" );
2296+
2297+ // Check some versions.
2298+ EXPECT_EQ (llvm::dwarf::LanguageDescription (DW_LNAME_C_plus_plus, 199711 ),
2299+ " C++98" );
2300+ EXPECT_EQ (llvm::dwarf::LanguageDescription (DW_LNAME_C_plus_plus, 201402 ),
2301+ " C++14" );
2302+
2303+ // Versions round up.
2304+ EXPECT_EQ (llvm::dwarf::LanguageDescription (DW_LNAME_C_plus_plus, 201400 ),
2305+ " C++14" );
2306+
2307+ // Version 0 for C and C++ is an unversioned name.
2308+ EXPECT_EQ (llvm::dwarf::LanguageDescription (
2309+ static_cast <SourceLanguageName>(DW_LNAME_C), 0 ),
2310+ " C (K&R and ISO)" );
2311+ EXPECT_EQ (llvm::dwarf::LanguageDescription (
2312+ static_cast <SourceLanguageName>(DW_LNAME_C_plus_plus), 0 ),
2313+ " ISO C++" );
2314+
2315+ // Version 0 for other versioned languages may not be the unversioned name.
2316+ EXPECT_EQ (llvm::dwarf::LanguageDescription (
2317+ static_cast <SourceLanguageName>(DW_LNAME_Fortran), 0 ),
2318+ " FORTRAN 77" );
2319+ }
2320+
22792321} // end anonymous namespace
0 commit comments