[cfe-commits] r143644 - in /cfe/trunk: lib/Frontend/ASTUnit.cpp test/Index/pragma-diag-reparse.c
Argyrios Kyrtzidis
kyrtzidis at apple.com
Tue Nov 8 17:28:50 PST 2011
On Nov 7, 2011, at 9:17 AM, Argyrios Kyrtzidis wrote:
> On Nov 7, 2011, at 8:04 AM, Matthias Kleine wrote:
>
>> 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.
>
> Thanks for the test case, this appears to be another, PCH issue.\
Fixed in r144153, thanks!
>
>>
>> Cheers,
>> Matthias
>>
>> <pragma_reparse_crash_test2.patch>
>> 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
>>
>
> _______________________________________________
> 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