xref: /llvm-project/lldb/test/API/lang/objc/modules-hash-mismatch/TestClangModulesHashMismatch.py (revision 2238dcc39358353cac21df75c3c3286ab20b8f53)
1import os
2import shutil
3
4import lldb
5from lldbsuite.test.decorators import *
6from lldbsuite.test.lldbtest import *
7from lldbsuite.test import lldbutil
8
9
10class TestClangModuleHashMismatch(TestBase):
11    @add_test_categories(["gmodules"])
12    def test_expr(self):
13        with open(self.getBuildArtifact("module.modulemap"), "w") as f:
14            f.write(
15                """
16                    module Foo { header "f.h" }
17                    """
18            )
19        with open(self.getBuildArtifact("f.h"), "w") as f:
20            f.write(
21                """
22                    typedef int my_int;
23                    void f() {}
24                    """
25            )
26
27        mod_cache = self.getBuildArtifact("private-module-cache")
28        if os.path.isdir(mod_cache):
29            shutil.rmtree(mod_cache)
30        self.build()
31        self.assertTrue(os.path.isdir(mod_cache), "module cache exists")
32
33        logfile = self.getBuildArtifact("host.log")
34        with open(logfile, "w") as f:
35            sbf = lldb.SBFile(f.fileno(), "w", False)
36            status = self.dbg.SetErrorFile(sbf)
37            self.assertSuccess(status)
38
39            target, _, _, _ = lldbutil.run_to_source_breakpoint(
40                self, "break here", lldb.SBFileSpec("main.m")
41            )
42            target.GetModuleAtIndex(0).FindTypes("my_int")
43
44        with open(logfile, "r") as f:
45            for line in f:
46                if "hash mismatch" in line and "Foo" in line:
47                    found = True
48        self.assertTrue(found)
49