On Tue, Apr 29, 2014 at 8:05 PM, Nico Weber <[email protected]> wrote:
> On Tue, Apr 29, 2014 at 6:05 PM, Hans Wennborg <[email protected]> wrote:
>> Hi rnk, majnemer,
>>
>> This patch seems to fix the problem. Please take a look.
>>
>> http://reviews.llvm.org/D3555
>>
>> Files:
>>   lib/Parse/ParseTemplate.cpp
>>   test/Parser/DelayedTemplateParsing.cpp
>>
>> Index: lib/Parse/ParseTemplate.cpp
>> ===================================================================
>> --- lib/Parse/ParseTemplate.cpp
>> +++ lib/Parse/ParseTemplate.cpp
>> @@ -1255,15 +1255,23 @@
>>            new ParseScope(this, Scope::TemplateParamScope));
>>        Actions.ActOnReenterTemplateScope(getCurScope(), MD);
>>        ++CurTemplateDepthTracker;
>> -    } else if (CXXRecordDecl *MD = dyn_cast_or_null<CXXRecordDecl>(*II)) {
>> -      bool IsClassTemplate = MD->getDescribedClassTemplate() != 0;
>> +    } else if (CXXRecordDecl *RD = dyn_cast_or_null<CXXRecordDecl>(*II)) {
>> +      ClassTemplateDecl *CTD = RD->getDescribedClassTemplate();
>> +
>> +      if (!CTD) {
>> +        if (CXXRecordDecl *Parent = 
>> dyn_cast<CXXRecordDecl>(RD->getParent()))
>
> Is a single if enough here? Could there be more than one nesting level?

It was enough for the cases I tested. We're already walking the
lexical parents, so if for example BitSetType from my test is nested
inside another struct, it still works.
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to