summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/IR/DebugInfoMetadata.cpp7
-rw-r--r--llvm/unittests/IR/MetadataTest.cpp20
2 files changed, 22 insertions, 5 deletions
diff --git a/llvm/lib/IR/DebugInfoMetadata.cpp b/llvm/lib/IR/DebugInfoMetadata.cpp
index f6f2ff2d20c..4be35636cf8 100644
--- a/llvm/lib/IR/DebugInfoMetadata.cpp
+++ b/llvm/lib/IR/DebugInfoMetadata.cpp
@@ -456,11 +456,8 @@ MDLocalVariable *MDLocalVariable::getImpl(LLVMContext &Context, unsigned Tag,
Metadata *Type, unsigned Arg,
unsigned Flags, StorageType Storage,
bool ShouldCreate) {
- // Truncate Arg to 8 bits.
- //
- // FIXME: This is gross (and should be changed to an assert or removed), but
- // it matches historical behaviour for now.
- Arg &= (1u << 8) - 1;
+ // 64K ought to be enough for any frontend.
+ assert(Arg <= UINT16_MAX && "Expected argument number to fit in 16-bits");
assert(Scope && "Expected scope");
assert(isCanonical(Name) && "Expected canonical MDString");
diff --git a/llvm/unittests/IR/MetadataTest.cpp b/llvm/unittests/IR/MetadataTest.cpp
index cb882e76f41..60d2506cbf9 100644
--- a/llvm/unittests/IR/MetadataTest.cpp
+++ b/llvm/unittests/IR/MetadataTest.cpp
@@ -1849,6 +1849,26 @@ TEST_F(MDLocalVariableTest, get) {
EXPECT_EQ(N, MDNode::replaceWithUniqued(std::move(Temp)));
}
+TEST_F(MDLocalVariableTest, getArg256) {
+ EXPECT_EQ(255u, MDLocalVariable::get(Context, dwarf::DW_TAG_arg_variable,
+ getSubprogram(), "", getFile(), 0,
+ nullptr, 255, 0)
+ ->getArg());
+ EXPECT_EQ(256u, MDLocalVariable::get(Context, dwarf::DW_TAG_arg_variable,
+ getSubprogram(), "", getFile(), 0,
+ nullptr, 256, 0)
+ ->getArg());
+ EXPECT_EQ(257u, MDLocalVariable::get(Context, dwarf::DW_TAG_arg_variable,
+ getSubprogram(), "", getFile(), 0,
+ nullptr, 257, 0)
+ ->getArg());
+ unsigned Max = UINT16_MAX;
+ EXPECT_EQ(Max, MDLocalVariable::get(Context, dwarf::DW_TAG_arg_variable,
+ getSubprogram(), "", getFile(), 0,
+ nullptr, Max, 0)
+ ->getArg());
+}
+
typedef MetadataTest MDExpressionTest;
TEST_F(MDExpressionTest, get) {
OpenPOWER on IntegriCloud