summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2010-08-19 19:40:40 +0000
committerDaniel Dunbar <daniel@zuster.org>2010-08-19 19:40:40 +0000
commit438c7724f9d549b855d1fbdf857c5d9d5b2ffe7d (patch)
treeb719548d29c2f3d576556082f267c58c7655158a
parentcbbc430d241872fdce4dd014d68f2527a8a6af81 (diff)
downloadbcm5719-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.cpp4
-rw-r--r--clang/test/Index/Inputs/crash-recovery-reparse-remap.c8
-rw-r--r--clang/test/Index/crash-recovery-reparse.c14
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
OpenPOWER on IntegriCloud