CarlosAlbertoEnciso added inline comments.
================ Comment at: lib/Sema/Sema.cpp:1884-1885 + ND = NA->getAliasedNamespace(); + if (auto *NNS = NA->getQualifier()) + MarkNamespaceAliasReferenced(NNS->getAsNamespaceAlias()); + } ---------------- rsmith wrote: > The loop and recursion here -- and indeed this whole function -- seem > unnecessary. > > ``` > namespace A {} // #1 > namespace X { > namespace B = A; // #2 > } > namespace Y = X; // #3 > namespace C = Y::B; // #4 > ``` > > Declaration `#4` should mark `#2` and `#3` referenced. So the only > 'unreferenced namespace alias' warning we should get here is for `#4` -- and > there is no need for marking `#4` as referenced to affect `#2` or `#3`. The function and recursion is to be able to handle cases like: ``` namespace N { int var; } void Foo() { namespace NA = N; namespace NB = NA; NB::var = 4; } ``` 'var' is referenced and N, NA and NB should be marked as 'referenced' as well. ================ Comment at: lib/Sema/Sema.cpp:1890-1891 + +/// \brief Mark as referenced any 'using declaration' that have introduced +/// the given declaration in the current context. +void Sema::MarkUsingReferenced(Decl *D, CXXScopeSpec *SS, Expr *E) { ---------------- rsmith wrote: > Why is this ever appropriate? I would think we should just mark the named > declaration from the relevant lookup as referenced in all cases. My intention is to detect cases where the using statements do not affect other declarations. ``` namespace N { int var; } void Foo() { using N::var; <- No Referenced N::var = 1; <- Used } ``` https://reviews.llvm.org/D46190 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits