@@ -98,8 +98,6 @@ static bool TypeHasMayAlias(QualType QTy) {
98
98
99
99
// / Check if the given type is a valid base type to be used in access tags.
100
100
static bool isValidBaseType (QualType QTy) {
101
- if (QTy->isReferenceType ())
102
- return false ;
103
101
if (const RecordType *TTy = QTy->getAs <RecordType>()) {
104
102
const RecordDecl *RD = TTy->getDecl ()->getDefinition ();
105
103
// Incomplete types are not valid base access types.
@@ -243,9 +241,10 @@ llvm::MDNode *CodeGenTBAA::getTypeInfo(QualType QTy) {
243
241
// aggregate will result into the may-alias access descriptor, meaning all
244
242
// subsequent accesses to direct and indirect members of that aggregate will
245
243
// be considered may-alias too.
246
- // TODO: Combine getTypeInfo() and getBaseTypeInfo() into a single function.
244
+ // TODO: Combine getTypeInfo() and getValidBaseTypeInfo() into a single
245
+ // function.
247
246
if (isValidBaseType (QTy))
248
- return getBaseTypeInfo (QTy);
247
+ return getValidBaseTypeInfo (QTy);
249
248
250
249
const Type *Ty = Context.getCanonicalType (QTy).getTypePtr ();
251
250
if (llvm::MDNode *N = MetadataCache[Ty])
@@ -394,7 +393,7 @@ llvm::MDNode *CodeGenTBAA::getBaseTypeInfoHelper(const Type *Ty) {
394
393
if (BaseRD->isEmpty ())
395
394
continue ;
396
395
llvm::MDNode *TypeNode = isValidBaseType (BaseQTy)
397
- ? getBaseTypeInfo (BaseQTy)
396
+ ? getValidBaseTypeInfo (BaseQTy)
398
397
: getTypeInfo (BaseQTy);
399
398
if (!TypeNode)
400
399
return nullptr ;
@@ -418,8 +417,9 @@ llvm::MDNode *CodeGenTBAA::getBaseTypeInfoHelper(const Type *Ty) {
418
417
if (Field->isZeroSize (Context) || Field->isUnnamedBitfield ())
419
418
continue ;
420
419
QualType FieldQTy = Field->getType ();
421
- llvm::MDNode *TypeNode = isValidBaseType (FieldQTy) ?
422
- getBaseTypeInfo (FieldQTy) : getTypeInfo (FieldQTy);
420
+ llvm::MDNode *TypeNode = isValidBaseType (FieldQTy)
421
+ ? getValidBaseTypeInfo (FieldQTy)
422
+ : getTypeInfo (FieldQTy);
423
423
if (!TypeNode)
424
424
return nullptr ;
425
425
@@ -456,9 +456,8 @@ llvm::MDNode *CodeGenTBAA::getBaseTypeInfoHelper(const Type *Ty) {
456
456
return nullptr ;
457
457
}
458
458
459
- llvm::MDNode *CodeGenTBAA::getBaseTypeInfo (QualType QTy) {
460
- if (!isValidBaseType (QTy))
461
- return nullptr ;
459
+ llvm::MDNode *CodeGenTBAA::getValidBaseTypeInfo (QualType QTy) {
460
+ assert (isValidBaseType (QTy) && " Must be a valid base type" );
462
461
463
462
const Type *Ty = Context.getCanonicalType (QTy).getTypePtr ();
464
463
@@ -477,6 +476,10 @@ llvm::MDNode *CodeGenTBAA::getBaseTypeInfo(QualType QTy) {
477
476
return TypeNode;
478
477
}
479
478
479
+ llvm::MDNode *CodeGenTBAA::getBaseTypeInfo (QualType QTy) {
480
+ return isValidBaseType (QTy) ? getValidBaseTypeInfo (QTy) : nullptr ;
481
+ }
482
+
480
483
llvm::MDNode *CodeGenTBAA::getAccessTagInfo (TBAAAccessInfo Info) {
481
484
assert (!Info.isIncomplete () && " Access to an object of an incomplete type!" );
482
485
0 commit comments