diff options
author | Anastasia Stulova <anastasia.stulova@arm.com> | 2019-01-04 11:50:36 +0000 |
---|---|---|
committer | Anastasia Stulova <anastasia.stulova@arm.com> | 2019-01-04 11:50:36 +0000 |
commit | 4cebc9db04a29a8491b59e8178b4100d3c1a9c84 (patch) | |
tree | bc070ee7f98751dcdf5fb0d4bd0b851e3b42d6cb /clang/lib | |
parent | c6ed91e100fad24ccfd6602997879c0f543f4935 (diff) | |
download | bcm5719-llvm-4cebc9db04a29a8491b59e8178b4100d3c1a9c84.tar.gz bcm5719-llvm-4cebc9db04a29a8491b59e8178b4100d3c1a9c84.zip |
[Basic] Extend DiagnosticEngine to store and format Qualifiers.
Qualifiers can now be streamed into the DiagnosticEngine using
regular << operator. If Qualifiers are empty 'unqualified' will
be printed in the diagnostic otherwise regular qual syntax is
used.
Differential Revision: https://reviews.llvm.org/D56198
llvm-svn: 350386
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/AST/ASTDiagnostic.cpp | 14 | ||||
-rw-r--r-- | clang/lib/Basic/Diagnostic.cpp | 1 | ||||
-rw-r--r-- | clang/lib/Sema/SemaOverload.cpp | 8 |
3 files changed, 18 insertions, 5 deletions
diff --git a/clang/lib/AST/ASTDiagnostic.cpp b/clang/lib/AST/ASTDiagnostic.cpp index 50d2d2999e5..dd058555857 100644 --- a/clang/lib/AST/ASTDiagnostic.cpp +++ b/clang/lib/AST/ASTDiagnostic.cpp @@ -334,6 +334,20 @@ void clang::FormatASTNodeDiagnosticArgument( switch (Kind) { default: llvm_unreachable("unknown ArgumentKind"); + case DiagnosticsEngine::ak_qual: { + assert(Modifier.empty() && Argument.empty() && + "Invalid modifier for Qualfiers argument"); + + Qualifiers Q(Qualifiers::fromOpaqueValue(Val)); + auto S = Q.getAsString(); + if (S.empty()) { + OS << "unqualified"; + NeedQuotes = false; + } else { + OS << Q.getAsString(); + } + break; + } case DiagnosticsEngine::ak_qualtype_pair: { TemplateDiffTypes &TDT = *reinterpret_cast<TemplateDiffTypes*>(Val); QualType FromType = diff --git a/clang/lib/Basic/Diagnostic.cpp b/clang/lib/Basic/Diagnostic.cpp index ffe92e157e5..56c54cb9070 100644 --- a/clang/lib/Basic/Diagnostic.cpp +++ b/clang/lib/Basic/Diagnostic.cpp @@ -983,6 +983,7 @@ FormatDiagnostic(const char *DiagStr, const char *DiagEnd, llvm::raw_svector_ostream(OutStr) << '\'' << II->getName() << '\''; break; } + case DiagnosticsEngine::ak_qual: case DiagnosticsEngine::ak_qualtype: case DiagnosticsEngine::ak_declarationname: case DiagnosticsEngine::ak_nameddecl: diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index 94f7979f66f..6f50dd9bccd 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -2824,11 +2824,9 @@ void Sema::HandleFunctionTypeMismatch(PartialDiagnostic &PDiag, return; } - // FIXME: OpenCL: Need to consider address spaces - unsigned FromQuals = FromFunction->getTypeQuals().getCVRUQualifiers(); - unsigned ToQuals = ToFunction->getTypeQuals().getCVRUQualifiers(); - if (FromQuals != ToQuals) { - PDiag << ft_qualifer_mismatch << ToQuals << FromQuals; + if (FromFunction->getTypeQuals() != ToFunction->getTypeQuals()) { + PDiag << ft_qualifer_mismatch << ToFunction->getTypeQuals() + << FromFunction->getTypeQuals(); return; } |