]> granicus.if.org Git - clang/commitdiff
[Sema][ObjC] Check whether a DelayedDiagnosticPool has been pushed
authorAkira Hatanaka <ahatanaka@apple.com>
Wed, 23 Jan 2019 00:55:48 +0000 (00:55 +0000)
committerAkira Hatanaka <ahatanaka@apple.com>
Wed, 23 Jan 2019 00:55:48 +0000 (00:55 +0000)
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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@351911 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaDecl.cpp
test/SemaObjCXX/arc-0x.mm

index ccd9a5de6608d3966d49da68f2be601e4f62c9ed..c4a5b9cc5c76d34fe17a996ebd3323c5f808141d 100644 (file)
@@ -12545,9 +12545,13 @@ ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc,
     //   - 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 {
index 391fc47f342593c7b3b40de2aa62484e4e715241..d0f3284a180c214822f6581ba0c7e678ccb6888f 100644 (file)
@@ -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}}
+  }
+}