diff options
| author | Mike Stump <mrs@apple.com> | 2009-07-25 23:24:03 +0000 |
|---|---|---|
| committer | Mike Stump <mrs@apple.com> | 2009-07-25 23:24:03 +0000 |
| commit | ea086c72631ad414be00ab049d53fc0e51b67e94 (patch) | |
| tree | 4a10931d2d9fa4938772c6fbd77b1b2c8632c4a5 /clang/lib/AST/ASTContext.cpp | |
| parent | 0af00396a790f11d77831c9da47ec5de7c469c97 (diff) | |
| download | bcm5719-llvm-ea086c72631ad414be00ab049d53fc0e51b67e94.tar.gz bcm5719-llvm-ea086c72631ad414be00ab049d53fc0e51b67e94.zip | |
Preserve qualifiers.
llvm-svn: 77097
Diffstat (limited to 'clang/lib/AST/ASTContext.cpp')
| -rw-r--r-- | clang/lib/AST/ASTContext.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index 27c8a81975c..ff9b7215bcb 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -1042,15 +1042,21 @@ QualType ASTContext::getObjCGCQualType(QualType T, } QualType ASTContext::getNoReturnType(QualType T) { + QualifierSet qs; + qs.strip(T); if (T->isPointerType()) { QualType Pointee = T->getAsPointerType()->getPointeeType(); QualType ResultType = getNoReturnType(Pointee); - return getPointerType(ResultType); + ResultType = getPointerType(ResultType); + ResultType.setCVRQualifiers(T.getCVRQualifiers()); + return qs.apply(ResultType, *this); } if (T->isBlockPointerType()) { QualType Pointee = T->getAsBlockPointerType()->getPointeeType(); QualType ResultType = getNoReturnType(Pointee); - return getBlockPointerType(ResultType); + ResultType = getBlockPointerType(ResultType); + ResultType.setCVRQualifiers(T.getCVRQualifiers()); + return qs.apply(ResultType, *this); } if (!T->isFunctionType()) assert(0 && "can't noreturn qualify non-pointer to function or block type"); @@ -2157,7 +2163,7 @@ QualType ASTContext::getBaseElementType(QualType QT) { const Type *UT = qualifiers.strip(QT); if (const ArrayType *AT = getAsArrayType(QualType(UT,0))) { QT = AT->getElementType(); - }else { + } else { return qualifiers.apply(QT, *this); } } @@ -3369,6 +3375,7 @@ QualType ASTContext::mergeFunctionTypes(QualType lhs, QualType rhs) { allLTypes = false; if (getCanonicalType(retType) != getCanonicalType(rbase->getResultType())) allRTypes = false; + // FIXME: double check this bool NoReturn = lbase->getNoReturnAttr() || rbase->getNoReturnAttr(); if (NoReturn != lbase->getNoReturnAttr()) allLTypes = false; |

