delayed diagnostic
This avoids an infinite loop that was uncovered in one of our internal tests
by r301992. The testcase is the most reduced version of that auto-generated
test.
rdar://
31962618
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@302037
91177308-0d34-0410-b5e6-
96231b3b80d8
}
void DiagnosticsEngine::ReportDelayed() {
- Report(DelayedDiagID) << DelayedDiagArg1 << DelayedDiagArg2;
+ unsigned ID = DelayedDiagID;
DelayedDiagID = 0;
+ Report(ID) << DelayedDiagArg1 << DelayedDiagArg2;
DelayedDiagArg1.clear();
DelayedDiagArg2.clear();
}
--- /dev/null
+// RUN: env CINDEXTEST_KEEP_GOING=1 c-index-test -code-completion-at=%s:25:1 %s
+// Shouldn't crash!
+// This is the minimized test that triggered an infinite loop:
+
++(BOOL) onEntity {
+}
+
+-(const Object &) a_200 {
+}
+
+-(int) struct {
+}
+
+-(int) bar {
+}
+
+-(int) part {
+}
+
++(some_type_t) piece {
+}
+
++(void) z_Z_42 {
+ ([self onEntity: [] { 42];
+ } class: ^ { }
+];
+ [super];
+ BOOL struct;
+}