diff options
Diffstat (limited to 'lib/AST')
-rw-r--r-- | lib/AST/Type.cpp | 4 | ||||
-rw-r--r-- | lib/AST/TypePrinter.cpp | 17 |
2 files changed, 18 insertions, 3 deletions
diff --git a/lib/AST/Type.cpp b/lib/AST/Type.cpp index d8939cc123..36d501577c 100644 --- a/lib/AST/Type.cpp +++ b/lib/AST/Type.cpp @@ -1112,7 +1112,8 @@ llvm::StringRef FunctionType::getNameForCallConv(CallingConv CC) { FunctionProtoType::FunctionProtoType(QualType result, const QualType *args, unsigned numArgs, QualType canonical, const ExtProtoInfo &epi) - : FunctionType(FunctionProto, result, epi.Variadic, epi.TypeQuals, canonical, + : FunctionType(FunctionProto, result, epi.Variadic, epi.TypeQuals, + epi.RefQualifier, canonical, result->isDependentType(), result->isVariablyModifiedType(), result->containsUnexpandedParameterPack(), @@ -1162,6 +1163,7 @@ void FunctionProtoType::Profile(llvm::FoldingSetNodeID &ID, QualType Result, ID.AddPointer(ArgTys[i].getAsOpaquePtr()); ID.AddBoolean(epi.Variadic); ID.AddInteger(epi.TypeQuals); + ID.AddInteger(epi.RefQualifier); if (epi.HasExceptionSpec) { ID.AddBoolean(epi.HasAnyExceptionSpec); for (unsigned i = 0; i != epi.NumExceptions; ++i) diff --git a/lib/AST/TypePrinter.cpp b/lib/AST/TypePrinter.cpp index 8a740d4ad8..c0ce1f25bf 100644 --- a/lib/AST/TypePrinter.cpp +++ b/lib/AST/TypePrinter.cpp @@ -354,6 +354,21 @@ void TypePrinter::printFunctionProto(const FunctionProtoType *T, S += " __attribute__((regparm (" + llvm::utostr_32(Info.getRegParm()) + ")))"; + AppendTypeQualList(S, T->getTypeQuals()); + + switch (T->getRefQualifier()) { + case RQ_None: + break; + + case RQ_LValue: + S += " &"; + break; + + case RQ_RValue: + S += " &&"; + break; + } + if (T->hasExceptionSpec()) { S += " throw("; if (T->hasAnyExceptionSpec()) @@ -370,8 +385,6 @@ void TypePrinter::printFunctionProto(const FunctionProtoType *T, S += ")"; } - AppendTypeQualList(S, T->getTypeQuals()); - print(T->getResultType(), S); } |