Add a unit test for llvm-gcc producer strings and cleanup code. (NFC)
authorAdrian Prantl <aprantl@apple.com>
Wed, 6 Oct 2021 21:44:32 +0000 (14:44 -0700)
committerAdrian Prantl <aprantl@apple.com>
Wed, 6 Oct 2021 21:56:17 +0000 (14:56 -0700)
lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
lldb/unittests/SymbolFile/DWARF/DWARFUnitTest.cpp

index 17417f7..39411b5 100644 (file)
@@ -671,16 +671,17 @@ void DWARFUnit::ParseProducerInfo() {
   if (producer.empty())
     return;
 
-  static RegularExpression llvm_gcc_regex(
-      llvm::StringRef("^4\\.[012]\\.[01] \\(Based on Apple "
-                      "Inc\\. build [0-9]+\\) \\(LLVM build "
-                      "[\\.0-9]+\\)$"));
-  if (llvm_gcc_regex.Execute(producer)) {
+  static RegularExpression g_llvm_gcc_regex(
+      llvm::StringRef(R"(4\.[012]\.[01] )"
+                      R"(\(Based on Apple Inc\. build [0-9]+\) )"
+                      R"(\(LLVM build [\.0-9]+\)$)"));
+  static RegularExpression g_clang_version_regex(
+      llvm::StringRef(R"(clang-([0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?))"));
+
+  if (g_llvm_gcc_regex.Execute(producer)) {
     m_producer = eProducerLLVMGCC;
   } else if (producer.contains("clang")) {
-    static RegularExpression g_clang_version_regex(
-        llvm::StringRef(R"(clang-([0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?))"));
-    llvm::SmallVector<llvm::StringRef, 4> matches;
+    llvm::SmallVector<llvm::StringRef, 3> matches;
     if (g_clang_version_regex.Execute(producer, &matches))
       m_producer_version.tryParse(matches[1]);
     m_producer = eProducerClang;
index 5b36f22..85e3ae3 100644 (file)
@@ -85,7 +85,7 @@ DWARF:
   EXPECT_EQ(die_first->GetSibling(), nullptr);
 }
 
-TEST(DWARFUnitTest, Producer) {
+TEST(DWARFUnitTest, ClangProducer) {
   const char *yamldata = R"(
 --- !ELF
 FileHeader:
@@ -104,8 +104,6 @@ DWARF:
           Attributes:
             - Attribute:       DW_AT_producer
               Form:            DW_FORM_strp
-            - Attribute:       DW_AT_language
-              Form:            DW_FORM_data2
   debug_info:
     - Version:         4
       AddrSize:        8
@@ -113,7 +111,6 @@ DWARF:
         - AbbrCode:        0x1
           Values:
             - Value:           0x0
-            - Value:           0xC
         - AbbrCode:        0x0
 )";
 
@@ -123,3 +120,38 @@ DWARF:
   EXPECT_EQ(unit->GetProducer(), eProducerClang);
   EXPECT_EQ(unit->GetProducerVersion(), llvm::VersionTuple(1300, 0, 29, 3));
 }
+
+TEST(DWARFUnitTest, LLVMGCCProducer) {
+  const char *yamldata = R"(
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_EXEC
+  Machine: EM_386
+DWARF:
+  debug_str:
+    - 'i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)'
+  debug_abbrev:
+    - Table:
+        - Code:            0x00000001
+          Tag:             DW_TAG_compile_unit
+          Children:        DW_CHILDREN_yes
+          Attributes:
+            - Attribute:       DW_AT_producer
+              Form:            DW_FORM_strp
+  debug_info:
+    - Version:         4
+      AddrSize:        8
+      Entries:
+        - AbbrCode:        0x1
+          Values:
+            - Value:           0x0
+        - AbbrCode:        0x0
+)";
+
+  YAMLModuleTester t(yamldata);
+  DWARFUnit *unit = t.GetDwarfUnit();
+  ASSERT_TRUE((bool)unit);
+  EXPECT_EQ(unit->GetProducer(), eProducerLLVMGCC);
+}