diff options
author | Anton Korobeynikov <asl@math.spbu.ru> | 2006-09-01 20:35:17 +0000 |
---|---|---|
committer | Anton Korobeynikov <asl@math.spbu.ru> | 2006-09-01 20:35:17 +0000 |
commit | 7d5154490357a0cb12383e15a57640d9c20644a1 (patch) | |
tree | 9a87e8fa853a85653e08d0c51e11fb7688a11e96 | |
parent | b5aaee00276ec5d666a0202c51e5264ba7dc060e (diff) | |
download | external_llvm-7d5154490357a0cb12383e15a57640d9c20644a1.zip external_llvm-7d5154490357a0cb12383e15a57640d9c20644a1.tar.gz external_llvm-7d5154490357a0cb12383e15a57640d9c20644a1.tar.bz2 |
- Fixed broken Win32 build
- Removed warning about clobbered parameter in Bytecode/Reader
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30026 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Bytecode/Reader/Reader.cpp | 2 | ||||
-rw-r--r-- | lib/Bytecode/Reader/Reader.h | 2 | ||||
-rw-r--r-- | lib/System/Win32/MappedFile.inc | 2 | ||||
-rw-r--r-- | lib/System/Win32/Path.inc | 32 | ||||
-rw-r--r-- | lib/System/Win32/Program.inc | 4 | ||||
-rw-r--r-- | lib/System/Win32/Win32.h | 6 | ||||
-rw-r--r-- | tools/gccld/gccld.cpp | 15 | ||||
-rw-r--r-- | tools/llvm-ld/llvm-ld.cpp | 8 |
8 files changed, 43 insertions, 28 deletions
diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp index 7b42fee..60c8e4f 100644 --- a/lib/Bytecode/Reader/Reader.cpp +++ b/lib/Bytecode/Reader/Reader.cpp @@ -2409,7 +2409,7 @@ void BytecodeReader::ParseModule() { /// This function completely parses a bytecode buffer given by the \p Buf /// and \p Length parameters. -bool BytecodeReader::ParseBytecode(BufPtr Buf, unsigned Length, +bool BytecodeReader::ParseBytecode(volatile BufPtr Buf, unsigned Length, const std::string &ModuleID, std::string* ErrMsg) { diff --git a/lib/Bytecode/Reader/Reader.h b/lib/Bytecode/Reader/Reader.h index 711dc89..fcf79b4 100644 --- a/lib/Bytecode/Reader/Reader.h +++ b/lib/Bytecode/Reader/Reader.h @@ -140,7 +140,7 @@ public: /// @returns true if an error occurred /// @brief Main interface to parsing a bytecode buffer. bool ParseBytecode( - const unsigned char *Buf, ///< Beginning of the bytecode buffer + volatile BufPtr Buf, ///< Beginning of the bytecode buffer unsigned Length, ///< Length of the bytecode buffer const std::string &ModuleID, ///< An identifier for the module constructed. std::string* ErrMsg = 0 ///< Optional place for error message diff --git a/lib/System/Win32/MappedFile.inc b/lib/System/Win32/MappedFile.inc index d5bedfc..877ff52 100644 --- a/lib/System/Win32/MappedFile.inc +++ b/lib/System/Win32/MappedFile.inc @@ -55,6 +55,8 @@ bool MappedFile::initialize(std::string* ErrMsg) { return MakeErrMsg(ErrMsg, std::string("Can't get size of file: ") + path_.toString()); } + + return false; } void MappedFile::terminate() { diff --git a/lib/System/Win32/Path.inc b/lib/System/Win32/Path.inc index 96a59de..048bf60 100644 --- a/lib/System/Win32/Path.inc +++ b/lib/System/Win32/Path.inc @@ -315,12 +315,12 @@ bool Path::makeReadableOnDisk(std::string* ErrMsg) { return false; } -void Path::makeWriteableOnDisk(std::string* ErrMsg) { +bool Path::makeWriteableOnDisk(std::string* ErrMsg) { DWORD attr = GetFileAttributes(path.c_str()); // If it doesn't exist, we're done. if (attr == INVALID_FILE_ATTRIBUTES) - return; + return false; if (attr & FILE_ATTRIBUTE_READONLY) { if (!SetFileAttributes(path.c_str(), attr & ~FILE_ATTRIBUTE_READONLY)) { @@ -338,7 +338,11 @@ bool Path::makeExecutableOnDisk(std::string* ErrMsg) { bool Path::getDirectoryContents(std::set<Path>& result, std::string* ErrMsg) const { - if (!isDirectory()) { + FileStatus Status; + if (getFileStatus(Status, ErrMsg)) + return true; + + if (!Status.isDir) { MakeErrMsg(ErrMsg, path + ": not a directory"); return true; } @@ -512,7 +516,7 @@ Path::createDirectoryOnDisk(bool create_parents, std::string* ErrMsg) { // Drop trailing slash. pathname[len-1] = 0; if (!CreateDirectory(pathname, NULL)) { - return MakeErrMsg(, std::string(pathname) + ": Can't create directory: "); + return MakeErrMsg(ErrMsg, std::string(pathname) + ": Can't create directory: "); } } return false; @@ -652,10 +656,12 @@ Path::renamePathOnDisk(const Path& newName, std::string* ErrMsg) { } bool -Path::setStatusInfoOnDisk(const FileStatus &si, std::string *ErrStr) const { +Path::setStatusInfoOnDisk(const FileStatus &si, std::string *ErrMsg) const { // FIXME: should work on directories also. - if (!isFile()) return true; - + if (!si.isFile) { + return true; + } + HANDLE h = CreateFile(path.c_str(), FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, @@ -671,7 +677,7 @@ Path::setStatusInfoOnDisk(const FileStatus &si, std::string *ErrStr) const { DWORD err = GetLastError(); CloseHandle(h); SetLastError(err); - return MakeErrMsg(ErrStr, path + ": GetFileInformationByHandle: "); + return MakeErrMsg(ErrMsg, path + ": GetFileInformationByHandle: "); } FILETIME ft; @@ -681,7 +687,7 @@ Path::setStatusInfoOnDisk(const FileStatus &si, std::string *ErrStr) const { CloseHandle(h); if (!ret) { SetLastError(err); - return MakeErrMsg(path + ": SetFileTime: "); + return MakeErrMsg(ErrMsg, path + ": SetFileTime: "); } // Best we can do with Unix permission bits is to interpret the owner @@ -690,13 +696,13 @@ Path::setStatusInfoOnDisk(const FileStatus &si, std::string *ErrStr) const { if (bhfi.dwFileAttributes & FILE_ATTRIBUTE_READONLY) { if (!SetFileAttributes(path.c_str(), bhfi.dwFileAttributes & ~FILE_ATTRIBUTE_READONLY)) - return MakeErrMsg(ErrStr, path + ": SetFileAttributes: "); + return MakeErrMsg(ErrMsg, path + ": SetFileAttributes: "); } } else { if (!(bhfi.dwFileAttributes & FILE_ATTRIBUTE_READONLY)) { if (!SetFileAttributes(path.c_str(), bhfi.dwFileAttributes | FILE_ATTRIBUTE_READONLY)) - return MakeErrMsg(ErrStr, path + ": SetFileAttributes: "); + return MakeErrMsg(ErrMsg, path + ": SetFileAttributes: "); } } @@ -739,13 +745,13 @@ Path::makeUnique(bool reuse_current, std::string* ErrMsg) { bool Path::createTemporaryFileOnDisk(bool reuse_current, std::string* ErrMsg) { // Make this into a unique file name - makeUnique(reuse_current); + makeUnique(reuse_current, ErrMsg); // Now go and create it HANDLE h = CreateFile(path.c_str(), GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); if (h == INVALID_HANDLE_VALUE) - return MakeErrMsg(ErrMsg, path.toString() + ": can't create file"); + return MakeErrMsg(ErrMsg, path + ": can't create file"); CloseHandle(h); return false; diff --git a/lib/System/Win32/Program.inc b/lib/System/Win32/Program.inc index b45cad1..e1ad155 100644 --- a/lib/System/Win32/Program.inc +++ b/lib/System/Win32/Program.inc @@ -158,14 +158,14 @@ Program::ExecuteAndWait(const Path& path, MakeErrMsg(ErrMsg, "can't redirect stdin"); return -1; } - si.hStdOutput = RedirectIO(redirects[1], 1); + si.hStdOutput = RedirectIO(redirects[1], 1, ErrMsg); if (si.hStdOutput == INVALID_HANDLE_VALUE) { CloseHandle(si.hStdInput); MakeErrMsg(ErrMsg, "can't redirect stdout"); return -1; } if (redirects[1] && redirects[2] && *(redirects[1]) != *(redirects[2])) { - si.hStdError = RedirectIO(redirects[2], 2); + si.hStdError = RedirectIO(redirects[2], 2, ErrMsg); if (si.hStdError == INVALID_HANDLE_VALUE) { CloseHandle(si.hStdInput); CloseHandle(si.hStdOutput); diff --git a/lib/System/Win32/Win32.h b/lib/System/Win32/Win32.h index 0180bfa..74406ae 100644 --- a/lib/System/Win32/Win32.h +++ b/lib/System/Win32/Win32.h @@ -30,11 +30,7 @@ inline bool MakeErrMsg(std::string* ErrMsg, const std::string& prefix) { char *buffer = NULL; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, (LPSTR)&buffer, 1, NULL); - ErrMsg = prefix + buffer; + *ErrMsg = prefix + buffer; LocalFree(buffer); return true; } - -inline void MakeErrnoMsg(std::string* ErrMsg, const std::string & prefix) { - MakeErrorMsg(prefix + ": " + strerror(errno)); -} diff --git a/tools/gccld/gccld.cpp b/tools/gccld/gccld.cpp index c8ecde5..9401a8a 100644 --- a/tools/gccld/gccld.cpp +++ b/tools/gccld/gccld.cpp @@ -133,17 +133,22 @@ static int PrintAndReturn(const char *progname, const std::string &Message) { /// EmitShellScript - Output the wrapper file that invokes the JIT on the LLVM /// bytecode file for the program. static void EmitShellScript(char **argv) { -#if defined(_WIN32) || defined(__CYGWIN__) +#if defined(_WIN32) || defined(__CYGWIN__) // Windows doesn't support #!/bin/sh style shell scripts in .exe files. To // support windows systems, we copy the llvm-stub.exe executable from the // build tree to the destination file. - std::string llvmstub = FindExecutable("llvm-stub.exe", argv[0]).toString(); - if (llvmstub.empty()) { + std::string ErrMsg; + sys::Path llvmstub = FindExecutable("llvm-stub.exe", argv[0]); + if (llvmstub.isEmpty()) { std::cerr << "Could not find llvm-stub.exe executable!\n"; exit(1); } - sys::CopyFile(sys::Path(OutputFilename), sys::Path(llvmstub)); - return; + if (0 != sys::CopyFile(sys::Path(OutputFilename), llvmstub, &ErrMsg)) { + std::cerr << argv[0] << ": " << ErrMsg << "\n"; + exit(1); + } + + return; #endif // Output the script to start the program... diff --git a/tools/llvm-ld/llvm-ld.cpp b/tools/llvm-ld/llvm-ld.cpp index 6b9adaf..ab7109f 100644 --- a/tools/llvm-ld/llvm-ld.cpp +++ b/tools/llvm-ld/llvm-ld.cpp @@ -345,12 +345,18 @@ static void EmitShellScript(char **argv) { // Windows doesn't support #!/bin/sh style shell scripts in .exe files. To // support windows systems, we copy the llvm-stub.exe executable from the // build tree to the destination file. + std::string ErrMsg; sys::Path llvmstub = FindExecutable("llvm-stub.exe", argv[0]); if (llvmstub.isEmpty()) { std::cerr << "Could not find llvm-stub.exe executable!\n"; exit(1); } - sys::CopyFile(sys::Path(OutputFilename), llvmstub); + + if (0 != sys::CopyFile(sys::Path(OutputFilename), llvmstub, &ErrMsg)) { + std::cerr << argv[0] << ": " << ErrMsg << "\n"; + exit(1); + } + return; #endif |