diff --git a/llvm/include/llvm/Support/FileSystem.h b/llvm/include/llvm/Support/FileSystem.h --- a/llvm/include/llvm/Support/FileSystem.h +++ b/llvm/include/llvm/Support/FileSystem.h @@ -43,7 +43,6 @@ #include #include #include -#include #include #ifdef HAVE_SYS_STAT_H diff --git a/llvm/include/llvm/Support/FileSystem/UniqueID.h b/llvm/include/llvm/Support/FileSystem/UniqueID.h --- a/llvm/include/llvm/Support/FileSystem/UniqueID.h +++ b/llvm/include/llvm/Support/FileSystem/UniqueID.h @@ -15,7 +15,6 @@ #define LLVM_SUPPORT_FILESYSTEM_UNIQUEID_H #include -#include namespace llvm { namespace sys { @@ -34,7 +33,12 @@ } bool operator!=(const UniqueID &Other) const { return !(*this == Other); } bool operator<(const UniqueID &Other) const { - return std::tie(Device, File) < std::tie(Other.Device, Other.File); + /// Don't use std::tie since it bloats the compile time of this header. + if (Device < Other.Device) + return true; + if (Other.Device < Device) + return false; + return File < Other.File; } uint64_t getDevice() const { return Device; } diff --git a/llvm/unittests/Support/CMakeLists.txt b/llvm/unittests/Support/CMakeLists.txt --- a/llvm/unittests/Support/CMakeLists.txt +++ b/llvm/unittests/Support/CMakeLists.txt @@ -37,6 +37,7 @@ FileOutputBufferTest.cpp FileUtilitiesTest.cpp FormatVariadicTest.cpp + FSUniqueIDTest.cpp GlobPatternTest.cpp Host.cpp IndexedAccessorTest.cpp diff --git a/llvm/unittests/Support/FSUniqueIDTest.cpp b/llvm/unittests/Support/FSUniqueIDTest.cpp new file mode 100644 --- /dev/null +++ b/llvm/unittests/Support/FSUniqueIDTest.cpp @@ -0,0 +1,38 @@ +//===- llvm/unittest/Support/FSUniqueIDTest.cpp - Test sys::fs::UniqueID --===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "llvm/Support/FileSystem/UniqueID.h" +#include "gtest/gtest.h" + +using namespace llvm; +using namespace llvm::sys::fs; + +namespace { + +TEST(FSUniqueIDTest, construct) { + EXPECT_EQ(20u, UniqueID(20, 10).getDevice()); + EXPECT_EQ(10u, UniqueID(20, 10).getFile()); +} + +TEST(FSUniqueIDTest, equals) { + EXPECT_TRUE(UniqueID(20, 10) == UniqueID(20, 10)); + EXPECT_FALSE(UniqueID(20, 20) == UniqueID(20, 10)); + EXPECT_FALSE(UniqueID(10, 10) == UniqueID(20, 10)); +} + +TEST(FSUniqueIDTest, less) { + EXPECT_FALSE(UniqueID(20, 2) < UniqueID(20, 2)); + EXPECT_FALSE(UniqueID(20, 3) < UniqueID(20, 2)); + EXPECT_FALSE(UniqueID(30, 2) < UniqueID(20, 2)); + EXPECT_FALSE(UniqueID(30, 2) < UniqueID(20, 40)); + EXPECT_TRUE(UniqueID(20, 2) < UniqueID(20, 3)); + EXPECT_TRUE(UniqueID(20, 2) < UniqueID(30, 2)); + EXPECT_TRUE(UniqueID(20, 40) < UniqueID(30, 2)); +} + +} // anonymous namespace