[cfe-commits] r143644 - in /cfe/trunk: lib/Frontend/ASTUnit.cpp test/Index/pragma-diag-reparse.c
Matthias Kleine
matthias_kleine at gmx.de
Mon Nov 7 08:04:49 PST 2011
This still asserts when including a file that uses pragma diagnostic, if pragma diagnostic is used before the include. See the attached patch for a test.
Cheers,
Matthias
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pragma_reparse_crash_test2.patch
Type: application/octet-stream
Size: 1086 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20111107/d7f44bbb/attachment.obj>
-------------- next part --------------
On Nov 3, 2011, at 9:28 PM, Argyrios Kyrtzidis wrote:
> Author: akirtzidis
> Date: Thu Nov 3 15:28:19 2011
> New Revision: 143644
>
> URL: http://llvm.org/viewvc/llvm-project?rev=143644&view=rev
> Log:
> [libclang] Fix crash when a #pragma diagnostic is included in the preamble.
>
> A PCH file keeps track of #pragma diagnostics state; when loading the preamble, they conflicted
> with the #pragma diagnostic state already present in the DiagnosticsEngine object due to
> parsing the preamble.
>
> Fix this by clearing the state of the DiagnosticsEngine object.
> Fixes rdar://10363572 && http://llvm.org/PR11254.
>
> Modified:
> cfe/trunk/lib/Frontend/ASTUnit.cpp
> cfe/trunk/test/Index/pragma-diag-reparse.c
>
> Modified: cfe/trunk/lib/Frontend/ASTUnit.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ASTUnit.cpp?rev=143644&r1=143643&r2=143644&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Frontend/ASTUnit.cpp (original)
> +++ cfe/trunk/lib/Frontend/ASTUnit.cpp Thu Nov 3 15:28:19 2011
> @@ -1388,8 +1388,6 @@
>
> // Set the state of the diagnostic object to mimic its state
> // after parsing the preamble.
> - // FIXME: This won't catch any #pragma push warning changes that
> - // have occurred in the preamble.
> getDiagnostics().Reset();
> ProcessWarningOptions(getDiagnostics(),
> PreambleInvocation->getDiagnosticOpts());
> @@ -1940,11 +1938,9 @@
> OverrideMainBuffer = getMainBufferWithPrecompiledPreamble(*Invocation);
>
> // Clear out the diagnostics state.
> - if (!OverrideMainBuffer) {
> - getDiagnostics().Reset();
> - ProcessWarningOptions(getDiagnostics(), Invocation->getDiagnosticOpts());
> - }
> -
> + getDiagnostics().Reset();
> + ProcessWarningOptions(getDiagnostics(), Invocation->getDiagnosticOpts());
> +
> // Parse the sources
> bool Result = Parse(OverrideMainBuffer);
>
>
> Modified: cfe/trunk/test/Index/pragma-diag-reparse.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/pragma-diag-reparse.c?rev=143644&r1=143643&r2=143644&view=diff
> ==============================================================================
> --- cfe/trunk/test/Index/pragma-diag-reparse.c (original)
> +++ cfe/trunk/test/Index/pragma-diag-reparse.c Thu Nov 3 15:28:19 2011
> @@ -1,13 +1,18 @@
> -// RUN: env CINDEXTEST_EDITING=1 c-index-test -test-load-source-reparse 5 local %s | FileCheck %s
> +#pragma clang diagnostic ignored "-Wtautological-compare"
>
> int main (int argc, const char * argv[])
> {
> #pragma clang diagnostic push
> #pragma clang diagnostic ignored "-Wdeprecated-declarations"
> - int x;
> + int x=0;
> #pragma clang diagnostic pop
>
> - return 0;
> + return x;
> }
>
> -// CHECK: pragma-diag-reparse.c:7:7: VarDecl=x:7:7 (Definition) Extent=[7:3 - 7:8]
> +void foo() { int b=0; while (b==b); }
> +
> +// RUN: env CINDEXTEST_EDITING=1 CINDEXTEST_FAILONERROR=1 c-index-test -test-load-source-reparse 5 local \
> +// RUN: %s -Wall -Werror | FileCheck %s
> +
> +// CHECK: pragma-diag-reparse.c:7:7: VarDecl=x:7:7 (Definition) Extent=[7:3 - 7:10]
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list