diff options
| author | Daniel Dunbar <daniel@zuster.org> | 2010-08-19 19:40:40 +0000 |
|---|---|---|
| committer | Daniel Dunbar <daniel@zuster.org> | 2010-08-19 19:40:40 +0000 |
| commit | 438c7724f9d549b855d1fbdf857c5d9d5b2ffe7d (patch) | |
| tree | b719548d29c2f3d576556082f267c58c7655158a | |
| parent | cbbc430d241872fdce4dd014d68f2527a8a6af81 (diff) | |
| download | bcm5719-llvm-438c7724f9d549b855d1fbdf857c5d9d5b2ffe7d.tar.gz bcm5719-llvm-438c7724f9d549b855d1fbdf857c5d9d5b2ffe7d.zip | |
Fix a loop overrun in ComputePreamble when the last remapped file was erased,
and reenable crash recovery test.
- Reparsing is still very crashy / weird, so I had to sprinkle random code into
the remapped input to get it to do what I want (i.e., crash!).
llvm-svn: 111550
| -rw-r--r-- | clang/lib/Frontend/ASTUnit.cpp | 4 | ||||
| -rw-r--r-- | clang/test/Index/Inputs/crash-recovery-reparse-remap.c | 8 | ||||
| -rw-r--r-- | clang/test/Index/crash-recovery-reparse.c | 14 |
3 files changed, 17 insertions, 9 deletions
diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp index 523b8d0a6c2..4395246f493 100644 --- a/clang/lib/Frontend/ASTUnit.cpp +++ b/clang/lib/Frontend/ASTUnit.cpp @@ -850,6 +850,8 @@ ASTUnit::ComputePreamble(CompilerInvocation &Invocation, // Remove this remapping. We've captured the buffer already. M = PreprocessorOpts.eraseRemappedFile(M); E = PreprocessorOpts.remapped_file_end(); + if (M == E) + break; } } } @@ -875,6 +877,8 @@ ASTUnit::ComputePreamble(CompilerInvocation &Invocation, // Remove this remapping. We've captured the buffer already. M = PreprocessorOpts.eraseRemappedFile(M); E = PreprocessorOpts.remapped_file_buffer_end(); + if (M == E) + break; } } } diff --git a/clang/test/Index/Inputs/crash-recovery-reparse-remap.c b/clang/test/Index/Inputs/crash-recovery-reparse-remap.c index 8a7707a5902..0357dbe748a 100644 --- a/clang/test/Index/Inputs/crash-recovery-reparse-remap.c +++ b/clang/test/Index/Inputs/crash-recovery-reparse-remap.c @@ -1,3 +1,11 @@ + #warning parsing remapped file + + +int x; + #pragma clang __debug crash + +int x; + diff --git a/clang/test/Index/crash-recovery-reparse.c b/clang/test/Index/crash-recovery-reparse.c index 90ce25d1ad2..0697576880f 100644 --- a/clang/test/Index/crash-recovery-reparse.c +++ b/clang/test/Index/crash-recovery-reparse.c @@ -1,12 +1,8 @@ -// Disabled, pending investigation. -// RUN: false -// XFAIL: * -// -// RUNX: env CINDEXTEST_EDITING=1 \ -// RUNX: not c-index-test -test-load-source-reparse 1 local \ -// RUNX: -remap-file="%s;%S/Inputs/crash-recovery-reparse-remap.c" \ -// RUNX: %s 2> %t.err -// RUNX: FileCheck < %t.err -check-prefix=CHECK-REPARSE-SOURCE-CRASH %s +// RUN: env CINDEXTEST_EDITING=1 \ +// RUN: not c-index-test -test-load-source-reparse 1 local \ +// RUN: -remap-file="%s;%S/Inputs/crash-recovery-reparse-remap.c" \ +// RUN: %s 2> %t.err +// RUN: FileCheck < %t.err -check-prefix=CHECK-REPARSE-SOURCE-CRASH %s // CHECK-REPARSE-SOURCE-CRASH: Unable to reparse translation unit // // XFAIL: win32 |

