[PATCH] Do not parse members of incomplete class.
Serge Pavlov
sepavloff at gmail.com
Wed Mar 18 21:22:59 PDT 2015
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/20150319/4fa4df7c/attachment.html>
More information about the cfe-commits
mailing list