summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/packages/Python/lldbsuite')
-rw-r--r--lldb/packages/Python/lldbsuite/test/lang/objc/modules-hash-mismatch/Makefile16
-rw-r--r--lldb/packages/Python/lldbsuite/test/lang/objc/modules-hash-mismatch/TestClangModulesHashMismatch.py49
-rw-r--r--lldb/packages/Python/lldbsuite/test/lang/objc/modules-hash-mismatch/main.m6
-rw-r--r--lldb/packages/Python/lldbsuite/test/lang/objc/modules-hash-mismatch/other.m4
-rw-r--r--lldb/packages/Python/lldbsuite/test/make/Makefile.rules9
5 files changed, 83 insertions, 1 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/lang/objc/modules-hash-mismatch/Makefile b/lldb/packages/Python/lldbsuite/test/lang/objc/modules-hash-mismatch/Makefile
new file mode 100644
index 00000000000..59bf009f686
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/lang/objc/modules-hash-mismatch/Makefile
@@ -0,0 +1,16 @@
+OBJC_SOURCES := main.m
+CFLAGS_EXTRAS = -I$(BUILDDIR)
+USE_PRIVATE_MODULE_CACHE = YES
+
+.PHONY: update-module
+
+all: $(EXE)
+ $(MAKE) -f $(SRCDIR)/Makefile update-module
+
+include Makefile.rules
+
+update-module:
+ echo "forcing an update of f.pcm"
+ echo "typedef int something_other;" > $(BUILDDIR)/f.h
+ $(CC) $(CFLAGS) $(MANDATORY_MODULE_BUILD_CFLAGS) \
+ -c $(SRCDIR)/other.m -o $(BUILDDIR)/other.o
diff --git a/lldb/packages/Python/lldbsuite/test/lang/objc/modules-hash-mismatch/TestClangModulesHashMismatch.py b/lldb/packages/Python/lldbsuite/test/lang/objc/modules-hash-mismatch/TestClangModulesHashMismatch.py
new file mode 100644
index 00000000000..298e26ee400
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/lang/objc/modules-hash-mismatch/TestClangModulesHashMismatch.py
@@ -0,0 +1,49 @@
+from __future__ import print_function
+
+import unittest2
+import os
+import shutil
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class TestClangModuleHashMismatch(TestBase):
+ mydir = TestBase.compute_mydir(__file__)
+
+ def setUp(self):
+ TestBase.setUp(self)
+
+ @skipUnlessDarwin
+ @skipIf(debug_info=no_match(["gmodules"]))
+ def test_expr(self):
+ with open(self.getBuildArtifact("module.modulemap"), "w") as f:
+ f.write("""
+ module Foo { header "f.h" }
+ """)
+ with open(self.getBuildArtifact("f.h"), "w") as f:
+ f.write("""
+ typedef int my_int;
+ void f() {}
+ """)
+
+ mod_cache = self.getBuildArtifact("private-module-cache")
+ if os.path.isdir(mod_cache):
+ shutil.rmtree(mod_cache)
+ self.build()
+ self.assertTrue(os.path.isdir(mod_cache), "module cache exists")
+
+ logfile = self.getBuildArtifact("host.log")
+ self.runCmd("log enable -v -f %s lldb host" % logfile)
+ target, _, _, _ = lldbutil.run_to_source_breakpoint(
+ self, "break here", lldb.SBFileSpec("main.m"))
+ target.GetModuleAtIndex(0).FindTypes('my_int')
+
+ found = False
+ with open(logfile, 'r') as f:
+ for line in f:
+ if "hash mismatch" in line and "Foo" in line:
+ found = True
+ self.assertTrue(found)
diff --git a/lldb/packages/Python/lldbsuite/test/lang/objc/modules-hash-mismatch/main.m b/lldb/packages/Python/lldbsuite/test/lang/objc/modules-hash-mismatch/main.m
new file mode 100644
index 00000000000..5065222731e
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/lang/objc/modules-hash-mismatch/main.m
@@ -0,0 +1,6 @@
+#include "f.h"
+int main(int argc, char **argv) {
+ my_int i = argc;
+ f(); // break here
+ return 0;
+}
diff --git a/lldb/packages/Python/lldbsuite/test/lang/objc/modules-hash-mismatch/other.m b/lldb/packages/Python/lldbsuite/test/lang/objc/modules-hash-mismatch/other.m
new file mode 100644
index 00000000000..0afd3eb078d
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/lang/objc/modules-hash-mismatch/other.m
@@ -0,0 +1,4 @@
+#include "f.h"
+something_other f() {
+ return 0;
+}
diff --git a/lldb/packages/Python/lldbsuite/test/make/Makefile.rules b/lldb/packages/Python/lldbsuite/test/make/Makefile.rules
index bde94d2c462..f25d062ca43 100644
--- a/lldb/packages/Python/lldbsuite/test/make/Makefile.rules
+++ b/lldb/packages/Python/lldbsuite/test/make/Makefile.rules
@@ -25,6 +25,7 @@
# LD_EXTRAS :=
# SPLIT_DEBUG_SYMBOLS := YES
# CROSS_COMPILE :=
+# USE_PRIVATE_MODULE_CACHE := YES
#
# And test/functionalities/archives/Makefile:
# MAKE_DSYM := NO
@@ -306,7 +307,13 @@ ifeq "$(MAKE_DWO)" "YES"
CFLAGS += -gsplit-dwarf
endif
-MODULE_BASE_FLAGS := -fmodules -gmodules -fmodules-cache-path=$(CLANG_MODULE_CACHE_DIR)
+ifeq "$(USE_PRIVATE_MODULE_CACHE)" "YES"
+THE_CLANG_MODULE_CACHE_DIR := $(BUILDDIR)/private-module-cache
+else
+THE_CLANG_MODULE_CACHE_DIR := $(CLANG_MODULE_CACHE_DIR)
+endif
+
+MODULE_BASE_FLAGS := -fmodules -gmodules -fmodules-cache-path=$(THE_CLANG_MODULE_CACHE_DIR)
MANDATORY_MODULE_BUILD_CFLAGS := $(MODULE_BASE_FLAGS) -gmodules
# Build flags for building with C++ modules.
# -glldb is necessary for emitting information about what modules were imported.
OpenPOWER on IntegriCloud