[cfe-commits] r155935 - in /cfe/trunk/lib/Sema: SemaCXXScopeSpec.cpp SemaTemplate.cpp
Matt Beaumont-Gay
matthewbg at google.com
Tue May 1 13:31:51 PDT 2012
Testcase?
On Tue, May 1, 2012 at 1:23 PM, Douglas Gregor <dgregor at apple.com> wrote:
> Author: dgregor
> Date: Tue May 1 15:23:02 2012
> New Revision: 155935
>
> URL: http://llvm.org/viewvc/llvm-project?rev=155935&view=rev
> Log:
> In C++11 mode, implement the C++11 semantics for
> [basic.lookup.classref]p1 and p4, which concerns name lookup for
> nested-name-specifiers and template names, respectively, in a member
> access expression. C++98/03 forces us to look both in the scope of the
> object and in the current scope, then compare the results. C++11 just
> takes the result from the scope of the object, if something is
> found. Fixes <rdar://problem/11328502>.
>
> Modified:
> cfe/trunk/lib/Sema/SemaCXXScopeSpec.cpp
> cfe/trunk/lib/Sema/SemaTemplate.cpp
>
> Modified: cfe/trunk/lib/Sema/SemaCXXScopeSpec.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaCXXScopeSpec.cpp?rev=155935&r1=155934&r2=155935&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaCXXScopeSpec.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaCXXScopeSpec.cpp Tue May 1 15:23:02 2012
> @@ -539,8 +539,9 @@
>
> NamedDecl *SD = Found.getAsSingle<NamedDecl>();
> if (isAcceptableNestedNameSpecifier(SD)) {
> - if (!ObjectType.isNull() && !ObjectTypeSearchedInScope) {
> - // C++ [basic.lookup.classref]p4:
> + if (!ObjectType.isNull() && !ObjectTypeSearchedInScope &&
> + !getLangOpts().CPlusPlus0x) {
> + // C++03 [basic.lookup.classref]p4:
> // [...] If the name is found in both contexts, the
> // class-name-or-namespace-name shall refer to the same entity.
> //
> @@ -548,6 +549,8 @@
> // into the current scope (the scope of the postfix-expression) to
> // see if we can find the same name there. As above, if there is no
> // scope, reconstruct the result from the template instantiation itself.
> + //
> + // Note that C++11 does *not* perform this redundant lookup.
> NamedDecl *OuterDecl;
> if (S) {
> LookupResult FoundOuter(*this, &Identifier, IdentifierLoc,
>
> Modified: cfe/trunk/lib/Sema/SemaTemplate.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplate.cpp?rev=155935&r1=155934&r2=155935&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaTemplate.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaTemplate.cpp Tue May 1 15:23:02 2012
> @@ -354,12 +354,14 @@
> return;
> }
>
> - if (S && !ObjectType.isNull() && !ObjectTypeSearchedInScope) {
> - // C++ [basic.lookup.classref]p1:
> + if (S && !ObjectType.isNull() && !ObjectTypeSearchedInScope &&
> + !(getLangOpts().CPlusPlus0x && !Found.empty())) {
> + // C++03 [basic.lookup.classref]p1:
> // [...] If the lookup in the class of the object expression finds a
> // template, the name is also looked up in the context of the entire
> // postfix-expression and [...]
> //
> + // Note: C++11 does not perform this second lookup.
> LookupResult FoundOuter(*this, Found.getLookupName(), Found.getNameLoc(),
> LookupOrdinaryName);
> LookupName(FoundOuter, S);
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list