Author: ahatanak Date: Tue Jan 22 16:55:48 2019 New Revision: 351911 URL: http://llvm.org/viewvc/llvm-project?rev=351911&view=rev Log: [Sema][ObjC] Check whether a DelayedDiagnosticPool has been pushed before adding a delayed diagnostic to DelayedDiagnostics.
This fixes an assertion failure in Sema::DelayedDiagnostics::add that was caused by the changes made in r141037. rdar://problem/42782323 Modified: cfe/trunk/lib/Sema/SemaDecl.cpp cfe/trunk/test/SemaObjCXX/arc-0x.mm Modified: cfe/trunk/lib/Sema/SemaDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=351911&r1=351910&r2=351911&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) +++ cfe/trunk/lib/Sema/SemaDecl.cpp Tue Jan 22 16:55:48 2019 @@ -12545,9 +12545,13 @@ ParmVarDecl *Sema::CheckParameter(DeclCo // - otherwise, it's an error if (T->isArrayType()) { if (!T.isConstQualified()) { - DelayedDiagnostics.add( - sema::DelayedDiagnostic::makeForbiddenType( - NameLoc, diag::err_arc_array_param_no_ownership, T, false)); + if (DelayedDiagnostics.shouldDelayDiagnostics()) + DelayedDiagnostics.add( + sema::DelayedDiagnostic::makeForbiddenType( + NameLoc, diag::err_arc_array_param_no_ownership, T, false)); + else + Diag(NameLoc, diag::err_arc_array_param_no_ownership) + << TSInfo->getTypeLoc().getSourceRange(); } lifetime = Qualifiers::OCL_ExplicitNone; } else { Modified: cfe/trunk/test/SemaObjCXX/arc-0x.mm URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjCXX/arc-0x.mm?rev=351911&r1=351910&r2=351911&view=diff ============================================================================== --- cfe/trunk/test/SemaObjCXX/arc-0x.mm (original) +++ cfe/trunk/test/SemaObjCXX/arc-0x.mm Tue Jan 22 16:55:48 2019 @@ -101,3 +101,13 @@ namespace rdar12078752 { __autoreleasing auto o3 = o; } } + +namespace test_err_arc_array_param_no_ownership { + template <class T> + void func(T a) {} + + void test() { + func([](A *a[]){}); // expected-error{{must explicitly describe intended ownership of an object array parameter}} + func(^(A *a[]){}); // expected-error{{must explicitly describe intended ownership of an object array parameter}} + } +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits