summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Analysis/Consumed.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/clang/lib/Analysis/Consumed.cpp b/clang/lib/Analysis/Consumed.cpp
index 35267c1cf06..13306f92a5c 100644
--- a/clang/lib/Analysis/Consumed.cpp
+++ b/clang/lib/Analysis/Consumed.cpp
@@ -142,10 +142,13 @@ static bool isCallableInState(const CallableWhenAttr *CWAttr,
}
static bool isConsumableType(const QualType &QT) {
+ if (QT->isPointerType() || QT->isReferenceType())
+ return false;
+
if (const CXXRecordDecl *RD = QT->getAsCXXRecordDecl())
return RD->hasAttr<ConsumableAttr>();
- else
- return false;
+
+ return false;
}
static bool isKnownState(ConsumedState State) {
@@ -163,7 +166,8 @@ static bool isKnownState(ConsumedState State) {
static bool isRValueRefish(QualType ParamType) {
return ParamType->isRValueReferenceType() ||
(ParamType->isLValueReferenceType() &&
- !cast<LValueReferenceType>(*ParamType).isSpelledAsLValue());
+ !cast<LValueReferenceType>(
+ ParamType.getCanonicalType())->isSpelledAsLValue());
}
static bool isTestingFunction(const FunctionDecl *FunDecl) {
@@ -864,7 +868,7 @@ void ConsumedStmtVisitor::VisitParmVarDecl(const ParmVarDecl *Param) {
const ParamTypestateAttr *PTAttr = Param->getAttr<ParamTypestateAttr>();
ParamState = mapParamTypestateAttrState(PTAttr);
- } else if (isValueType(ParamType) && isConsumableType(ParamType)) {
+ } else if (isConsumableType(ParamType)) {
ParamState = mapConsumableAttrState(ParamType);
} else if (isRValueRefish(ParamType) &&
OpenPOWER on IntegriCloud