From: Douglas Gregor Date: Wed, 1 Jul 2009 23:29:14 +0000 (+0000) Subject: Fix PR 4489, a PCH crash during de-serialization. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ae4df629dda13736c9e3251921b168084cd01978;p=clang Fix PR 4489, a PCH crash during de-serialization. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@74664 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Frontend/PCHReaderStmt.cpp b/lib/Frontend/PCHReaderStmt.cpp index d096388061..eccb53bf81 100644 --- a/lib/Frontend/PCHReaderStmt.cpp +++ b/lib/Frontend/PCHReaderStmt.cpp @@ -1133,6 +1133,5 @@ Stmt *PCHReader::ReadStmt(llvm::BitstreamCursor &Cursor) { StmtStack.push_back(S); } assert(StmtStack.size() == 1 && "Extra expressions on stack!"); - SwitchCaseStmts.clear(); return StmtStack.back(); } diff --git a/lib/Frontend/PCHWriterStmt.cpp b/lib/Frontend/PCHWriterStmt.cpp index c63c03c882..5235326e9f 100644 --- a/lib/Frontend/PCHWriterStmt.cpp +++ b/lib/Frontend/PCHWriterStmt.cpp @@ -826,5 +826,4 @@ void PCHWriter::FlushStmts() { } StmtsToEmit.clear(); - SwitchCaseIDs.clear(); } diff --git a/test/PCH/pr4489.c b/test/PCH/pr4489.c new file mode 100644 index 0000000000..696da5bbb4 --- /dev/null +++ b/test/PCH/pr4489.c @@ -0,0 +1,20 @@ +// RUN: clang -x c-header -o %t.pch %s && +// RUN: clang -include %t -x c /dev/null -emit-llvm -S -o - +// PR 4489: Crash with PCH + +typedef struct _IO_FILE FILE; +extern int fprintf (struct _IO_FILE *__restrict __stream, + __const char *__restrict __format, ...); + +int x(void) +{ + switch (1) { + case 2: ; + int y = 0; + } +} + +void y(void) { + extern char z; + fprintf (0, "a"); +} \ No newline at end of file