diff options
| author | Douglas Gregor <dgregor@apple.com> | 2010-03-31 23:17:41 +0000 | 
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2010-03-31 23:17:41 +0000 | 
| commit | f5af3584cab155ba4da7957a018098b3765b4641 (patch) | |
| tree | 6320a516cde15b57a5af88ca0b73ff2d3ed66725 /clang/lib | |
| parent | 7f89a0ac88d24054119003503f58a7bbe8749877 (diff) | |
| download | bcm5719-llvm-f5af3584cab155ba4da7957a018098b3765b4641.tar.gz bcm5719-llvm-f5af3584cab155ba4da7957a018098b3765b4641.zip  | |
Improve diagnostics when an elaborated-type-specifer containing a
nested-name-specifier (e.g., "class T::foo") fails to find a tag
member in the scope nominated by the
nested-name-specifier. Previously, we gave a bland
  error: 'Nested' does not name a tag member in the specified scope
which didn't actually say where we were looking, which was rather
horrible when the nested-name-specifier was instantiated. Now, we give
something a bit better:
  error: no class named 'Nested' in 'NoDepBase<T>'
llvm-svn: 100060
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 3 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | 3 | ||||
| -rw-r--r-- | clang/lib/Sema/TreeTransform.h | 4 | 
3 files changed, 6 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index eef73d8d7f5..f3d0dcff20c 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -4786,7 +4786,8 @@ Sema::DeclPtrTy Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,        }        // A tag 'foo::bar' must already exist. -      Diag(NameLoc, diag::err_not_tag_in_scope) << Name << SS.getRange(); +      Diag(NameLoc, diag::err_not_tag_in_scope)  +        << Kind << Name << DC << SS.getRange();        Name = 0;        Invalid = true;        goto CreateNewDecl; diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp index 9777569b318..3375ccc0ebc 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -693,7 +693,8 @@ Decl *TemplateDeclInstantiator::VisitClassTemplateDecl(ClassTemplateDecl *D) {      if (!PrevClassTemplate && Qualifier) {        SemaRef.Diag(Pattern->getLocation(), diag::err_not_tag_in_scope) -        << Pattern->getDeclName() << Pattern->getQualifierRange(); +        << D->getTemplatedDecl()->getTagKind() << Pattern->getDeclName() << DC +        << Pattern->getQualifierRange();        return 0;      } diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index b08447e4805..f9ffd3f41aa 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -618,9 +618,9 @@ public:      }      if (!Tag) { -      // FIXME: Crummy diagnostic +      // FIXME: Would be nice to highlight just the source range.        SemaRef.Diag(SR.getEnd(), diag::err_not_tag_in_scope) -        << Id << SR; +        << Kind << Id << DC;        return QualType();      }  | 

