From: Francois Pichet Date: Sat, 3 Dec 2011 15:55:29 +0000 (+0000) Subject: In Microsoft mode, don't perform typo correction in a template member function depend... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4d604d6f1d413864e7dad8e368ba9a69a3f478c7;p=clang In Microsoft mode, don't perform typo correction in a template member function dependent context because it interferes with the "lookup into dependent bases of class templates" feature. Basically typo correction will try to offer a correction instead of looking into type dependent base classes. I found this problem while parsing Microsoft ATL code with clang. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145772 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaLookup.cpp b/lib/Sema/SemaLookup.cpp index c232515ef3..9f1e9a5516 100644 --- a/lib/Sema/SemaLookup.cpp +++ b/lib/Sema/SemaLookup.cpp @@ -3556,6 +3556,13 @@ TypoCorrection Sema::CorrectTypo(const DeclarationNameInfo &TypoName, if (Diags.hasFatalErrorOccurred() || !getLangOptions().SpellChecking) return TypoCorrection(); + // In Microsoft mode, don't perform typo correction in a template member + // function dependent context because it interferes with the "lookup into + // dependent bases of class templates" feature. + if (getLangOptions().MicrosoftMode && CurContext->isDependentContext() && + isa(CurContext)) + return TypoCorrection(); + // We only attempt to correct typos for identifiers. IdentifierInfo *Typo = TypoName.getName().getAsIdentifierInfo(); if (!Typo) diff --git a/test/SemaTemplate/ms-lookup-template-base-classes.cpp b/test/SemaTemplate/ms-lookup-template-base-classes.cpp index 901f104ec3..2c422dc7e3 100644 --- a/test/SemaTemplate/ms-lookup-template-base-classes.cpp +++ b/test/SemaTemplate/ms-lookup-template-base-classes.cpp @@ -123,3 +123,23 @@ int main2() } } + + +namespace lookup_dependent_base_no_typo_correction { + +class C { +public: + int m_hWnd; +}; + +template +class A : public T { +public: + void f(int hWnd) { + m_hWnd = 1; + } +}; + +template class A; + +}