From: Anton Korobeynikov Date: Fri, 1 Sep 2006 20:35:17 +0000 (+0000) Subject: - Fixed broken Win32 build X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=7d5154490357a0cb12383e15a57640d9c20644a1;p=oota-llvm.git - 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 --- diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp index 7b42fee9154..60c8e4f9db8 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 711dc89f4c2..fcf79b478b7 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 d5bedfcfed8..877ff52be56 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 96a59ded6fa..048bf602975 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& 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 b45cad1bb45..e1ad155bb34 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 0180bfabcf0..74406aec540 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 c8ecde54915..9401a8acbfc 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 6b9adaff5a4..ab7109fb855 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