diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-01-14 15:37:50 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-01-14 15:37:50 +0000 |
commit | 581a6d8501ff5614297da837b81ed3b6956361ea (patch) | |
tree | 985ee91d0ca1d3e6506ac5ff7e37f5b67adfec09 /unittests/IR/IRBuilderTest.cpp | |
parent | 909545a822eef491158f831688066f0ec2866938 (diff) |
Diffstat (limited to 'unittests/IR/IRBuilderTest.cpp')
-rw-r--r-- | unittests/IR/IRBuilderTest.cpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/unittests/IR/IRBuilderTest.cpp b/unittests/IR/IRBuilderTest.cpp index 579384c5a5f45..1812cd39d135c 100644 --- a/unittests/IR/IRBuilderTest.cpp +++ b/unittests/IR/IRBuilderTest.cpp @@ -435,4 +435,73 @@ TEST_F(IRBuilderTest, DIImportedEntity) { EXPECT_TRUE(verifyModule(*M)); EXPECT_TRUE(CU->getImportedEntities().size() == 2); } + +// 0: #define M0 V0 <-- command line definition +// 0: main.c <-- main file +// 3: #define M1 V1 <-- M1 definition in main.c +// 5: #include "file.h" <-- inclusion of file.h from main.c +// 1: #define M2 <-- M2 definition in file.h with no value +// 7: #undef M1 V1 <-- M1 un-definition in main.c +TEST_F(IRBuilderTest, DIBuilderMacro) { + IRBuilder<> Builder(BB); + DIBuilder DIB(*M); + auto File1 = DIB.createFile("main.c", "/"); + auto File2 = DIB.createFile("file.h", "/"); + auto CU = DIB.createCompileUnit( + dwarf::DW_LANG_C, DIB.createFile("main.c", "/"), "llvm-c", true, "", 0); + auto MDef0 = + DIB.createMacro(nullptr, 0, dwarf::DW_MACINFO_define, "M0", "V0"); + auto TMF1 = DIB.createTempMacroFile(nullptr, 0, File1); + auto MDef1 = DIB.createMacro(TMF1, 3, dwarf::DW_MACINFO_define, "M1", "V1"); + auto TMF2 = DIB.createTempMacroFile(TMF1, 5, File2); + auto MDef2 = DIB.createMacro(TMF2, 1, dwarf::DW_MACINFO_define, "M2"); + auto MUndef1 = DIB.createMacro(TMF1, 7, dwarf::DW_MACINFO_undef, "M1"); + + EXPECT_EQ(dwarf::DW_MACINFO_define, MDef1->getMacinfoType()); + EXPECT_EQ(3u, MDef1->getLine()); + EXPECT_EQ("M1", MDef1->getName()); + EXPECT_EQ("V1", MDef1->getValue()); + + EXPECT_EQ(dwarf::DW_MACINFO_undef, MUndef1->getMacinfoType()); + EXPECT_EQ(7u, MUndef1->getLine()); + EXPECT_EQ("M1", MUndef1->getName()); + EXPECT_EQ("", MUndef1->getValue()); + + EXPECT_EQ(dwarf::DW_MACINFO_start_file, TMF2->getMacinfoType()); + EXPECT_EQ(5u, TMF2->getLine()); + EXPECT_EQ(File2, TMF2->getFile()); + + DIB.finalize(); + + SmallVector<Metadata *, 4> Elements; + Elements.push_back(MDef2); + auto MF2 = DIMacroFile::get(Ctx, dwarf::DW_MACINFO_start_file, 5, File2, + DIB.getOrCreateMacroArray(Elements)); + + Elements.clear(); + Elements.push_back(MDef1); + Elements.push_back(MF2); + Elements.push_back(MUndef1); + auto MF1 = DIMacroFile::get(Ctx, dwarf::DW_MACINFO_start_file, 0, File1, + DIB.getOrCreateMacroArray(Elements)); + + Elements.clear(); + Elements.push_back(MDef0); + Elements.push_back(MF1); + auto MN0 = MDTuple::get(Ctx, Elements); + EXPECT_EQ(MN0, CU->getRawMacros()); + + Elements.clear(); + Elements.push_back(MDef1); + Elements.push_back(MF2); + Elements.push_back(MUndef1); + auto MN1 = MDTuple::get(Ctx, Elements); + EXPECT_EQ(MN1, MF1->getRawElements()); + + Elements.clear(); + Elements.push_back(MDef2); + auto MN2 = MDTuple::get(Ctx, Elements); + EXPECT_EQ(MN2, MF2->getRawElements()); + EXPECT_TRUE(verifyModule(*M)); +} } |