Daniel Malea | 9e84eb4 | 2013-03-01 18:25:42 +0000 | [diff] [blame] | 1 | """ |
| 2 | Tests that C++ member and static variables have correct layout and scope. |
| 3 | """ |
Zachary Turner | 77db4a8 | 2015-10-22 20:06:20 +0000 | [diff] [blame] | 4 | |
Zachary Turner | 35d017f | 2015-10-23 17:04:29 +0000 | [diff] [blame] | 5 | from __future__ import print_function |
| 6 | |
Zachary Turner | 0a0490b | 2015-10-27 20:12:05 +0000 | [diff] [blame^] | 7 | import use_lldb_suite |
Zachary Turner | 77db4a8 | 2015-10-22 20:06:20 +0000 | [diff] [blame] | 8 | |
| 9 | import unittest2 |
Daniel Malea | 9e84eb4 | 2013-03-01 18:25:42 +0000 | [diff] [blame] | 10 | import lldb |
| 11 | from lldbtest import * |
| 12 | import lldbutil |
| 13 | |
| 14 | class CPPStaticMembersTestCase(TestBase): |
| 15 | |
Greg Clayton | 4570d3e | 2013-12-10 23:19:29 +0000 | [diff] [blame] | 16 | mydir = TestBase.compute_mydir(__file__) |
Daniel Malea | 9e84eb4 | 2013-03-01 18:25:42 +0000 | [diff] [blame] | 17 | |
Daniel Malea | 9e84eb4 | 2013-03-01 18:25:42 +0000 | [diff] [blame] | 18 | @unittest2.expectedFailure # llvm.org/pr15401 |
Zachary Turner | 1844284 | 2015-08-20 22:09:35 +0000 | [diff] [blame] | 19 | @expectedFailureWindows("llvm.org/pr21765") |
Tamas Berghammer | c8fd130 | 2015-09-30 10:12:40 +0000 | [diff] [blame] | 20 | def test_with_run_command(self): |
Daniel Malea | 9e84eb4 | 2013-03-01 18:25:42 +0000 | [diff] [blame] | 21 | """Test that member variables have the correct layout, scope and qualifiers when stopped inside and outside C++ methods""" |
Tamas Berghammer | c8fd130 | 2015-09-30 10:12:40 +0000 | [diff] [blame] | 22 | self.build() |
Daniel Malea | 9e84eb4 | 2013-03-01 18:25:42 +0000 | [diff] [blame] | 23 | self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) |
| 24 | |
| 25 | self.set_breakpoint(line_number('main.cpp', '// breakpoint 1')) |
| 26 | self.set_breakpoint(line_number('main.cpp', '// breakpoint 2')) |
| 27 | |
Sean Callanan | 05834cd | 2015-07-01 23:56:30 +0000 | [diff] [blame] | 28 | self.runCmd("process launch", RUN_SUCCEEDED) |
Daniel Malea | 9e84eb4 | 2013-03-01 18:25:42 +0000 | [diff] [blame] | 29 | self.expect("expression my_a.access()", |
| 30 | startstr = "(long) $0 = 10") |
| 31 | |
| 32 | self.expect("expression my_a.m_a", |
| 33 | startstr = "(short) $1 = 1") |
| 34 | |
| 35 | # Note: SymbolFileDWARF::ParseChildMembers doesn't call AddFieldToRecordType, consistent with clang's AST layout. |
| 36 | self.expect("expression my_a.s_d", |
| 37 | startstr = "(int) $2 = 4") |
| 38 | |
| 39 | self.expect("expression my_a.s_b", |
| 40 | startstr = "(long) $3 = 2") |
| 41 | |
| 42 | self.expect("expression A::s_b", |
| 43 | startstr = "(long) $4 = 2") |
| 44 | |
| 45 | # should not be available in global scope |
| 46 | self.expect("expression s_d", |
| 47 | startstr = "error: use of undeclared identifier 's_d'") |
| 48 | |
| 49 | self.runCmd("process continue") |
| 50 | self.expect("expression m_c", |
| 51 | startstr = "(char) $5 = \'\\x03\'") |
| 52 | |
| 53 | self.expect("expression s_b", |
| 54 | startstr = "(long) $6 = 2") |
| 55 | |
| 56 | self.runCmd("process continue") |
Tamas Berghammer | c8fd130 | 2015-09-30 10:12:40 +0000 | [diff] [blame] | 57 | |
| 58 | def set_breakpoint(self, line): |
| 59 | lldbutil.run_break_set_by_file_and_line (self, "main.cpp", line, num_expected_locations=1, loc_exact=False) |