[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