r339210 - PR38286: Don't crash when attempting to define a constructor for an

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Wed Aug 8 05:06:57 PDT 2018


Merged in r339236. Thanks!

On Wed, Aug 8, 2018 at 2:46 AM, Richard Smith <richard at metafoo.co.uk> wrote:
> Would be good to get this into the Clang 7 release.
>
> On Tue, 7 Aug 2018 at 17:43, Richard Smith via cfe-commits
> <cfe-commits at lists.llvm.org> wrote:
>>
>> Author: rsmith
>> Date: Tue Aug  7 17:42:42 2018
>> New Revision: 339210
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=339210&view=rev
>> Log:
>> PR38286: Don't crash when attempting to define a constructor for an
>> incomplete class template.
>>
>> Modified:
>>     cfe/trunk/lib/Sema/SemaExprCXX.cpp
>>     cfe/trunk/test/SemaCXX/constructor.cpp
>>
>> Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=339210&r1=339209&r2=339210&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original)
>> +++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Tue Aug  7 17:42:42 2018
>> @@ -113,9 +113,15 @@ ParsedType Sema::getConstructorName(Iden
>>        break;
>>      }
>>    }
>> -  if (!InjectedClassName && CurClass->isInvalidDecl())
>> +  if (!InjectedClassName) {
>> +    if (!CurClass->isInvalidDecl()) {
>> +      // FIXME: RequireCompleteDeclContext doesn't check dependent
>> contexts
>> +      // properly. Work around it here for now.
>> +      Diag(SS.getLastQualifierNameLoc(),
>> +           diag::err_incomplete_nested_name_spec) << CurClass <<
>> SS.getRange();
>> +    }
>>      return ParsedType();
>> -  assert(InjectedClassName && "couldn't find injected class name");
>> +  }
>>
>>    QualType T = Context.getTypeDeclType(InjectedClassName);
>>    DiagnoseUseOfDecl(InjectedClassName, NameLoc);
>>
>> Modified: cfe/trunk/test/SemaCXX/constructor.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/constructor.cpp?rev=339210&r1=339209&r2=339210&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/test/SemaCXX/constructor.cpp (original)
>> +++ cfe/trunk/test/SemaCXX/constructor.cpp Tue Aug  7 17:42:42 2018
>> @@ -86,3 +86,14 @@ A::S::operator int() { return 1; }
>>
>>  A::S::~S() {}
>>
>> +namespace PR38286 {
>> +  // FIXME: It'd be nice to give more consistent diagnostics for these
>> cases
>> +  // (but they're all failing for somewhat different reasons...).
>> +  template<typename> struct A;
>> +  template<typename T> A<T>::A() {} // expected-error {{incomplete type
>> 'A' named in nested name specifier}}
>> +  /*FIXME: needed to recover properly from previous error*/;
>> +  template<typename> struct B;
>> +  template<typename T> void B<T>::f() {} // expected-error {{out-of-line
>> definition of 'f' from class 'B<type-parameter-0-0>'}}
>> +  template<typename> struct C;
>> +  template<typename T> C<T>::~C() {} // expected-error {{no type named
>> 'C' in 'C<type-parameter-0-0>'}}
>> +}
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


More information about the cfe-commits mailing list