diff options
| author | Douglas Gregor <dgregor@apple.com> | 2011-07-22 06:03:18 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2011-07-22 06:03:18 +0000 |
| commit | 77d993d3aaf7b8e7b435d06b86ad184765147683 (patch) | |
| tree | f02cdd0226894f02f6e4bddcbef6ad7a265df8e7 | |
| parent | 4dd6c043aec456d78162cac5f74d00c6a3e62c2e (diff) | |
| download | bcm5719-llvm-77d993d3aaf7b8e7b435d06b86ad184765147683.tar.gz bcm5719-llvm-77d993d3aaf7b8e7b435d06b86ad184765147683.zip | |
Fix an embarrassing bug in relocatable PCH support, where we were
passing a temporary const char* down as the "isysroot" parameter and
then accessing it later. Fixes <rdar://problem/9035180>.
llvm-svn: 135749
| -rw-r--r-- | clang/include/clang/Serialization/ASTWriter.h | 1 | ||||
| -rw-r--r-- | clang/lib/Serialization/GeneratePCH.cpp | 11 |
2 files changed, 11 insertions, 1 deletions
diff --git a/clang/include/clang/Serialization/ASTWriter.h b/clang/include/clang/Serialization/ASTWriter.h index 4e2583db1e8..1c5e365a23d 100644 --- a/clang/include/clang/Serialization/ASTWriter.h +++ b/clang/include/clang/Serialization/ASTWriter.h @@ -632,6 +632,7 @@ protected: public: PCHGenerator(const Preprocessor &PP, const std::string &OutputFile, bool Chaining, const char *isysroot, raw_ostream *Out); + ~PCHGenerator(); virtual void InitializeSema(Sema &S) { SemaPtr = &S; } virtual void HandleTranslationUnit(ASTContext &Ctx); virtual ASTMutationListener *GetASTMutationListener(); diff --git a/clang/lib/Serialization/GeneratePCH.cpp b/clang/lib/Serialization/GeneratePCH.cpp index b8833ceacc7..9cd694e05c3 100644 --- a/clang/lib/Serialization/GeneratePCH.cpp +++ b/clang/lib/Serialization/GeneratePCH.cpp @@ -23,6 +23,8 @@ #include "llvm/Bitcode/BitstreamWriter.h" #include "llvm/Support/raw_ostream.h" #include <string> +#include <string.h> +#include <stdlib.h> using namespace clang; @@ -31,7 +33,7 @@ PCHGenerator::PCHGenerator(const Preprocessor &PP, bool Chaining, const char *isysroot, llvm::raw_ostream *OS) - : PP(PP), OutputFile(OutputFile), isysroot(isysroot), Out(OS), SemaPtr(0), + : PP(PP), OutputFile(OutputFile), isysroot(0), Out(OS), SemaPtr(0), StatCalls(0), Stream(Buffer), Writer(Stream), Chaining(Chaining) { // Install a stat() listener to keep track of all of the stat() // calls. @@ -40,6 +42,13 @@ PCHGenerator::PCHGenerator(const Preprocessor &PP, // *after* the already installed ASTReader's stat cache. PP.getFileManager().addStatCache(StatCalls, /*AtBeginning=*/!Chaining); + + if (isysroot) + this->isysroot = strdup(isysroot); +} + +PCHGenerator::~PCHGenerator() { + free((void*)isysroot); } void PCHGenerator::HandleTranslationUnit(ASTContext &Ctx) { |

