[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