diff options
author | Raphael Isemann <teemperor@gmail.com> | 2019-10-21 16:07:45 +0000 |
---|---|---|
committer | Raphael Isemann <teemperor@gmail.com> | 2019-10-21 16:07:45 +0000 |
commit | cdcd5cbf775b5966347b0b1602c933d5faa1a295 (patch) | |
tree | 2fab35b7cd8d6507ec1a3ce8f4d8c279af091a2e | |
parent | 423ac9a3c2c5b7c7eba81d7527bab4d68b71b737 (diff) |
[lldb] Add test for executing static initializers in expression command
git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@375422 91177308-0d34-0410-b5e6-96231b3b80d8
3 files changed, 45 insertions, 0 deletions
diff --git a/packages/Python/lldbsuite/test/commands/expression/static-initializers/Makefile b/packages/Python/lldbsuite/test/commands/expression/static-initializers/Makefile new file mode 100644 index 000000000..99998b20b --- /dev/null +++ b/packages/Python/lldbsuite/test/commands/expression/static-initializers/Makefile @@ -0,0 +1,3 @@ +CXX_SOURCES := main.cpp + +include Makefile.rules diff --git a/packages/Python/lldbsuite/test/commands/expression/static-initializers/TestStaticInitializers.py b/packages/Python/lldbsuite/test/commands/expression/static-initializers/TestStaticInitializers.py new file mode 100644 index 000000000..e350e6ef9 --- /dev/null +++ b/packages/Python/lldbsuite/test/commands/expression/static-initializers/TestStaticInitializers.py @@ -0,0 +1,31 @@ +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + +class StaticInitializers(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + def test(self): + """ Test a static initializer. """ + self.build() + + lldbutil.run_to_source_breakpoint(self, '// break here', + lldb.SBFileSpec("main.cpp", False)) + + # We use counter to observe if the initializer was called. + self.expect("expr counter", substrs=["(int) $", " = 0"]) + self.expect("expr -p -- struct Foo { Foo() { inc_counter(); } }; Foo f;") + self.expect("expr counter", substrs=["(int) $", " = 1"]) + + def test_failing_init(self): + """ Test a static initializer that fails to execute. """ + self.build() + + lldbutil.run_to_source_breakpoint(self, '// break here', + lldb.SBFileSpec("main.cpp", False)) + + # FIXME: This error message is not even remotely helpful. + self.expect("expr -p -- struct Foo2 { Foo2() { do_abort(); } }; Foo2 f;", error=True, + substrs=["error: couldn't run static initializers: couldn't run static initializer:"]) diff --git a/packages/Python/lldbsuite/test/commands/expression/static-initializers/main.cpp b/packages/Python/lldbsuite/test/commands/expression/static-initializers/main.cpp new file mode 100644 index 000000000..0bcf1eb3e --- /dev/null +++ b/packages/Python/lldbsuite/test/commands/expression/static-initializers/main.cpp @@ -0,0 +1,11 @@ +#include <cstdlib> + +int counter = 0; + +void inc_counter() { ++counter; } + +void do_abort() { abort(); } + +int main() { + return 0; // break here +} |