From: Anders Carlsson Date: Fri, 28 Aug 2009 05:49:21 +0000 (+0000) Subject: Create UnresolvedUsingDecls. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=550b14b410eaed037c9b791806194e6cea1ebe90;p=clang Create UnresolvedUsingDecls. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80346 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index 6876c2c9a8..b2c5403686 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -98,8 +98,6 @@ def err_using_requires_qualname : Error< "using declaration requires a qualified name">; def err_using_typename_non_type : Error< "'typename' keyword used on a non-type">; -def err_using_dependent_unsupported : Error< - "dependent using declaration not supported yet">; def err_using_decl_nested_name_specifier_is_not_a_base_class : Error< "using declaration refers into %0, which is not a base class of %1">; def err_using_decl_can_not_refer_to_class_member : Error< diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 51f8fa5697..602caf2825 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -2127,13 +2127,9 @@ NamedDecl *Sema::BuildUsingDeclaration(SourceLocation UsingLoc, assert(!SS.isInvalid() && "Invalid CXXScopeSpec."); assert(IdentLoc.isValid() && "Invalid TargetName location."); - // FIXME: Implement this properly! - if (isUnknownSpecialization(SS)) { - Diag(IdentLoc, diag::err_using_dependent_unsupported); - delete AttrList; - return 0; - } - + // FIXME: We ignore attributes for now. + delete AttrList; + if (SS.isEmpty()) { Diag(IdentLoc, diag::err_using_requires_qualname); return 0; @@ -2142,6 +2138,12 @@ NamedDecl *Sema::BuildUsingDeclaration(SourceLocation UsingLoc, NestedNameSpecifier *NNS = static_cast(SS.getScopeRep()); + if (isUnknownSpecialization(SS)) { + return UnresolvedUsingDecl::Create(Context, CurContext, UsingLoc, + SS.getRange(), NNS, + IdentLoc, Name, IsTypeName); + } + DeclContext *LookupContext = 0; if (const CXXRecordDecl *RD = dyn_cast(CurContext)) { @@ -2202,9 +2204,6 @@ NamedDecl *Sema::BuildUsingDeclaration(SourceLocation UsingLoc, return 0; } - // FIXME: We ignore attributes for now. - delete AttrList; - return UsingDecl::Create(Context, CurContext, IdentLoc, SS.getRange(), ND->getLocation(), UsingLoc, ND, NNS, IsTypeName); }