From 74f293249d9e60e3631fc8b08148ef3d8a4df72d Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Sat, 13 Jun 2015 17:23:04 +0000 Subject: [PATCH] Don't use std::errc. As noted on Errc.h: // * std::errc is just marked with is_error_condition_enum. This means that // common patters like AnErrorCode == errc::no_such_file_or_directory take // 4 virtual calls instead of two comparisons. And on some libstdc++ those virtual functions conclude that ------------------------ int main() { std::error_code foo = std::make_error_code(std::errc::no_such_file_or_directory); return foo == std::errc::no_such_file_or_directory; } ------------------------- should exit with 0. llvm-svn: 239683 --- llvm/lib/Object/ArchiveWriter.cpp | 3 ++- llvm/lib/ProfileData/CoverageMapping.cpp | 5 +++-- llvm/lib/Support/Unix/Program.inc | 5 +++-- llvm/lib/Support/Windows/Program.inc | 3 ++- llvm/unittests/Support/ErrorOrTest.cpp | 4 ++-- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/llvm/lib/Object/ArchiveWriter.cpp b/llvm/lib/Object/ArchiveWriter.cpp index 90a736f..dcd6ad7 100644 --- a/llvm/lib/Object/ArchiveWriter.cpp +++ b/llvm/lib/Object/ArchiveWriter.cpp @@ -18,6 +18,7 @@ #include "llvm/Object/Archive.h" #include "llvm/Object/ObjectFile.h" #include "llvm/Object/SymbolicFile.h" +#include "llvm/Support/Errc.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/Format.h" #include "llvm/Support/Path.h" @@ -70,7 +71,7 @@ NewArchiveIterator::getFD(sys::fs::file_status &NewStatus) const { // Linux cannot open directories with open(2), although // cygwin and *bsd can. if (NewStatus.type() == sys::fs::file_type::directory_file) - return make_error_code(std::errc::is_a_directory); + return make_error_code(errc::is_a_directory); return NewFD; } diff --git a/llvm/lib/ProfileData/CoverageMapping.cpp b/llvm/lib/ProfileData/CoverageMapping.cpp index bbac5c26..0804bd0 100644 --- a/llvm/lib/ProfileData/CoverageMapping.cpp +++ b/llvm/lib/ProfileData/CoverageMapping.cpp @@ -19,6 +19,7 @@ #include "llvm/ProfileData/CoverageMappingReader.h" #include "llvm/ProfileData/InstrProfReader.h" #include "llvm/Support/Debug.h" +#include "llvm/Support/Errc.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/Path.h" @@ -154,11 +155,11 @@ ErrorOr CounterMappingContext::evaluate(const Counter &C) const { return 0; case Counter::CounterValueReference: if (C.getCounterID() >= CounterValues.size()) - return std::make_error_code(std::errc::argument_out_of_domain); + return make_error_code(errc::argument_out_of_domain); return CounterValues[C.getCounterID()]; case Counter::Expression: { if (C.getExpressionID() >= Expressions.size()) - return std::make_error_code(std::errc::argument_out_of_domain); + return make_error_code(errc::argument_out_of_domain); const auto &E = Expressions[C.getExpressionID()]; ErrorOr LHS = evaluate(E.LHS); if (!LHS) diff --git a/llvm/lib/Support/Unix/Program.inc b/llvm/lib/Support/Unix/Program.inc index 5816fb8..8947b62 100644 --- a/llvm/lib/Support/Unix/Program.inc +++ b/llvm/lib/Support/Unix/Program.inc @@ -20,6 +20,7 @@ #include "llvm/ADT/StringExtras.h" #include "llvm/Config/config.h" #include "llvm/Support/Compiler.h" +#include "llvm/Support/Errc.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/Path.h" #include "llvm/Support/raw_ostream.h" @@ -92,7 +93,7 @@ ErrorOr sys::findProgramByName(StringRef Name, if (sys::fs::can_execute(FilePath.c_str())) return std::string(FilePath.str()); // Found the executable! } - return std::errc::no_such_file_or_directory; + return errc::no_such_file_or_directory; } static bool RedirectIO(const StringRef *Path, int FD, std::string* ErrMsg) { @@ -447,7 +448,7 @@ llvm::sys::writeFileWithEncoding(StringRef FileName, StringRef Contents, OS << Contents; if (OS.has_error()) - return std::make_error_code(std::errc::io_error); + return make_error_code(errc::io_error); return EC; } diff --git a/llvm/lib/Support/Windows/Program.inc b/llvm/lib/Support/Windows/Program.inc index 75685de..c29d872 100644 --- a/llvm/lib/Support/Windows/Program.inc +++ b/llvm/lib/Support/Windows/Program.inc @@ -14,6 +14,7 @@ #include "WindowsSupport.h" #include "llvm/ADT/StringExtras.h" #include "llvm/Support/ConvertUTF.h" +#include "llvm/Support/Errc.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/WindowsError.h" #include "llvm/Support/raw_ostream.h" @@ -514,7 +515,7 @@ llvm::sys::writeFileWithEncoding(StringRef FileName, StringRef Contents, } if (OS.has_error()) - return std::make_error_code(std::errc::io_error); + return make_error_code(errc::io_error); return EC; } diff --git a/llvm/unittests/Support/ErrorOrTest.cpp b/llvm/unittests/Support/ErrorOrTest.cpp index 5e8d442..73d0e3f 100644 --- a/llvm/unittests/Support/ErrorOrTest.cpp +++ b/llvm/unittests/Support/ErrorOrTest.cpp @@ -67,8 +67,8 @@ TEST(ErrorOr, Covariant) { } TEST(ErrorOr, Comparison) { - ErrorOr x(std::errc::no_such_file_or_directory); - EXPECT_EQ(x, std::errc::no_such_file_or_directory); + ErrorOr x(errc::no_such_file_or_directory); + EXPECT_EQ(x, errc::no_such_file_or_directory); } // ErrorOr x(nullptr); -- 2.7.4