Allow lookup into dependent bases in more places under -fms-compatibility
authorReid Kleckner <reid@kleckner.net>
Wed, 11 Jun 2014 00:01:28 +0000 (00:01 +0000)
committerReid Kleckner <reid@kleckner.net>
Wed, 11 Jun 2014 00:01:28 +0000 (00:01 +0000)
commit10ca24c631626b85d95e453a2dfc8661c52a8a5e
tree9e99f4da7c41a2446820cf9ea499906f5a29cfe6
parent2dace6e54bf977b255e49d70d7999da7ae4a5932
Allow lookup into dependent bases in more places under -fms-compatibility

We currently allow unqualified lookup for instance methods but not
static methods because we can't recover with a semantic 'this->'
insertion.

ATL headers have static methods that do unqualified lookup into
dependent base classes.  The pattern looks like:

  template <typename T> struct Foo : T {
    static int *getBarFromT() { return Bar; }
  };

Now we recover as if the user had written:

  template <typename T> struct Foo : T {
    static int *getBarFromT() { return Foo::Bar; }
  };

... which will eventually look up Bar in T at instantiation time.

Now we emit a diagnostic in both cases, and delay lookup in other
contexts where 'this' is available and refers to a class with dependent
bases.

Reviewed by: rsmith

Differential Revision: http://reviews.llvm.org/D4079

llvm-svn: 210611
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/lib/Sema/SemaExpr.cpp
clang/test/SemaTemplate/ms-lookup-template-base-classes.cpp