[PATCH] D26922: [ObjC++] Don't enter a C++ declarator context when the current context is an Objective-C declaration

Alex Lorenz via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Nov 29 03:38:14 PST 2016


arphaman added a comment.

In https://reviews.llvm.org/D26922#607186, @ahatanak wrote:

> I wonder whether it is possible to avoid calling DeclScopeObj.EnterDeclaratorScope at ParseDecl.cpp:5317 instead of fixing Sema::ActOnCXXEnterDeclaratorScope?
>
> I believe it's calling EnterDeclaratorScope to enable name lookup when a namespace-member variable is defined outside the namespace. Since that's not the case here, it seems to me that it shouldn't called in the first place.
>
> http://en.cppreference.com/w/cpp/language/unqualified_lookup


Do you mean at ParseDecl:5266 (I get this line in the crash backtrace with ToT)?

AFAIK it's also used for static class member lookups for variables defined outside of a class. The `OuterType` is a C++ record so that's why it should be valid to call `EnterDeclaratorScope` there. I tested to verify this and I reach that call on line 5266 with the following example 3 times:

  namespace Foo {
   extern int x;
  }
  
  int Foo::x = 2; // EnterDeclaratorScope is called here
  
  class Bar {
  public:
     void foo();
     static int m;
  };
  
  int Bar::m = 2; // here
  
  class FooBar {
    friend void Bar::foo(); // and here
  };

So it doesn't seem reasonable to required this only for namespaces.

I suppose it might be better to avoid calling `EnterDeclaratorScope` anyway by moving the current context ObjC isa checks to `ShouldEnterDeclaratorScope`.


Repository:
  rL LLVM

https://reviews.llvm.org/D26922





More information about the cfe-commits mailing list