mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
DebugInfo: Support up to 2^16 arguments in a subprogram
Support up to 2^16 arguments to a function. If we do hit the limit, assert out rather than restarting at 0 as we've done historically. This fixes PR23332. A clang test will follow. llvm-svn: 235955
This commit is contained in:
parent
381ec865bc
commit
8c5315ef84
@ -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");
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user