"""
Test the robustness of lldb expression parser.
"""

from __future__ import print_function


import os
import 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 " + self.getBuildArtifact("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....
