[PATCH] Do not parse members of incomplete class.

Serge Pavlov sepavloff at gmail.com
Wed Jun 3 22:47:40 PDT 2015


Ping!

Thanks,
--Serge

2015-05-25 18:15 GMT+06:00 Serge Pavlov <sepavloff at gmail.com>:

> Any feedback?
>
> Thanks,
> --Serge
>
> 2015-04-16 0:52 GMT+06:00 Serge Pavlov <sepavloff at gmail.com>:
>
>> Ping.
>>
>> Thanks,
>> --Serge
>>
>> 2015-03-19 10:22 GMT+06:00 Serge Pavlov <sepavloff at gmail.com>:
>>
>>> Ping.
>>>
>>> Thanks,
>>> --Serge
>>>
>>> 2015-03-12 23:30 GMT+06:00 Serge Pavlov <sepavloff at gmail.com>:
>>>
>>>> Any feedback?
>>>>
>>>> Thanks,
>>>> --Serge
>>>>
>>>> 2015-03-02 23:54 GMT+06:00 Serge Pavlov <sepavloff at gmail.com>:
>>>>
>>>>> If definition of a class is unknown and out-of-line definition of its
>>>>> member is encountered, do not parse the member declaration.
>>>>> This change fixes PR18542.
>>>>>
>>>>> http://reviews.llvm.org/D8010
>>>>>
>>>>> Files:
>>>>>   lib/Sema/SemaDecl.cpp
>>>>>   test/SemaCXX/incomplete-call.cpp
>>>>>
>>>>> Index: lib/Sema/SemaDecl.cpp
>>>>> ===================================================================
>>>>> --- lib/Sema/SemaDecl.cpp
>>>>> +++ lib/Sema/SemaDecl.cpp
>>>>> @@ -4573,12 +4573,14 @@
>>>>>          RequireCompleteDeclContext(D.getCXXScopeSpec(), DC))
>>>>>        return nullptr;
>>>>>
>>>>> +    // If a class is incomplete, do not parse entities inside it.
>>>>>      if (isa<CXXRecordDecl>(DC) &&
>>>>> !cast<CXXRecordDecl>(DC)->hasDefinition()) {
>>>>>        Diag(D.getIdentifierLoc(),
>>>>>             diag::err_member_def_undefined_record)
>>>>>          << Name << DC << D.getCXXScopeSpec().getRange();
>>>>> -      D.setInvalidType();
>>>>> -    } else if (!D.getDeclSpec().isFriendSpecified()) {
>>>>> +      return nullptr;
>>>>> +    }
>>>>> +    if (!D.getDeclSpec().isFriendSpecified()) {
>>>>>        if (diagnoseQualifiedDeclaration(D.getCXXScopeSpec(), DC,
>>>>>                                        Name, D.getIdentifierLoc())) {
>>>>>          if (DC->isRecord())
>>>>> Index: test/SemaCXX/incomplete-call.cpp
>>>>> ===================================================================
>>>>> --- test/SemaCXX/incomplete-call.cpp
>>>>> +++ test/SemaCXX/incomplete-call.cpp
>>>>> @@ -47,3 +47,15 @@
>>>>>  void test_incomplete_object_call(C& c) {
>>>>>    c(); // expected-error{{incomplete type in call to object of type}}
>>>>>  }
>>>>> +
>>>>> +namespace pr18542 {
>>>>> +  struct X {
>>>>> +    int count;
>>>>> +    template<typename CharT> class basic_istream;
>>>>> +    template<typename CharT>
>>>>> +      void basic_istream<CharT>::read() { //
>>>>> expected-error{{out-of-line definition of 'read' from class
>>>>> 'basic_istream<CharT>' without definition}}
>>>>> +        count = 0;
>>>>> +      }
>>>>> +  };
>>>>> +}
>>>>> +
>>>>>
>>>>> EMAIL PREFERENCES
>>>>>   http://reviews.llvm.org/settings/panel/emailpreferences/
>>>>>
>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150604/e2f608df/attachment.html>


More information about the cfe-commits mailing list