[Lldb-commits] [lldb] 1f820fa - [lldb] Fix SourceManager::SourceFileCache insertion
Pavel Labath via lldb-commits
lldb-commits at lists.llvm.org
Mon Apr 20 07:29:58 PDT 2020
Author: Emre Kultursay
Date: 2020-04-20T16:25:54+02:00
New Revision: 1f820fa4feda34d25e62762392c50049e5282330
URL: https://github.com/llvm/llvm-project/commit/1f820fa4feda34d25e62762392c50049e5282330
DIFF: https://github.com/llvm/llvm-project/commit/1f820fa4feda34d25e62762392c50049e5282330.diff
LOG: [lldb] Fix SourceManager::SourceFileCache insertion
Summary:
Lookup and subsequent insert was done using uninitialized
FileSpec object, which caused the cache to be a no-op.
Bug: llvm.org/PR45310
Depends on D76804.
Reviewers: labath, JDevlieghere
Reviewed By: labath
Subscribers: mgorny, jingham, lldb-commits
Tags: #lldb
Differential Revision: https://reviews.llvm.org/D76805
Added:
lldb/unittests/Core/SourceManagerTest.cpp
Modified:
lldb/source/Core/SourceManager.cpp
lldb/unittests/Core/CMakeLists.txt
Removed:
################################################################################
diff --git a/lldb/source/Core/SourceManager.cpp b/lldb/source/Core/SourceManager.cpp
index 593459ba4509..4edc11c99bf1 100644
--- a/lldb/source/Core/SourceManager.cpp
+++ b/lldb/source/Core/SourceManager.cpp
@@ -696,7 +696,7 @@ bool SourceManager::File::GetLine(uint32_t line_no, std::string &buffer) {
}
void SourceManager::SourceFileCache::AddSourceFile(const FileSP &file_sp) {
- FileSpec file_spec;
+ FileSpec file_spec = file_sp->GetFileSpec();
FileCache::iterator pos = m_file_cache.find(file_spec);
if (pos == m_file_cache.end())
m_file_cache[file_spec] = file_sp;
diff --git a/lldb/unittests/Core/CMakeLists.txt b/lldb/unittests/Core/CMakeLists.txt
index 6393c6fe38c2..a2cc5a7f1f6d 100644
--- a/lldb/unittests/Core/CMakeLists.txt
+++ b/lldb/unittests/Core/CMakeLists.txt
@@ -2,6 +2,7 @@ add_lldb_unittest(LLDBCoreTests
CommunicationTest.cpp
MangledTest.cpp
RichManglingContextTest.cpp
+ SourceManagerTest.cpp
StreamCallbackTest.cpp
UniqueCStringMapTest.cpp
diff --git a/lldb/unittests/Core/SourceManagerTest.cpp b/lldb/unittests/Core/SourceManagerTest.cpp
new file mode 100644
index 000000000000..9dcd048ce3fb
--- /dev/null
+++ b/lldb/unittests/Core/SourceManagerTest.cpp
@@ -0,0 +1,48 @@
+//===-- SourceManagerTest.cpp ---------------------------------------------===//
+//
+// 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 "lldb/Core/SourceManager.h"
+#include "lldb/Host/FileSystem.h"
+#include "gtest/gtest.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+class SourceFileCache : public ::testing::Test {
+public:
+ void SetUp() override { FileSystem::Initialize(); }
+ void TearDown() override { FileSystem::Terminate(); }
+};
+
+TEST_F(SourceFileCache, FindSourceFileFound) {
+ SourceManager::SourceFileCache cache;
+
+ // Insert: foo
+ FileSpec foo_file_spec("foo");
+ auto foo_file_sp =
+ std::make_shared<SourceManager::File>(foo_file_spec, nullptr);
+ cache.AddSourceFile(foo_file_sp);
+
+ // Query: foo, expect found.
+ FileSpec another_foo_file_spec("foo");
+ ASSERT_EQ(cache.FindSourceFile(another_foo_file_spec), foo_file_sp);
+}
+
+TEST_F(SourceFileCache, FindSourceFileNotFound) {
+ SourceManager::SourceFileCache cache;
+
+ // Insert: foo
+ FileSpec foo_file_spec("foo");
+ auto foo_file_sp =
+ std::make_shared<SourceManager::File>(foo_file_spec, nullptr);
+ cache.AddSourceFile(foo_file_sp);
+
+ // Query: bar, expect not found.
+ FileSpec bar_file_spec("bar");
+ ASSERT_EQ(cache.FindSourceFile(bar_file_spec), nullptr);
+}
More information about the lldb-commits
mailing list