diff options
Diffstat (limited to 'lldb/unittests')
| -rw-r--r-- | lldb/unittests/Symbol/TestTypeSystemClang.cpp | 24 | ||||
| -rw-r--r-- | lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp | 90 | 
2 files changed, 114 insertions, 0 deletions
| diff --git a/lldb/unittests/Symbol/TestTypeSystemClang.cpp b/lldb/unittests/Symbol/TestTypeSystemClang.cpp index 1981e91..4de595f 100644 --- a/lldb/unittests/Symbol/TestTypeSystemClang.cpp +++ b/lldb/unittests/Symbol/TestTypeSystemClang.cpp @@ -1123,6 +1123,30 @@ TEST_F(TestTypeSystemClang, AddMethodToCXXRecordType_ParmVarDecls) {    EXPECT_EQ(method_it->getParamDecl(1)->getDeclContext(), *method_it);  } +TEST_F(TestTypeSystemClang, TestGetTypeInfo) { +  // Tests TypeSystemClang::GetTypeInfo + +  const ASTContext &ast = m_ast->getASTContext(); + +  CompilerType complex_int = m_ast->GetType(ast.getComplexType(ast.IntTy)); +  EXPECT_EQ(complex_int.GetTypeInfo(), +            (eTypeIsInteger | eTypeIsComplex | eTypeIsBuiltIn | eTypeHasValue)); + +  CompilerType complex_float = m_ast->GetType(ast.getComplexType(ast.FloatTy)); +  EXPECT_EQ(complex_float.GetTypeInfo(), +            (eTypeIsFloat | eTypeIsComplex | eTypeIsBuiltIn | eTypeHasValue)); + +  CompilerType vector_of_int = +      m_ast->GetType(ast.getVectorType(ast.IntTy, 1, VectorKind::Generic)); +  EXPECT_EQ(vector_of_int.GetTypeInfo(), +            (eTypeIsInteger | eTypeIsVector | eTypeHasChildren)); + +  CompilerType vector_of_float = +      m_ast->GetType(ast.getVectorType(ast.FloatTy, 1, VectorKind::Generic)); +  EXPECT_EQ(vector_of_float.GetTypeInfo(), +            (eTypeIsFloat | eTypeIsVector | eTypeHasChildren)); +} +  TEST_F(TestTypeSystemClang, AsmLabel_CtorDtor) {    // Tests TypeSystemClang::DeclGetMangledName for constructors/destructors    // with and without AsmLabels. diff --git a/lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp b/lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp index 1abce69..064ed6d 100644 --- a/lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp +++ b/lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp @@ -1651,3 +1651,93 @@ DWARF:      EXPECT_EQ(param_die, ast_parser.GetObjectParameter(sub2, context_die));    }  } + +TEST_F(DWARFASTParserClangTests, TestTypeBitSize) { +  // Tests that we correctly parse DW_AT_bit_size of a DW_AT_base_type. + +  const char *yamldata = R"( +--- !ELF +FileHeader: +  Class:   ELFCLASS64 +  Data:    ELFDATA2LSB +  Type:    ET_EXEC +  Machine: EM_AARCH64 +DWARF: +  debug_str: +    - _BitInt(2) +  debug_abbrev: +    - ID:              0 +      Table: +        - Code:            0x1 +          Tag:             DW_TAG_compile_unit +          Children:        DW_CHILDREN_yes +          Attributes: +            - Attribute:       DW_AT_language +              Form:            DW_FORM_data2 +        - Code:            0x2 +          Tag:             DW_TAG_base_type +          Children:        DW_CHILDREN_no +          Attributes: +            - Attribute: DW_AT_name +              Form:      DW_FORM_strp +            - Attribute: DW_AT_encoding +              Form:      DW_FORM_data1 +            - Attribute: DW_AT_byte_size +              Form:      DW_FORM_data1 +            - Attribute: DW_AT_bit_size +              Form:      DW_FORM_data1 + +  debug_info: +     - Version:  5 +       UnitType: DW_UT_compile +       AddrSize: 8 +       Entries: + +# DW_TAG_compile_unit +#   DW_AT_language [DW_FORM_data2]    (DW_LANG_C_plus_plus) + +        - AbbrCode: 0x1 +          Values: +            - Value: 0x04 + +#   DW_TAG_base_type +#     DW_AT_name [DW_FORM_strp] ('_BitInt(2)') + +        - AbbrCode: 0x2 +          Values: +            - Value: 0x0 +            - Value: 0x05 +            - Value: 0x01 +            - Value: 0x02 +... +)"; + +  YAMLModuleTester t(yamldata); + +  DWARFUnit *unit = t.GetDwarfUnit(); +  ASSERT_NE(unit, nullptr); +  const DWARFDebugInfoEntry *cu_entry = unit->DIE().GetDIE(); +  ASSERT_EQ(cu_entry->Tag(), DW_TAG_compile_unit); +  ASSERT_EQ(unit->GetDWARFLanguageType(), DW_LANG_C_plus_plus); +  DWARFDIE cu_die(unit, cu_entry); + +  auto holder = std::make_unique<clang_utils::TypeSystemClangHolder>("ast"); +  auto &ast_ctx = *holder->GetAST(); +  DWARFASTParserClangStub ast_parser(ast_ctx); + +  auto type_die = cu_die.GetFirstChild(); +  ASSERT_TRUE(type_die.IsValid()); +  ASSERT_EQ(type_die.Tag(), DW_TAG_base_type); + +  ParsedDWARFTypeAttributes attrs(type_die); +  EXPECT_EQ(attrs.byte_size.value_or(0), 1U); +  EXPECT_EQ(attrs.data_bit_size.value_or(0), 2U); + +  SymbolContext sc; +  auto type_sp = +      ast_parser.ParseTypeFromDWARF(sc, type_die, /*type_is_new_ptr=*/nullptr); +  ASSERT_NE(type_sp, nullptr); + +  EXPECT_EQ(llvm::expectedToOptional(type_sp->GetByteSize(nullptr)).value_or(0), +            1U); +} | 
