[PATCH] PR16909: Diagnose missing 'typename' on dependent template

Bataev, Alexey a.bataev at gmx.com
Thu Feb 12 19:06:33 PST 2015


Ahhh, now I see.
It seems your patch is missing tests for MS compatibility mode (both 
Sema and CodeGen). If you need to check something on Windows I can help 
you with it.

Best regards,
Alexey Bataev
=============
Software Engineer
Intel Compiler Team
Intel Corp.

12.02.2015 21:57, Ben Langmuir пишет:
> I tried to replicate the way the existing ‘missing typename’ 
> diagnostic behaved for MSVC compatibility.  Is there something more 
> that needs to be done here?  I’m not sure how I can verify that the 
> resulting IR is correct on Windows, though...
>
>> +void Sema::diagnoseMissingTypename(IdentifierInfo *II, 
>> SourceLocation IILoc,
>> +                                   Scope *S, CXXScopeSpec *SS) {
>> +  unsigned DiagID = diag::err_typename_missing;
>> +  if (getLangOpts().MSVCCompat && isMicrosoftMissingTypename(SS, S))
>> +    DiagID = diag::ext_typename_missing;
>
> Ben
>
>> On Feb 11, 2015, at 7:34 PM, Bataev, Alexey <a.bataev at gmx.com 
>> <mailto:a.bataev at gmx.com>> wrote:
>>
>> Hi Ben,
>> I don't think your patch is compatible with MSVC. MSVC accepts this 
>> code and clang should accept it and generate proper LLVM IR. 
>> Actually, you can run into similar code in MSVC system headers. 
>> That's the main problem
>> Best regards,
>> Alexey Bataev
>> =============
>> Software Engineer
>> Intel Compiler Team
>> Intel Corp.
>> 11.02.2015 20:37, Ben Langmuir пишет:
>>> Ping
>>>
>>>> On Jan 26, 2015, at 9:08 AM, Ben Langmuir <blangmuir at apple.com 
>>>> <mailto:blangmuir at apple.com>> wrote:
>>>>
>>>> This patch diagnoses a missing ‘typename’ keyword on nested 
>>>> template types like A<T>::B<U>, to fix llvm.org/pr16909 
>>>> <http://llvm.org/pr16909>. In addition to fixing an 
>>>> accepts-invalid, in C++11 such types would cause assertion failures 
>>>> and/or invalid LLVM IR when used with ‘auto’.
>>>>
>>>> I’m not 100% sure if the changes to 
>>>> test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp are 
>>>> desirable, or if we should suppress the missing ‘typename’ 
>>>> diagnostic when we’re already recovering on X<T>::X<T>.  I’m open 
>>>> to suggestions :-)
>>>>
>>>> Ben
>>>>
>>>> <pr16909.patch>
>>>
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150213/a2504dbb/attachment.html>


More information about the cfe-commits mailing list