mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-27 07:19:03 -04:00

Summary: This test was failing in various configurations on linux in a fairly unpredictible way. The success depended on whether the c++ abi library was linked in statically or not and how well was the linker able to strip parts of it. This introduces additional code to the "dummmy" test executable, which ensures that all parts of the library needed to evaluate the expressions are always present. Reviewers: clayborg Subscribers: srhines, tatyana-krasnukha, davide, lldb-commits Differential Revision: https://reviews.llvm.org/D39727 llvm-svn: 317678
96 lines
2.7 KiB
Python
96 lines
2.7 KiB
Python
"""
|
|
Test top-level expressions.
|
|
"""
|
|
|
|
from __future__ import print_function
|
|
|
|
|
|
import unittest2
|
|
|
|
import os
|
|
import time
|
|
import lldb
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test import lldbutil
|
|
|
|
|
|
class TopLevelExpressionsTestCase(TestBase):
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
|
|
def setUp(self):
|
|
# Call super's setUp().
|
|
TestBase.setUp(self)
|
|
# Find the line number to break for main.c.
|
|
self.line = line_number('main.cpp',
|
|
'// Set breakpoint here')
|
|
self.dummy_line = line_number('dummy.cpp',
|
|
'// Set breakpoint here')
|
|
|
|
# Disable confirmation prompt to avoid infinite wait
|
|
self.runCmd("settings set auto-confirm true")
|
|
self.addTearDownHook(
|
|
lambda: self.runCmd("settings clear auto-confirm"))
|
|
|
|
def build_and_run(self):
|
|
"""Test top-level expressions."""
|
|
self.build()
|
|
|
|
self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)
|
|
|
|
lldbutil.run_break_set_by_file_and_line(
|
|
self, "main.cpp", self.line, num_expected_locations=1, loc_exact=False)
|
|
|
|
self.runCmd("run", RUN_SUCCEEDED)
|
|
|
|
def run_dummy(self):
|
|
self.runCmd("file dummy", CURRENT_EXECUTABLE_SET)
|
|
|
|
lldbutil.run_break_set_by_file_and_line(
|
|
self,
|
|
"dummy.cpp",
|
|
self.dummy_line,
|
|
num_expected_locations=1,
|
|
loc_exact=False)
|
|
|
|
self.runCmd("run", RUN_SUCCEEDED)
|
|
|
|
@add_test_categories(['pyapi'])
|
|
@skipIf(debug_info="gmodules") # not relevant
|
|
@skipIf(oslist=["windows"]) # Error in record layout on Windows
|
|
def test_top_level_expressions(self):
|
|
self.build_and_run()
|
|
|
|
resultFromCode = self.frame().EvaluateExpression("doTest()").GetValueAsUnsigned()
|
|
|
|
self.runCmd("kill")
|
|
|
|
self.run_dummy()
|
|
|
|
codeFile = open('test.cpp', 'r')
|
|
|
|
expressions = []
|
|
current_expression = ""
|
|
|
|
for line in codeFile:
|
|
if line.startswith("// --"):
|
|
expressions.append(current_expression)
|
|
current_expression = ""
|
|
else:
|
|
current_expression += line
|
|
|
|
options = lldb.SBExpressionOptions()
|
|
options.SetLanguage(lldb.eLanguageTypeC_plus_plus)
|
|
options.SetTopLevel(True)
|
|
|
|
for expression in expressions:
|
|
self.frame().EvaluateExpression(expression, options)
|
|
|
|
resultFromTopLevel = self.frame().EvaluateExpression("doTest()")
|
|
|
|
self.assertTrue(resultFromTopLevel.IsValid())
|
|
self.assertEqual(
|
|
resultFromCode,
|
|
resultFromTopLevel.GetValueAsUnsigned())
|