diff options
author | Adrian Prantl <aprantl@apple.com> | 2016-12-16 19:39:01 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2016-12-16 19:39:01 +0000 |
commit | 096faa974afe2fc3cabbb9b2a545b7cdc8df16fc (patch) | |
tree | 52085aeb337e2bacc47410f723f5078005e9e7a7 /unittests/IR/MetadataTest.cpp | |
parent | 56bfe966c9dc50a844a3a0921809a9a5efc358d5 (diff) |
Revert "[IR] Remove the DIExpression field from DIGlobalVariable."
This reverts commit 289920 (again).
I forgot to implement a Bitcode upgrade for the case where a DIGlobalVariable
has not DIExpression. Unfortunately it is not possible to safely upgrade
these variables without adding a flag to the bitcode record indicating which
version they are.
My plan of record is to roll the planned follow-up patch that adds a
unit: field to DIGlobalVariable into this patch before recomitting.
This way we only need one Bitcode upgrade for both changes (with a
version flag in the bitcode record to safely distinguish the record
formats).
Sorry for the churn!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@289982 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests/IR/MetadataTest.cpp')
-rw-r--r-- | unittests/IR/MetadataTest.cpp | 81 |
1 files changed, 32 insertions, 49 deletions
diff --git a/unittests/IR/MetadataTest.cpp b/unittests/IR/MetadataTest.cpp index 4ee931d4109..ab6785c23d8 100644 --- a/unittests/IR/MetadataTest.cpp +++ b/unittests/IR/MetadataTest.cpp @@ -1828,13 +1828,16 @@ TEST_F(DIGlobalVariableTest, get) { DIType *Type = getDerivedType(); bool IsLocalToUnit = false; bool IsDefinition = true; + auto *Expr = DIExpression::get(Context, {1, 2}); + auto *Expr2 = DIExpression::get(Context, {1, 2, 3}); DIDerivedType *StaticDataMemberDeclaration = cast<DIDerivedType>(getDerivedType()); uint32_t AlignInBits = 8; auto *N = DIGlobalVariable::get(Context, Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit, IsDefinition, - StaticDataMemberDeclaration, AlignInBits); + Expr, StaticDataMemberDeclaration, + AlignInBits); EXPECT_EQ(dwarf::DW_TAG_variable, N->getTag()); EXPECT_EQ(Scope, N->getScope()); EXPECT_EQ(Name, N->getName()); @@ -1844,88 +1847,68 @@ TEST_F(DIGlobalVariableTest, get) { EXPECT_EQ(Type, N->getType()); EXPECT_EQ(IsLocalToUnit, N->isLocalToUnit()); EXPECT_EQ(IsDefinition, N->isDefinition()); + EXPECT_EQ(Expr, N->getExpr()); EXPECT_EQ(StaticDataMemberDeclaration, N->getStaticDataMemberDeclaration()); EXPECT_EQ(AlignInBits, N->getAlignInBits()); EXPECT_EQ(N, DIGlobalVariable::get(Context, Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit, IsDefinition, - StaticDataMemberDeclaration, AlignInBits)); + Expr, StaticDataMemberDeclaration, + AlignInBits)); EXPECT_NE(N, DIGlobalVariable::get(Context, getSubprogram(), Name, LinkageName, File, Line, Type, IsLocalToUnit, IsDefinition, - StaticDataMemberDeclaration, AlignInBits)); + Expr, StaticDataMemberDeclaration, + AlignInBits)); EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, "other", LinkageName, File, Line, Type, IsLocalToUnit, IsDefinition, - StaticDataMemberDeclaration, AlignInBits)); + Expr, StaticDataMemberDeclaration, + AlignInBits)); EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, Name, "other", File, Line, - Type, IsLocalToUnit, IsDefinition, - StaticDataMemberDeclaration, AlignInBits)); + Type, IsLocalToUnit, IsDefinition, Expr, + StaticDataMemberDeclaration, + AlignInBits)); EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, Name, LinkageName, getFile(), - Line, Type, IsLocalToUnit, IsDefinition, - StaticDataMemberDeclaration, AlignInBits)); + Line, Type, IsLocalToUnit, IsDefinition, Expr, + StaticDataMemberDeclaration, + AlignInBits)); EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, Name, LinkageName, File, Line + 1, Type, IsLocalToUnit, IsDefinition, - StaticDataMemberDeclaration, AlignInBits)); + Expr, StaticDataMemberDeclaration, + AlignInBits)); EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, Name, LinkageName, File, Line, getDerivedType(), IsLocalToUnit, IsDefinition, - StaticDataMemberDeclaration, AlignInBits)); + Expr, StaticDataMemberDeclaration, + AlignInBits)); EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, Name, LinkageName, File, Line, Type, !IsLocalToUnit, IsDefinition, - StaticDataMemberDeclaration, AlignInBits)); + Expr, StaticDataMemberDeclaration, + AlignInBits)); EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit, !IsDefinition, - StaticDataMemberDeclaration, AlignInBits)); + Expr, StaticDataMemberDeclaration, + AlignInBits)); EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit, IsDefinition, - cast<DIDerivedType>(getDerivedType()), + Expr2, StaticDataMemberDeclaration, AlignInBits)); + EXPECT_NE(N, + DIGlobalVariable::get(Context, Scope, Name, LinkageName, File, Line, + Type, IsLocalToUnit, IsDefinition, Expr, + cast<DIDerivedType>(getDerivedType()), + AlignInBits)); EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit, IsDefinition, - StaticDataMemberDeclaration, + Expr, StaticDataMemberDeclaration, (AlignInBits << 1))); TempDIGlobalVariable Temp = N->clone(); EXPECT_EQ(N, MDNode::replaceWithUniqued(std::move(Temp))); } -typedef MetadataTest DIGlobalVariableExpressionTest; - -TEST_F(DIGlobalVariableExpressionTest, get) { - DIScope *Scope = getSubprogram(); - StringRef Name = "name"; - StringRef LinkageName = "linkage"; - DIFile *File = getFile(); - unsigned Line = 5; - DIType *Type = getDerivedType(); - bool IsLocalToUnit = false; - bool IsDefinition = true; - auto *Expr = DIExpression::get(Context, {1, 2}); - auto *Expr2 = DIExpression::get(Context, {1, 2, 3}); - DIDerivedType *StaticDataMemberDeclaration = - cast<DIDerivedType>(getDerivedType()); - uint32_t AlignInBits = 8; - - auto *Var = DIGlobalVariable::get(Context, Scope, Name, LinkageName, File, - Line, Type, IsLocalToUnit, IsDefinition, - StaticDataMemberDeclaration, AlignInBits); - auto *Var2 = DIGlobalVariable::get(Context, Scope, "other", LinkageName, File, - Line, Type, IsLocalToUnit, IsDefinition, - StaticDataMemberDeclaration, AlignInBits); - auto *N = DIGlobalVariableExpression::get(Context, Var, Expr); - - EXPECT_EQ(Var, N->getVariable()); - EXPECT_EQ(Expr, N->getExpression()); - EXPECT_EQ(N, DIGlobalVariableExpression::get(Context, Var, Expr)); - EXPECT_NE(N, DIGlobalVariableExpression::get(Context, Var2, Expr)); - EXPECT_NE(N, DIGlobalVariableExpression::get(Context, Var, Expr2)); - - TempDIGlobalVariableExpression Temp = N->clone(); - EXPECT_EQ(N, MDNode::replaceWithUniqued(std::move(Temp))); -} - typedef MetadataTest DILocalVariableTest; TEST_F(DILocalVariableTest, get) { |