[PATCH] Do not parse members of incomplete class.
Serge Pavlov
sepavloff at gmail.com
Mon May 25 05:15:17 PDT 2015
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/20150525/e21f1044/attachment.html>
More information about the cfe-commits
mailing list