diff options
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r-- | clang/lib/Sema/Sema.cpp | 17 | ||||
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 5 |
2 files changed, 14 insertions, 8 deletions
diff --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp index b01b5d77f3c..be21c36073c 100644 --- a/clang/lib/Sema/Sema.cpp +++ b/clang/lib/Sema/Sema.cpp @@ -22,17 +22,24 @@ using namespace clang; /// ConvertQualTypeToStringFn - This function is used to pretty print the /// specified QualType as a string in diagnostics. -static void ConvertArgToStringFn(Diagnostic::ArgumentKind Kind, intptr_t QT, +static void ConvertArgToStringFn(Diagnostic::ArgumentKind Kind, intptr_t Val, const char *Modifier, unsigned ML, const char *Argument, unsigned ArgLen, llvm::SmallVectorImpl<char> &Output) { assert(ML == 0 && ArgLen == 0 && "Invalid modifier for QualType argument"); - assert(Kind == Diagnostic::ak_qualtype); - QualType Ty(QualType::getFromOpaquePtr(reinterpret_cast<void*>(QT))); + std::string S; + if (Kind == Diagnostic::ak_qualtype) { + QualType Ty(QualType::getFromOpaquePtr(reinterpret_cast<void*>(Val))); - // FIXME: Playing with std::string is really slow. - std::string S = Ty.getAsString(); + // FIXME: Playing with std::string is really slow. + S = Ty.getAsString(); + } else { + assert(Kind == Diagnostic::ak_declarationname); + + DeclarationName N = DeclarationName::getFromOpaqueInteger(Val); + S = N.getAsString(); + } Output.append(S.begin(), S.end()); } diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index ef24d1a34a8..fba9f3328b1 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -856,10 +856,9 @@ Sema::ActOnDeclarator(Scope *S, Declarator &D, DeclTy *lastDecl) { SourceLocation L = D.getIdentifierLoc(); SourceRange R = D.getCXXScopeSpec().getRange(); if (isa<FunctionDecl>(CurContext)) { - Diag(L, diag::err_invalid_declarator_in_function) - << Name.getAsString() << R; + Diag(L, diag::err_invalid_declarator_in_function) << Name << R; } else { - Diag(L, diag::err_invalid_declarator_scope) + Diag(L, diag::err_invalid_declarator_scope) << Name.getAsString() << cast<NamedDecl>(DC)->getName() << R; } } |