[DebugInfo] Support for DW_TAG_generic_subrange
This is needed to support fortran assumed rank arrays which have runtime rank. Summary: Fortran assumed rank arrays have dynamic rank. DWARF TAG DW_TAG_generic_subrange is needed to support that. Testing: unit test cases added (hand-written) check llvm check debug-info Reviewed By: aprantl Differential Revision: https://reviews.llvm.org/D89218
This commit is contained in:
@@ -300,6 +300,9 @@ private:
|
||||
SmallVectorImpl<uint64_t> &Record, unsigned &Abbrev);
|
||||
void writeDISubrange(const DISubrange *N, SmallVectorImpl<uint64_t> &Record,
|
||||
unsigned Abbrev);
|
||||
void writeDIGenericSubrange(const DIGenericSubrange *N,
|
||||
SmallVectorImpl<uint64_t> &Record,
|
||||
unsigned Abbrev);
|
||||
void writeDIEnumerator(const DIEnumerator *N,
|
||||
SmallVectorImpl<uint64_t> &Record, unsigned Abbrev);
|
||||
void writeDIBasicType(const DIBasicType *N, SmallVectorImpl<uint64_t> &Record,
|
||||
@@ -1553,6 +1556,19 @@ void ModuleBitcodeWriter::writeDISubrange(const DISubrange *N,
|
||||
Record.clear();
|
||||
}
|
||||
|
||||
void ModuleBitcodeWriter::writeDIGenericSubrange(
|
||||
const DIGenericSubrange *N, SmallVectorImpl<uint64_t> &Record,
|
||||
unsigned Abbrev) {
|
||||
Record.push_back((uint64_t)N->isDistinct());
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getRawCountNode()));
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getRawLowerBound()));
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getRawUpperBound()));
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getRawStride()));
|
||||
|
||||
Stream.EmitRecord(bitc::METADATA_GENERIC_SUBRANGE, Record, Abbrev);
|
||||
Record.clear();
|
||||
}
|
||||
|
||||
static void emitSignedInt64(SmallVectorImpl<uint64_t> &Vals, uint64_t V) {
|
||||
if ((int64_t)V >= 0)
|
||||
Vals.push_back(V << 1);
|
||||
|
||||
Reference in New Issue
Block a user