r302037 - DiagnosticsEngine should clear DelayedDiagID before reporting the
Richard Smith via cfe-commits
cfe-commits at lists.llvm.org
Wed May 3 14:28:34 PDT 2017
On 3 May 2017 at 08:41, Alex Lorenz via cfe-commits <
cfe-commits at lists.llvm.org> wrote:
> Author: arphaman
> Date: Wed May 3 10:41:16 2017
> New Revision: 302037
>
> URL: http://llvm.org/viewvc/llvm-project?rev=302037&view=rev
> Log:
> DiagnosticsEngine should clear DelayedDiagID before reporting the
> 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.
>
Thanks again!
> rdar://31962618
>
> Added:
> cfe/trunk/test/Index/KeepGoingWithLotsOfErrors.mm
> Modified:
> cfe/trunk/lib/Basic/Diagnostic.cpp
>
> Modified: cfe/trunk/lib/Basic/Diagnostic.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/
> Diagnostic.cpp?rev=302037&r1=302036&r2=302037&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/Basic/Diagnostic.cpp (original)
> +++ cfe/trunk/lib/Basic/Diagnostic.cpp Wed May 3 10:41:16 2017
> @@ -146,8 +146,9 @@ void DiagnosticsEngine::SetDelayedDiagno
> }
>
> void DiagnosticsEngine::ReportDelayed() {
> - Report(DelayedDiagID) << DelayedDiagArg1 << DelayedDiagArg2;
> + unsigned ID = DelayedDiagID;
> DelayedDiagID = 0;
> + Report(ID) << DelayedDiagArg1 << DelayedDiagArg2;
> DelayedDiagArg1.clear();
> DelayedDiagArg2.clear();
>
It looks like we can also remove these two clear() calls (which otherwise
look wrong, since we don't own the delayed diagnostic information any more
once we finish calling Report()).
}
>
> Added: cfe/trunk/test/Index/KeepGoingWithLotsOfErrors.mm
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/
> KeepGoingWithLotsOfErrors.mm?rev=302037&view=auto
> ============================================================
> ==================
> --- cfe/trunk/test/Index/KeepGoingWithLotsOfErrors.mm (added)
> +++ cfe/trunk/test/Index/KeepGoingWithLotsOfErrors.mm Wed May 3 10:41:16
> 2017
> @@ -0,0 +1,29 @@
> +// 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;
> +}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170503/8b2fa40f/attachment.html>
More information about the cfe-commits
mailing list