Files
clang-p2996/lldb/test/API/lang/cpp/global_variables/TestCPPGlobalVariables.py
Muhammad Omair Javaid 6ea1a0d4fc [LLDB] Add/Remove xfail for some API tests on Windows
This patch add or removes XFAIL decorator from various tests which were marked
xfail for windows.

since 44363f2 various tests have started passing but introduced a couple of new failures.
Weight is in favor of new XPasses and I have removed XFail decorator from them. Also
some new tests have started failing for which we need to file separate bugs. I have
marked them xfail for now and will add the bug id after investigating the issue.

Differential Revision: https://reviews.llvm.org/D149235
2023-05-03 04:45:55 +05:00

61 lines
2.8 KiB
Python

"""Test that C++ global variables can be inspected by name and also their mangled name."""
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
class GlobalVariablesCppTestCase(TestBase):
def setUp(self):
TestBase.setUp(self)
self.source = lldb.SBFileSpec('main.cpp')
def test(self):
self.build()
(target, _, _, _) = lldbutil.run_to_source_breakpoint(self, "// Set break point at this line.", self.source)
# Check that we can access g_file_global_int by its name
self.expect("target variable g_file_global_int", VARIABLES_DISPLAYED_CORRECTLY,
substrs=['42'])
self.expect("target variable abc::g_file_global_int", VARIABLES_DISPLAYED_CORRECTLY,
substrs=['42'])
self.expect("target variable xyz::g_file_global_int", VARIABLES_DISPLAYED_CORRECTLY,
error=True, substrs=['can\'t find global variable'])
# Check that we can access g_file_global_const_int by its name
self.expect("target variable g_file_global_const_int", VARIABLES_DISPLAYED_CORRECTLY,
substrs=['1337'])
self.expect("target variable abc::g_file_global_const_int", VARIABLES_DISPLAYED_CORRECTLY,
substrs=['1337'])
self.expect("target variable xyz::g_file_global_const_int", VARIABLES_DISPLAYED_CORRECTLY,
error=True, substrs=['can\'t find global variable'])
# Try accessing a global variable in anonymous namespace.
self.expect("target variable g_anon_namespace_const_int", VARIABLES_DISPLAYED_CORRECTLY,
substrs=['100'])
self.expect("target variable abc::g_anon_namespace_const_int", VARIABLES_DISPLAYED_CORRECTLY,
error=True, substrs=['can\'t find global variable'])
var = target.FindFirstGlobalVariable("abc::(anonymous namespace)::g_anon_namespace_const_int")
self.assertTrue(var.IsValid())
self.assertEqual(var.GetName(), "abc::(anonymous namespace)::g_anon_namespace_const_int")
self.assertEqual(var.GetValue(), "100")
def test_access_by_mangled_name(self):
self.build()
(target, _, _, _) = lldbutil.run_to_source_breakpoint(self, "// Set break point at this line.", self.source)
# Check that we can access g_file_global_int by its mangled name
addr = target.EvaluateExpression("&abc::g_file_global_int").GetValueAsUnsigned()
self.assertNotEqual(addr, 0)
mangled = lldb.SBAddress(addr, target).GetSymbol().GetMangledName()
self.assertNotEqual(mangled, None)
gv = target.FindFirstGlobalVariable(mangled)
self.assertTrue(gv.IsValid())
self.assertEqual(gv.GetName(), "abc::g_file_global_int")
self.assertEqual(gv.GetValueAsUnsigned(), 42)