diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 | 
| commit | 9e6d35490a6542f9c97607f93c2ef8ca8e03cbcc (patch) | |
| tree | dd2a1ddf0476664c2b823409c36cbccd52662ca7 /packages/Python/lldbsuite/test/expression_command/radar_8638051 | |
| parent | 3bd2e91faeb9eeec1aae82c64a3253afff551cfd (diff) | |
Notes
Diffstat (limited to 'packages/Python/lldbsuite/test/expression_command/radar_8638051')
3 files changed, 98 insertions, 0 deletions
| diff --git a/packages/Python/lldbsuite/test/expression_command/radar_8638051/Makefile b/packages/Python/lldbsuite/test/expression_command/radar_8638051/Makefile new file mode 100644 index 000000000000..0d70f2595019 --- /dev/null +++ b/packages/Python/lldbsuite/test/expression_command/radar_8638051/Makefile @@ -0,0 +1,5 @@ +LEVEL = ../../make + +C_SOURCES := main.c + +include $(LEVEL)/Makefile.rules diff --git a/packages/Python/lldbsuite/test/expression_command/radar_8638051/Test8638051.py b/packages/Python/lldbsuite/test/expression_command/radar_8638051/Test8638051.py new file mode 100644 index 000000000000..302b14b7360e --- /dev/null +++ b/packages/Python/lldbsuite/test/expression_command/radar_8638051/Test8638051.py @@ -0,0 +1,39 @@ +""" +Test the robustness of lldb expression parser. +""" + +from __future__ import print_function + + + +import os, time +import lldb +from lldbsuite.test.lldbtest import * + +class Radar8638051TestCase(TestBase): + +    mydir = TestBase.compute_mydir(__file__) + +    def test_expr_commands(self): +        """The following expression commands should not crash.""" +        self.build() + +        self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) + +        self.runCmd("breakpoint set -n c") + +        self.runCmd("run", RUN_SUCCEEDED) + +        self.expect("expression val", +            startstr = "(int) $0 = 1") +        # (int) $0 = 1 + +        self.expect("expression *(&val)", +            startstr = "(int) $1 = 1") +        # (int) $1 = 1 + +        # rdar://problem/8638051 +        # lldb expression command: Could this crash be avoided +        self.expect("expression &val", +            startstr = "(int *) $2 = ") +        # (int *) $2 = 0x.... diff --git a/packages/Python/lldbsuite/test/expression_command/radar_8638051/main.c b/packages/Python/lldbsuite/test/expression_command/radar_8638051/main.c new file mode 100644 index 000000000000..1329fd69a2e1 --- /dev/null +++ b/packages/Python/lldbsuite/test/expression_command/radar_8638051/main.c @@ -0,0 +1,54 @@ +//===-- main.c --------------------------------------------------*- C++ -*-===// +// +//                     The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +#include <stdio.h> + +// This simple program is to demonstrate the capability of the lldb command +// "breakpoint command add" to add a set of commands to a breakpoint to be +// executed when the breakpoint is hit. +// +// In particular, we want to break within c(), but only if the immediate caller +// is a(). + +int a(int); +int b(int); +int c(int); + +int a(int val) +{ +    if (val <= 1) +        return b(val); +    else if (val >= 3) +        return c(val); // Find the line number where c's parent frame is a here. + +    return val; +} + +int b(int val) +{ +    return c(val); +} + +int c(int val) +{ +    return val + 3; +} + +int main (int argc, char const *argv[]) +{ +    int A1 = a(1);  // a(1) -> b(1) -> c(1) +    printf("a(1) returns %d\n", A1); +     +    int B2 = b(2);  // b(2) -> c(2) +    printf("b(2) returns %d\n", B2); +     +    int A3 = a(3);  // a(3) -> c(3) +    printf("a(3) returns %d\n", A3); +     +    return 0; +} | 
