1c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan""" 2c617a4cb4a451be9d7e97d7af6e165d282b5390fSean CallananTests that C++ member and static variables are available where they should be. 3c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan""" 4431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Inghamimport lldb 5c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callananfrom lldbtest import * 6431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Inghamimport lldbutil 7c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan 8c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callananclass CPPThisTestCase(TestBase): 9c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan 10c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan mydir = os.path.join("lang", "cpp", "this") 11c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan 12c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin") 13adec24defd7f745bf6d931517666f12978381f85Johnny Chen #rdar://problem/9962849 14d538f13369b1662d67fb7ac55abbf94738547203Johnny Chen #@expectedFailureClang 1521b1984e161b0cadee331d32bfd721eccfdf4b1fJohnny Chen @dsym_test 16c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan def test_with_dsym_and_run_command(self): 17c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan """Test that the appropriate member variables are available when stopped in C++ static, inline, and const methods""" 18c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan self.buildDsym() 19c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan self.static_method_commands() 20c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan 21adec24defd7f745bf6d931517666f12978381f85Johnny Chen #rdar://problem/9962849 22f40b0928e7455c7158ea9aa82d7908cc3fe4d1afEd Maste @expectedFailureFreeBSD('llvm.org/pr16697') # Expression fails with 'there is no JIT compiled function' 23dbd73cf5eb16e733b28e823554e1dacdba1ebd0bDaniel Malea @expectedFailureGcc # llvm.org/pr15439 The 'this' pointer isn't available during expression evaluation when stopped in an inlined member function. 24d60b54fbccf3a9bc816cc7fa8fe8362a40d91f38Matt Kopec @expectedFailureIcc # ICC doesn't emit correct DWARF inline debug info for inlined member functions 2521b1984e161b0cadee331d32bfd721eccfdf4b1fJohnny Chen @dwarf_test 26c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan def test_with_dwarf_and_run_command(self): 27c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan """Test that the appropriate member variables are available when stopped in C++ static, inline, and const methods""" 28c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan self.buildDwarf() 29c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan self.static_method_commands() 30c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan 31c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan def setUp(self): 32c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan TestBase.setUp(self) 33c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan 34c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan def set_breakpoint(self, line): 35431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Ingham lldbutil.run_break_set_by_file_and_line (self, "main.cpp", line, num_expected_locations=1, loc_exact=False) 36431d839a33e9a274e705f7a268a1c9de2ffc2da2Jim Ingham 37c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan def static_method_commands(self): 38c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan """Test that the appropriate member variables are available when stopped in C++ static, inline, and const methods""" 39c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) 40c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan 41c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan self.set_breakpoint(line_number('main.cpp', '// breakpoint 1')) 42c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan self.set_breakpoint(line_number('main.cpp', '// breakpoint 2')) 43c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan self.set_breakpoint(line_number('main.cpp', '// breakpoint 3')) 44c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan self.set_breakpoint(line_number('main.cpp', '// breakpoint 4')) 45c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan 46c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan self.runCmd("process launch", RUN_SUCCEEDED) 47c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan 48c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan self.expect("expression -- m_a = 2", 49c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan startstr = "(int) $0 = 2") 50c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan 51c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan self.runCmd("process continue") 52c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan 53c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan # This would be disallowed if we enforced const. But we don't. 54c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan self.expect("expression -- m_a = 2", 55c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan startstr = "(int) $1 = 2") 56c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan 5739d1af981f6a76603356fd84b2e9372a9172297cSean Callanan self.expect("expression -- (int)getpid(); m_a", 58c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan startstr = "(int) $2 = 2") 59c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan 60c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan self.runCmd("process continue") 61c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan 62c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan self.expect("expression -- s_a", 63c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan startstr = "(int) $3 = 5") 64c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan 65c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan self.runCmd("process continue") 66c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan 67c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan self.expect("expression -- m_a", 68c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan startstr = "(int) $4 = 2") 69c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan 70c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callananif __name__ == '__main__': 71c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan import atexit 72c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan lldb.SBDebugger.Initialize() 73c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan atexit.register(lambda: lldb.SBDebugger.Terminate()) 74c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan unittest2.main() 75