forked from OSchip/llvm-project
Fix uninitialized read error reported by MSAN.
The problem was that our Obj -> Yaml dumper had not been taught to handle certain types of records. This meant that when I generated the test input files, the records were still there but none of its fields were filled out. So when it did the Yaml -> Obj conversion as part of the test, it generated records with garbage in them. The patch here fixes the Obj <-> Yaml converter, and additionally updates the test file with fresh Yaml generated by the fixed converter. llvm-svn: 322029
This commit is contained in:
parent
281d20b601
commit
59468f5a1e
|
@ -100,12 +100,12 @@ sections:
|
|||
Checksums:
|
||||
- FileName: 'd:\src\llvmbuild\cl\debug\x64\a.cpp'
|
||||
Kind: MD5
|
||||
Checksum: 108D915B38B79821EA2169DBD317C259
|
||||
Checksum: 70DD90BF2C1A2E8D7C450DFA55E3062D
|
||||
- !InlineeLines
|
||||
HasExtraFiles: false
|
||||
Sites:
|
||||
- FileName: 'd:\src\llvmbuild\cl\debug\x64\a.cpp'
|
||||
LineNum: 6
|
||||
LineNum: 8
|
||||
Inlinee: 4099
|
||||
- !StringTable
|
||||
Strings:
|
||||
|
@ -1312,8 +1312,16 @@ sections:
|
|||
VarName: __formal
|
||||
- Kind: S_DEFRANGE_REGISTER
|
||||
DefRangeRegisterSym:
|
||||
Register: 18
|
||||
MayHaveNoName: 0
|
||||
Range:
|
||||
OffsetStart: 0
|
||||
ISectStart: 0
|
||||
Range: 10
|
||||
Gaps:
|
||||
- Kind: S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE
|
||||
DefRangeFramePointerRelFullScopeSym:
|
||||
Register: 48
|
||||
- Kind: S_CALLEES
|
||||
CallerSym:
|
||||
FuncID: [ 4103 ]
|
||||
|
@ -1325,6 +1333,13 @@ sections:
|
|||
Name: x
|
||||
- Kind: S_DEFRANGE_REGISTER
|
||||
DefRangeRegisterSym:
|
||||
Register: 18
|
||||
MayHaveNoName: 0
|
||||
Range:
|
||||
OffsetStart: 10
|
||||
ISectStart: 0
|
||||
Range: 9
|
||||
Gaps:
|
||||
- Kind: S_FRAMEPROC
|
||||
FrameProcSym:
|
||||
TotalFrameBytes: 40
|
||||
|
@ -1351,21 +1366,21 @@ sections:
|
|||
- FileName: 'd:\src\llvmbuild\cl\debug\x64\a.cpp'
|
||||
Lines:
|
||||
- Offset: 0
|
||||
LineStart: 5
|
||||
IsStatement: true
|
||||
EndDelta: 0
|
||||
- Offset: 4
|
||||
LineStart: 6
|
||||
IsStatement: true
|
||||
EndDelta: 0
|
||||
- Offset: 14
|
||||
LineStart: 7
|
||||
IsStatement: true
|
||||
EndDelta: 0
|
||||
- Offset: 19
|
||||
- Offset: 4
|
||||
LineStart: 8
|
||||
IsStatement: true
|
||||
EndDelta: 0
|
||||
- Offset: 14
|
||||
LineStart: 9
|
||||
IsStatement: true
|
||||
EndDelta: 0
|
||||
- Offset: 19
|
||||
LineStart: 10
|
||||
IsStatement: true
|
||||
EndDelta: 0
|
||||
Columns:
|
||||
Relocations:
|
||||
- VirtualAddress: 44
|
||||
|
@ -1427,10 +1442,25 @@ sections:
|
|||
VarName: argc
|
||||
- Kind: S_DEFRANGE_REGISTER
|
||||
DefRangeRegisterSym:
|
||||
Register: 18
|
||||
MayHaveNoName: 0
|
||||
Range:
|
||||
OffsetStart: 0
|
||||
ISectStart: 0
|
||||
Range: 16
|
||||
Gaps:
|
||||
- Kind: S_DEFRANGE_REGISTER
|
||||
DefRangeRegisterSym:
|
||||
Register: 18
|
||||
MayHaveNoName: 1
|
||||
Range:
|
||||
OffsetStart: 27
|
||||
ISectStart: 0
|
||||
Range: 5
|
||||
Gaps:
|
||||
- Kind: S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE
|
||||
DefRangeFramePointerRelFullScopeSym:
|
||||
Register: 48
|
||||
- Kind: S_LOCAL
|
||||
LocalSym:
|
||||
Type: 4098
|
||||
|
@ -1438,10 +1468,25 @@ sections:
|
|||
VarName: argv
|
||||
- Kind: S_DEFRANGE_REGISTER
|
||||
DefRangeRegisterSym:
|
||||
Register: 331
|
||||
MayHaveNoName: 0
|
||||
Range:
|
||||
OffsetStart: 0
|
||||
ISectStart: 0
|
||||
Range: 21
|
||||
Gaps:
|
||||
- Kind: S_DEFRANGE_REGISTER
|
||||
DefRangeRegisterSym:
|
||||
Register: 331
|
||||
MayHaveNoName: 1
|
||||
Range:
|
||||
OffsetStart: 27
|
||||
ISectStart: 0
|
||||
Range: 5
|
||||
Gaps:
|
||||
- Kind: S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE
|
||||
DefRangeFramePointerRelFullScopeSym:
|
||||
Register: 56
|
||||
- Kind: S_INLINESITE
|
||||
InlineSiteSym:
|
||||
Inlinee: 4099
|
||||
|
@ -1458,6 +1503,15 @@ sections:
|
|||
Name: x
|
||||
- Kind: S_DEFRANGE_REGISTER
|
||||
DefRangeRegisterSym:
|
||||
Register: 17
|
||||
MayHaveNoName: 0
|
||||
Range:
|
||||
OffsetStart: 10
|
||||
ISectStart: 0
|
||||
Range: 22
|
||||
Gaps:
|
||||
- GapStartOffset: 11
|
||||
Range: 6
|
||||
- Kind: S_FRAMEPROC
|
||||
FrameProcSym:
|
||||
TotalFrameBytes: 40
|
||||
|
@ -1493,15 +1547,15 @@ sections:
|
|||
- FileName: 'd:\src\llvmbuild\cl\debug\x64\a.cpp'
|
||||
Lines:
|
||||
- Offset: 0
|
||||
LineStart: 10
|
||||
LineStart: 12
|
||||
IsStatement: true
|
||||
EndDelta: 0
|
||||
- Offset: 4
|
||||
LineStart: 11
|
||||
LineStart: 13
|
||||
IsStatement: true
|
||||
EndDelta: 0
|
||||
- Offset: 27
|
||||
LineStart: 13
|
||||
LineStart: 15
|
||||
IsStatement: true
|
||||
EndDelta: 0
|
||||
Columns:
|
||||
|
|
|
@ -100,7 +100,7 @@ sections:
|
|||
Checksums:
|
||||
- FileName: 'd:\src\llvmbuild\cl\debug\x64\b.cpp'
|
||||
Kind: MD5
|
||||
Checksum: 2B9F08E2C7D63D3033E1997500CE3C53
|
||||
Checksum: 8B4E383DAF442E63771294D52BF55155
|
||||
- !StringTable
|
||||
Strings:
|
||||
- 'd:\src\llvmbuild\cl\debug\x64\b.cpp'
|
||||
|
@ -1287,8 +1287,16 @@ sections:
|
|||
VarName: __formal
|
||||
- Kind: S_DEFRANGE_REGISTER
|
||||
DefRangeRegisterSym:
|
||||
Register: 18
|
||||
MayHaveNoName: 0
|
||||
Range:
|
||||
OffsetStart: 0
|
||||
ISectStart: 0
|
||||
Range: 10
|
||||
Gaps:
|
||||
- Kind: S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE
|
||||
DefRangeFramePointerRelFullScopeSym:
|
||||
Register: 48
|
||||
- Kind: S_CALLEES
|
||||
CallerSym:
|
||||
FuncID: [ 4099 ]
|
||||
|
@ -1300,6 +1308,13 @@ sections:
|
|||
Name: y
|
||||
- Kind: S_DEFRANGE_REGISTER
|
||||
DefRangeRegisterSym:
|
||||
Register: 18
|
||||
MayHaveNoName: 0
|
||||
Range:
|
||||
OffsetStart: 10
|
||||
ISectStart: 0
|
||||
Range: 9
|
||||
Gaps:
|
||||
- Kind: S_FRAMEPROC
|
||||
FrameProcSym:
|
||||
TotalFrameBytes: 40
|
||||
|
@ -1326,21 +1341,21 @@ sections:
|
|||
- FileName: 'd:\src\llvmbuild\cl\debug\x64\b.cpp'
|
||||
Lines:
|
||||
- Offset: 0
|
||||
LineStart: 5
|
||||
IsStatement: true
|
||||
EndDelta: 0
|
||||
- Offset: 4
|
||||
LineStart: 6
|
||||
IsStatement: true
|
||||
EndDelta: 0
|
||||
- Offset: 14
|
||||
LineStart: 7
|
||||
IsStatement: true
|
||||
EndDelta: 0
|
||||
- Offset: 19
|
||||
- Offset: 4
|
||||
LineStart: 8
|
||||
IsStatement: true
|
||||
EndDelta: 0
|
||||
- Offset: 14
|
||||
LineStart: 9
|
||||
IsStatement: true
|
||||
EndDelta: 0
|
||||
- Offset: 19
|
||||
LineStart: 10
|
||||
IsStatement: true
|
||||
EndDelta: 0
|
||||
Columns:
|
||||
Relocations:
|
||||
- VirtualAddress: 44
|
||||
|
|
|
@ -40,6 +40,7 @@ using namespace llvm::CodeViewYAML::detail;
|
|||
using namespace llvm::yaml;
|
||||
|
||||
LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(TypeIndex)
|
||||
LLVM_YAML_IS_SEQUENCE_VECTOR(LocalVariableAddrGap)
|
||||
|
||||
// We only need to declare these, the definitions are in CodeViewYAMLTypes.cpp
|
||||
LLVM_YAML_DECLARE_SCALAR_TRAITS(APSInt, QuotingType::None)
|
||||
|
@ -180,6 +181,24 @@ void ScalarEnumerationTraits<FrameCookieKind>::enumeration(
|
|||
}
|
||||
}
|
||||
|
||||
namespace llvm {
|
||||
namespace yaml {
|
||||
template <> struct MappingTraits<LocalVariableAddrRange> {
|
||||
static void mapping(IO &io, LocalVariableAddrRange &Range) {
|
||||
io.mapRequired("OffsetStart", Range.OffsetStart);
|
||||
io.mapRequired("ISectStart", Range.ISectStart);
|
||||
io.mapRequired("Range", Range.Range);
|
||||
}
|
||||
};
|
||||
template <> struct MappingTraits<LocalVariableAddrGap> {
|
||||
static void mapping(IO &io, LocalVariableAddrGap &Gap) {
|
||||
io.mapRequired("GapStartOffset", Gap.GapStartOffset);
|
||||
io.mapRequired("Range", Gap.Range);
|
||||
}
|
||||
};
|
||||
} // namespace yaml
|
||||
} // namespace llvm
|
||||
|
||||
namespace llvm {
|
||||
namespace CodeViewYAML {
|
||||
namespace detail {
|
||||
|
@ -353,32 +372,50 @@ template <> void SymbolRecordImpl<LocalSym>::map(IO &IO) {
|
|||
}
|
||||
|
||||
template <> void SymbolRecordImpl<DefRangeSym>::map(IO &IO) {
|
||||
// TODO: Print the subfields
|
||||
IO.mapRequired("Program", Symbol.Program);
|
||||
IO.mapRequired("Range", Symbol.Range);
|
||||
IO.mapRequired("Gaps", Symbol.Gaps);
|
||||
}
|
||||
|
||||
template <> void SymbolRecordImpl<DefRangeSubfieldSym>::map(IO &IO) {
|
||||
// TODO: Print the subfields
|
||||
IO.mapRequired("Program", Symbol.Program);
|
||||
IO.mapRequired("OffsetInParent", Symbol.OffsetInParent);
|
||||
IO.mapRequired("Range", Symbol.Range);
|
||||
IO.mapRequired("Gaps", Symbol.Gaps);
|
||||
}
|
||||
|
||||
template <> void SymbolRecordImpl<DefRangeRegisterSym>::map(IO &IO) {
|
||||
// TODO: Print the subfields
|
||||
IO.mapRequired("Register", Symbol.Hdr.Register);
|
||||
IO.mapRequired("MayHaveNoName", Symbol.Hdr.MayHaveNoName);
|
||||
IO.mapRequired("Range", Symbol.Range);
|
||||
IO.mapRequired("Gaps", Symbol.Gaps);
|
||||
}
|
||||
|
||||
template <> void SymbolRecordImpl<DefRangeFramePointerRelSym>::map(IO &IO) {
|
||||
// TODO: Print the subfields
|
||||
IO.mapRequired("Offset", Symbol.Offset);
|
||||
IO.mapRequired("Range", Symbol.Range);
|
||||
IO.mapRequired("Gaps", Symbol.Gaps);
|
||||
}
|
||||
|
||||
template <> void SymbolRecordImpl<DefRangeSubfieldRegisterSym>::map(IO &IO) {
|
||||
// TODO: Print the subfields
|
||||
IO.mapRequired("Register", Symbol.Hdr.Register);
|
||||
IO.mapRequired("MayHaveNoName", Symbol.Hdr.MayHaveNoName);
|
||||
IO.mapRequired("OffsetInParent", Symbol.Hdr.OffsetInParent);
|
||||
IO.mapRequired("Range", Symbol.Range);
|
||||
IO.mapRequired("Gaps", Symbol.Gaps);
|
||||
}
|
||||
|
||||
template <>
|
||||
void SymbolRecordImpl<DefRangeFramePointerRelFullScopeSym>::map(IO &IO) {
|
||||
// TODO: Print the subfields
|
||||
IO.mapRequired("Register", Symbol.Offset);
|
||||
}
|
||||
|
||||
template <> void SymbolRecordImpl<DefRangeRegisterRelSym>::map(IO &IO) {
|
||||
// TODO: Print the subfields
|
||||
IO.mapRequired("Register", Symbol.Hdr.Register);
|
||||
IO.mapRequired("Flags", Symbol.Hdr.Flags);
|
||||
IO.mapRequired("BasePointerOffset", Symbol.Hdr.BasePointerOffset);
|
||||
IO.mapRequired("Range", Symbol.Range);
|
||||
IO.mapRequired("Gaps", Symbol.Gaps);
|
||||
}
|
||||
|
||||
template <> void SymbolRecordImpl<BlockSym>::map(IO &IO) {
|
||||
|
|
Loading…
Reference in New Issue