diff options
Diffstat (limited to 'lib/Sema/Sema.cpp')
-rw-r--r-- | lib/Sema/Sema.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/Sema/Sema.cpp b/lib/Sema/Sema.cpp index 0d9ad12eda..f291be1abb 100644 --- a/lib/Sema/Sema.cpp +++ b/lib/Sema/Sema.cpp @@ -345,6 +345,31 @@ NamedDecl *Sema::getCurFunctionOrMethodDecl() { return 0; } +void Sema::DiagnoseMissingMember(SourceLocation MemberLoc, + DeclarationName Member, + NestedNameSpecifier *NNS, SourceRange Range) { + switch (NNS->getKind()) { + default: assert(0 && "Unexpected nested name specifier kind!"); + case NestedNameSpecifier::TypeSpec: { + const Type *Ty = Context.getCanonicalType(NNS->getAsType()); + RecordDecl *RD = cast<RecordType>(Ty)->getDecl(); + Diag(MemberLoc, diag::err_typecheck_record_no_member) + << RD->getTagKind() << RD << Member << Range; + break; + } + case NestedNameSpecifier::Namespace: { + Diag(MemberLoc, diag::err_typecheck_namespace_no_member) + << NNS->getAsNamespace() << Member << Range; + break; + } + case NestedNameSpecifier::Global: { + Diag(MemberLoc, diag::err_typecheck_global_scope_no_member) + << Member << Range; + break; + } + } +} + Sema::SemaDiagnosticBuilder::~SemaDiagnosticBuilder() { if (!this->Emit()) return; |