[DebugInfo] Upgrade DISubrange to support Fortran dynamic arrays
This patch upgrades DISubrange to support fortran requirements. Summary: Below are the updates/addition of fields. lowerBound - Now accepts signed integer or DIVariable or DIExpression, earlier it accepted only signed integer. upperBound - This field is now added and accepts signed interger or DIVariable or DIExpression. stride - This field is now added and accepts signed interger or DIVariable or DIExpression. This is required to describe bounds of array which are known at runtime. Testing: unit test cases added (hand-written) check clang check llvm check debug-info Reviewed By: aprantl Differential Revision: https://reviews.llvm.org/D80197
This commit is contained in:
committed by
Sourabh Singh Tomar
parent
213c6cdf2e
commit
d20bf5a725
@@ -1527,10 +1527,12 @@ static uint64_t rotateSign(int64_t I) {
|
||||
void ModuleBitcodeWriter::writeDISubrange(const DISubrange *N,
|
||||
SmallVectorImpl<uint64_t> &Record,
|
||||
unsigned Abbrev) {
|
||||
const uint64_t Version = 1 << 1;
|
||||
const uint64_t Version = 2 << 1;
|
||||
Record.push_back((uint64_t)N->isDistinct() | Version);
|
||||
Record.push_back(VE.getMetadataOrNullID(N->getRawCountNode()));
|
||||
Record.push_back(rotateSign(N->getLowerBound()));
|
||||
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_SUBRANGE, Record, Abbrev);
|
||||
Record.clear();
|
||||
|
||||
Reference in New Issue
Block a user