ebevhan created this revision. ebevhan added reviewers: rjmccall, arichardson. Herald added a subscriber: cfe-commits.
The documentation for getAddrSpaceQualType says: "If T already has an address space specifier, it is silently replaced." The function did not do this; it asserted instead. Fix it so that it behaves according to the comment. Repository: rC Clang https://reviews.llvm.org/D47627 Files: lib/AST/ASTContext.cpp Index: lib/AST/ASTContext.cpp =================================================================== --- lib/AST/ASTContext.cpp +++ lib/AST/ASTContext.cpp @@ -2496,12 +2496,16 @@ const Type *TypeNode = Quals.strip(T); // If this type already has an address space specified, it cannot get - // another one. - assert(!Quals.hasAddressSpace() && - "Type cannot be in multiple addr spaces!"); - Quals.addAddressSpace(AddressSpace); + // another one. Replace it. + if (Quals.hasAddressSpace()) + Quals.removeAddressSpace(); + if (AddressSpace != LangAS::Default) + Quals.addAddressSpace(AddressSpace); - return getExtQualType(TypeNode, Quals); + if (Quals.hasNonFastQualifiers()) + return getExtQualType(TypeNode, Quals); + else + return QualType(TypeNode, Quals.getFastQualifiers()); } QualType ASTContext::removeAddrSpaceQualType(QualType T) const {
Index: lib/AST/ASTContext.cpp =================================================================== --- lib/AST/ASTContext.cpp +++ lib/AST/ASTContext.cpp @@ -2496,12 +2496,16 @@ const Type *TypeNode = Quals.strip(T); // If this type already has an address space specified, it cannot get - // another one. - assert(!Quals.hasAddressSpace() && - "Type cannot be in multiple addr spaces!"); - Quals.addAddressSpace(AddressSpace); + // another one. Replace it. + if (Quals.hasAddressSpace()) + Quals.removeAddressSpace(); + if (AddressSpace != LangAS::Default) + Quals.addAddressSpace(AddressSpace); - return getExtQualType(TypeNode, Quals); + if (Quals.hasNonFastQualifiers()) + return getExtQualType(TypeNode, Quals); + else + return QualType(TypeNode, Quals.getFastQualifiers()); } QualType ASTContext::removeAddrSpaceQualType(QualType T) const {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits