diff options
author | Reid Kleckner <reid@kleckner.net> | 2014-06-11 00:01:28 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2014-06-11 00:01:28 +0000 |
commit | fc142cb60229143db3de1f60bcd561deebe8c2c1 (patch) | |
tree | fd789c8c18fe60540c9178cdc8e629746cc2c9c5 /include/clang/Basic/DiagnosticSemaKinds.td | |
parent | ae83eca8d28ac331d927c74ce90066e14b6591a5 (diff) | |
download | clang-fc142cb60229143db3de1f60bcd561deebe8c2c1.tar.gz clang-fc142cb60229143db3de1f60bcd561deebe8c2c1.tar.bz2 clang-fc142cb60229143db3de1f60bcd561deebe8c2c1.tar.xz |
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
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@210611 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/clang/Basic/DiagnosticSemaKinds.td')
-rw-r--r-- | include/clang/Basic/DiagnosticSemaKinds.td | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index 6522303f65..1c9aef2ff6 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -3662,9 +3662,13 @@ def err_unexpected_typedef : Error< def err_unexpected_namespace : Error< "unexpected namespace name %0: expected expression">; def err_undeclared_var_use : Error<"use of undeclared identifier %0">; -def warn_found_via_dependent_bases_lookup : ExtWarn<"use of identifier %0 " - "found via unqualified lookup into dependent bases of class templates is a " - "Microsoft extension">, InGroup<Microsoft>; +def ext_undeclared_unqual_id_with_dependent_base : ExtWarn< + "use of undeclared identifier %0; " + "unqualified lookup into dependent bases of class template %1 is a Microsoft extension">, + InGroup<Microsoft>; +def ext_found_via_dependent_bases_lookup : ExtWarn<"use of identifier %0 " + "found via unqualified lookup into dependent bases of class templates is a " + "Microsoft extension">, InGroup<Microsoft>; def note_dependent_var_use : Note<"must qualify identifier to find this " "declaration in dependent base class">; def err_not_found_by_two_phase_lookup : Error<"call to function %0 that is neither " |