DI: Remove DW_TAG_arg_variable and DW_TAG_auto_variable
Remove the fake `DW_TAG_auto_variable` and `DW_TAG_arg_variable` tags,
using `DW_TAG_variable` in their place Stop exposing the `tag:` field at
all in the assembly format for `DILocalVariable`.
Most of the testcase updates were generated by the following sed script:
find test/ -name "*.ll" -o -name "*.mir" |
xargs grep -l 'DILocalVariable' |
xargs sed -i '' \
-e 's/tag: DW_TAG_arg_variable, //' \
-e 's/tag: DW_TAG_auto_variable, //'
There were only a handful of tests in `test/Assembly` that I needed to
update by hand.
(Note: a follow-up could change `DILocalVariable::DILocalVariable()` to
set the tag to `DW_TAG_formal_parameter` instead of `DW_TAG_variable`
(as appropriate), instead of having that logic magically in the backend
in `DbgVariable`. I've added a FIXME to that effect.)
llvm-svn: 243774
This commit is contained in:
@@ -1972,15 +1972,19 @@ std::error_code BitcodeReader::parseMetadata() {
|
||||
}
|
||||
case bitc::METADATA_LOCAL_VAR: {
|
||||
// 10th field is for the obseleted 'inlinedAt:' field.
|
||||
if (Record.size() != 9 && Record.size() != 10)
|
||||
if (Record.size() < 8 || Record.size() > 10)
|
||||
return error("Invalid record");
|
||||
|
||||
// 2nd field used to be an artificial tag, either DW_TAG_auto_variable or
|
||||
// DW_TAG_arg_variable.
|
||||
bool HasTag = Record.size() > 8;
|
||||
MDValueList.assignValue(
|
||||
GET_OR_DISTINCT(DILocalVariable, Record[0],
|
||||
(Context, Record[1], getMDOrNull(Record[2]),
|
||||
getMDString(Record[3]), getMDOrNull(Record[4]),
|
||||
Record[5], getMDOrNull(Record[6]), Record[7],
|
||||
Record[8])),
|
||||
(Context, getMDOrNull(Record[1 + HasTag]),
|
||||
getMDString(Record[2 + HasTag]),
|
||||
getMDOrNull(Record[3 + HasTag]), Record[4 + HasTag],
|
||||
getMDOrNull(Record[5 + HasTag]), Record[6 + HasTag],
|
||||
Record[7 + HasTag])),
|
||||
NextMDValueNo++);
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user