提交 175f113c 编写于 作者: B bors

auto merge of #15573 : michaelwoerister/rust/lldb-tests-rebased-09-Jul, r=alexcrichton

This PR adds the LLDB autotests to the debuginfo test suite so I don't have to keep rebasing them locally. They are still disabled by default in `tests.mk`. One of the commits also contains a Python pretty printer which can make LLDB print values with Rust syntax. This was mainly added to deal with output format differences between LLDB versions but you can also use it for your normal LLDB debugging sessions.
```
// The following LLDB commands will load and activate the Rust printers
command script import ./src/etc/lldb_rust_formatters.py
type summary add --no-value --python-function lldb_rust_formatters.print_val -x .* --category Rust
type category enable Rust
```
Expect some rough edges with these, they have not been tested apart from there use in the autotests...
......@@ -30,7 +30,7 @@
use std::from_str::FromStr;
use getopts::{optopt, optflag, reqopt};
use common::Config;
use common::{Pretty, DebugInfoGdb, Codegen};
use common::{Pretty, DebugInfoGdb, DebugInfoLldb, Codegen};
use util::logv;
use regex::Regex;
......@@ -241,6 +241,16 @@ pub fn run_tests(config: &Config) {
os::setenv("RUST_TEST_TASKS","1");
}
match config.mode {
DebugInfoLldb => {
// Some older versions of LLDB seem to have problems with multiple
// instances running in parallel, so only run one test task at a
// time.
os::setenv("RUST_TEST_TASKS", "1");
}
_ => { /* proceed */ }
}
let opts = test_opts(config);
let tests = make_tests(config);
// sadly osx needs some file descriptor limits raised for running tests in
......
......@@ -536,6 +536,16 @@ fn run_debuginfo_lldb_test(config: &Config, props: &TestProps, testfile: &Path)
// We don't want to hang when calling `quit` while the process is still running
let mut script_str = String::from_str("settings set auto-confirm true\n");
// Make LLDB emit its version, so we have it documented in the test output
script_str.push_str("version\n");
// Switch LLDB into "Rust mode"
script_str.push_str("command script import ./src/etc/lldb_rust_formatters.py\n");
script_str.push_str("type summary add --no-value ");
script_str.push_str("--python-function lldb_rust_formatters.print_val ");
script_str.push_str("-x \".*\" --category Rust\n");
script_str.push_str("type category enable Rust\n");
// Set breakpoints on every line that contains the string "#break"
for line in breakpoint_lines.iter() {
script_str.push_str(format!("breakpoint set --line {}\n",
......
......@@ -31,9 +31,6 @@ import threading
import re
import atexit
# Terminate the debugger
atexit.register(lambda: lldb.SBDebugger.Terminate())
# Set this to True for additional output
DEBUG_OUTPUT = False
......
# Copyright 2014 The Rust Project Developers. See the COPYRIGHT
# file at the top-level directory of this distribution and at
# http://rust-lang.org/COPYRIGHT.
#
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
# option. This file may not be copied, modified, or distributed
# except according to those terms.
import lldb
def print_val(val, internal_dict):
'''Prints the given value with Rust syntax'''
type_class = val.GetType().GetTypeClass()
if type_class == lldb.eTypeClassStruct:
return print_struct_val(val, internal_dict)
if type_class == lldb.eTypeClassUnion:
return print_enum_val(val, internal_dict)
if type_class == lldb.eTypeClassPointer:
return print_pointer_val(val, internal_dict)
if type_class == lldb.eTypeClassArray:
return print_fixed_size_vec_val(val, internal_dict)
return val.GetValue()
#=--------------------------------------------------------------------------------------------------
# Type-Specialized Printing Functions
#=--------------------------------------------------------------------------------------------------
def print_struct_val(val, internal_dict):
'''Prints a struct, tuple, or tuple struct value with Rust syntax'''
assert val.GetType().GetTypeClass() == lldb.eTypeClassStruct
if is_vec_slice(val):
return print_vec_slice_val(val, internal_dict)
else:
return print_struct_val_starting_from(0, val, internal_dict)
def print_vec_slice_val(val, internal_dict):
output = "&["
length = val.GetChildAtIndex(1).GetValueAsUnsigned()
data_ptr_val = val.GetChildAtIndex(0)
data_ptr_type = data_ptr_val.GetType()
assert data_ptr_type.IsPointerType()
element_type = data_ptr_type.GetPointeeType()
element_type_size = element_type.GetByteSize()
start_address = data_ptr_val.GetValueAsUnsigned()
for i in range(length):
address = start_address + i * element_type_size
element_val = val.CreateValueFromAddress( val.GetName() + ("[%s]" % i), address, element_type )
output += print_val(element_val, internal_dict)
if i != length - 1:
output += ", "
output += "]"
return output
def print_struct_val_starting_from(field_start_index, val, internal_dict):
'''
Prints a struct, tuple, or tuple struct value with Rust syntax.
Ignores any fields before field_start_index.
'''
assert val.GetType().GetTypeClass() == lldb.eTypeClassStruct
t = val.GetType()
has_field_names = type_has_field_names(t)
type_name = extract_type_name(t.GetName())
output = ""
if not type_name.startswith("("):
# this is a tuple, so don't print the type name
output += type_name
if has_field_names:
output += " { \n"
else:
output += "("
num_children = val.num_children
for child_index in range(field_start_index, num_children):
if has_field_names:
field_name = t.GetFieldAtIndex(child_index).GetName()
output += field_name + ": "
field_val = val.GetChildAtIndex(child_index)
output += print_val(field_val, internal_dict)
if child_index != num_children - 1:
output += ", "
if has_field_names:
output += "\n"
if has_field_names:
output += "}"
else:
output += ")"
return output
def print_enum_val(val, internal_dict):
'''Prints an enum value with Rust syntax'''
assert val.GetType().GetTypeClass() == lldb.eTypeClassUnion
if val.num_children == 1:
first_variant_name = val.GetChildAtIndex(0).GetName()
if first_variant_name and first_variant_name.startswith("RUST$ENCODED$ENUM$"):
# Try to extract the
last_separator_index = first_variant_name.rfind("$")
if last_separator_index == -1:
return "<invalid enum encoding: %s>" % first_variant_name
second_last_separator_index = first_variant_name.rfind("$", 0, last_separator_index)
if second_last_separator_index == -1:
return "<invalid enum encoding: %s>" % first_variant_name
try:
disr_field_index = first_variant_name[second_last_separator_index + 1 :
last_separator_index]
disr_field_index = int(disr_field_index)
except:
return "<invalid enum encoding: %s>" % first_variant_name
disr_val = val.GetChildAtIndex(0).GetChildAtIndex(disr_field_index).GetValueAsUnsigned()
if disr_val == 0:
null_variant_name = first_variant_name[last_separator_index + 1:]
return null_variant_name
else:
return print_struct_val_starting_from(0, val.GetChildAtIndex(0), internal_dict)
else:
return print_struct_val_starting_from(0, val.GetChildAtIndex(0), internal_dict)
# extract the discriminator value by
disr_val = val.GetChildAtIndex(0).GetChildAtIndex(0)
disr_type = disr_val.GetType()
if disr_type.GetTypeClass() != lldb.eTypeClassEnumeration:
return "<Invalid enum value encountered: Discriminator is not an enum>"
variant_index = disr_val.GetValueAsUnsigned()
return print_struct_val_starting_from(1, val.GetChildAtIndex(variant_index), internal_dict)
def print_pointer_val(val, internal_dict):
'''Prints a pointer value with Rust syntax'''
assert val.GetType().IsPointerType()
sigil = "&"
type_name = extract_type_name(val.GetType().GetName())
if type_name and type_name[0:1] in ["&", "~", "*"]:
sigil = type_name[0:1]
return sigil + hex(val.GetValueAsUnsigned()) #print_val(val.Dereference(), internal_dict)
def print_fixed_size_vec_val(val, internal_dict):
assert val.GetType().GetTypeClass() == lldb.eTypeClassArray
output = "["
for i in range(val.num_children):
output += print_val(val.GetChildAtIndex(i), internal_dict)
if i != val.num_children - 1:
output += ", "
output += "]"
return output
#=--------------------------------------------------------------------------------------------------
# Helper Functions
#=--------------------------------------------------------------------------------------------------
unqualified_type_markers = frozenset(["(", "[", "&", "*"])
def extract_type_name(qualified_type_name):
'''Extracts the type name from a fully qualified path'''
if qualified_type_name[0] in unqualified_type_markers:
return qualified_type_name
end_of_search = qualified_type_name.find("<")
if end_of_search < 0:
end_of_search = len(qualified_type_name)
index = qualified_type_name.rfind("::", 0, end_of_search)
if index < 0:
return qualified_type_name
else:
return qualified_type_name[index + 2:]
def type_has_field_names(ty):
'''Returns true of this is a type with field names (struct, struct-like enum variant)'''
# This may also be an enum variant where the first field doesn't have a name but the rest has
if ty.GetNumberOfFields() > 1:
return ty.GetFieldAtIndex(1).GetName() != None
else:
return ty.GetFieldAtIndex(0).GetName() != None
def is_vec_slice(val):
ty = val.GetType()
if ty.GetTypeClass() != lldb.eTypeClassStruct:
return False
if ty.GetNumberOfFields() != 2:
return False
if ty.GetFieldAtIndex(0).GetName() != "data_ptr":
return False
if ty.GetFieldAtIndex(1).GetName() != "length":
return False
type_name = extract_type_name(ty.GetName()).replace("&'static", "&").replace(" ", "")
return type_name.startswith("&[") and type_name.endswith("]")
......@@ -17,6 +17,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
// gdb-command:finish
......@@ -49,6 +52,42 @@
// gdb-command:print f64
// gdb-check:$14 = 3.5
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print b
// lldb-check:[...]$0 = false
// lldb-command:print i
// lldb-check:[...]$1 = -1
// NOTE: LLDB does not support 32bit chars
// d ebugger:print (uint)(c)
// c heck:$3 = 97
// lldb-command:print i8
// lldb-check:[...]$2 = 'D'
// lldb-command:print i16
// lldb-check:[...]$3 = -16
// lldb-command:print i32
// lldb-check:[...]$4 = -32
// lldb-command:print i64
// lldb-check:[...]$5 = -64
// lldb-command:print u
// lldb-check:[...]$6 = 1
// lldb-command:print u8
// lldb-check:[...]$7 = 'd'
// lldb-command:print u16
// lldb-check:[...]$8 = 16
// lldb-command:print u32
// lldb-check:[...]$9 = 32
// lldb-command:print u64
// lldb-check:[...]$10 = 64
// lldb-command:print f32
// lldb-check:[...]$11 = 2.5
// lldb-command:print f64
// lldb-check:[...]$12 = 3.5
#![allow(unused_variable)]
fn main() {
......@@ -66,7 +105,7 @@ fn main() {
let u64: u64 = 64;
let f32: f32 = 2.5;
let f64: f64 = 3.5;
_zzz();
_zzz(); // #break
}
fn _zzz() {()}
......@@ -14,6 +14,9 @@
// its numerical value.
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
// gdb-command:finish
......@@ -59,6 +62,53 @@
// gdb-command:print *f64_ref
// gdb-check:$14 = 3.5
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print *bool_ref
// lldb-check:[...]$0 = true
// lldb-command:print *int_ref
// lldb-check:[...]$1 = -1
// NOTE: lldb doesn't support 32bit chars at the moment
// d ebugger:print *char_ref
// c heck:[...]$x = 97
// lldb-command:print *i8_ref
// lldb-check:[...]$2 = 'D'
// lldb-command:print *i16_ref
// lldb-check:[...]$3 = -16
// lldb-command:print *i32_ref
// lldb-check:[...]$4 = -32
// lldb-command:print *i64_ref
// lldb-check:[...]$5 = -64
// lldb-command:print *uint_ref
// lldb-check:[...]$6 = 1
// lldb-command:print *u8_ref
// lldb-check:[...]$7 = 'd'
// lldb-command:print *u16_ref
// lldb-check:[...]$8 = 16
// lldb-command:print *u32_ref
// lldb-check:[...]$9 = 32
// lldb-command:print *u64_ref
// lldb-check:[...]$10 = 64
// lldb-command:print *f32_ref
// lldb-check:[...]$11 = 2.5
// lldb-command:print *f64_ref
// lldb-check:[...]$12 = 3.5
#![allow(unused_variable)]
fn main() {
......@@ -103,7 +153,8 @@ fn main() {
let f64_val: f64 = 3.5;
let f64_ref: &f64 = &f64_val;
zzz();
zzz(); // #break
}
fn zzz() {()}
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
// gdb-command:finish
......@@ -24,6 +27,20 @@
// gdb-command:print *the_c_ref
// gdb-check:$3 = TheC
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print *the_a_ref
// lldb-check:[...]$0 = TheA
// lldb-command:print *the_b_ref
// lldb-check:[...]$1 = TheB
// lldb-command:print *the_c_ref
// lldb-check:[...]$2 = TheC
#![allow(unused_variable)]
enum ABC { TheA, TheB, TheC }
......@@ -38,7 +55,7 @@ fn main() {
let the_c = TheC;
let the_c_ref: &ABC = &the_c;
zzz();
zzz(); // #break
}
fn zzz() {()}
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
// gdb-command:finish
......@@ -24,6 +27,18 @@
// gdb-command:print *univariant_ref
// gdb-check:$3 = {{4820353753753434}}
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print *the_a_ref
// lldb-check:[...]$0 = TheA { x: 0, y: 8970181431921507452 }
// lldb-command:print *the_b_ref
// lldb-check:[...]$1 = TheB(0, 286331153, 286331153)
// lldb-command:print *univariant_ref
// lldb-check:[...]$2 = TheOnlyCase(4820353753753434)
#![allow(unused_variable)]
#![feature(struct_variant)]
......@@ -59,7 +74,7 @@ fn main() {
let univariant = TheOnlyCase(4820353753753434);
let univariant_ref: &Univariant = &univariant;
zzz();
zzz(); // #break
}
fn zzz() {()}
......@@ -16,6 +16,9 @@
// its numerical value.
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
// gdb-command:finish
......@@ -61,6 +64,56 @@
// gdb-command:print *f64_ref
// gdb-check:$14 = 3.5
// === LLDB TESTS ==================================================================================
// lldb-command:type format add -f decimal char
// lldb-command:type format add -f decimal 'unsigned char'
// lldb-command:run
// lldb-command:print *bool_ref
// lldb-check:[...]$0 = true
// lldb-command:print *int_ref
// lldb-check:[...]$1 = -1
// LLDB can't handle 32bit chars yet
// d ebugger:print *char_ref
// c heck:[...]$x = 97
// lldb-command:print *i8_ref
// lldb-check:[...]$2 = 68
// lldb-command:print *i16_ref
// lldb-check:[...]$3 = -16
// lldb-command:print *i32_ref
// lldb-check:[...]$4 = -32
// lldb-command:print *i64_ref
// lldb-check:[...]$5 = -64
// lldb-command:print *uint_ref
// lldb-check:[...]$6 = 1
// lldb-command:print *u8_ref
// lldb-check:[...]$7 = 100
// lldb-command:print *u16_ref
// lldb-check:[...]$8 = 16
// lldb-command:print *u32_ref
// lldb-check:[...]$9 = 32
// lldb-command:print *u64_ref
// lldb-check:[...]$10 = 64
// lldb-command:print *f32_ref
// lldb-check:[...]$11 = 2.5
// lldb-command:print *f64_ref
// lldb-check:[...]$12 = 3.5
#![allow(unused_variable)]
use std::gc::{Gc, GC};
......@@ -107,7 +160,8 @@ fn main() {
let f64_box: Gc<f64> = box(GC) 3.5;
let f64_ref: &f64 = f64_box;
zzz();
zzz(); // #break
}
fn zzz() {()}
......@@ -9,8 +9,10 @@
// except according to those terms.
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
// gdb-command:finish
......@@ -45,6 +47,41 @@
// gdb-command:print *unique_val_interior_ref_2
// gdb-check:$10 = 26.5
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print *stack_val_ref
// lldb-check:[...]$0 = SomeStruct { x: 10, y: 23.5 }
// lldb-command:print *stack_val_interior_ref_1
// lldb-check:[...]$1 = 10
// lldb-command:print *stack_val_interior_ref_2
// lldb-check:[...]$2 = 23.5
// lldb-command:print *ref_to_unnamed
// lldb-check:[...]$3 = SomeStruct { x: 11, y: 24.5 }
// lldb-command:print *managed_val_ref
// lldb-check:[...]$4 = SomeStruct { x: 12, y: 25.5 }
// lldb-command:print *managed_val_interior_ref_1
// lldb-check:[...]$5 = 12
// lldb-command:print *managed_val_interior_ref_2
// lldb-check:[...]$6 = 25.5
// lldb-command:print *unique_val_ref
// lldb-check:[...]$7 = SomeStruct { x: 13, y: 26.5 }
// lldb-command:print *unique_val_interior_ref_1
// lldb-check:[...]$8 = 13
// lldb-command:print *unique_val_interior_ref_2
// lldb-check:[...]$9 = 26.5
#![feature(managed_boxes)]
#![allow(unused_variable)]
......@@ -72,7 +109,7 @@ fn main() {
let unique_val_interior_ref_1: &int = &unique_val.x;
let unique_val_interior_ref_2: &f64 = &unique_val.y;
zzz();
zzz(); // #break
}
fn zzz() {()}
......@@ -13,6 +13,9 @@
#![feature(managed_boxes)]
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
// gdb-command:finish
......@@ -29,6 +32,24 @@
// gdb-command:print *unique_val_ref
// gdb-check:$4 = {-17, -22}
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print *stack_val_ref
// lldb-check:[...]$0 = (-14, -19)
// lldb-command:print *ref_to_unnamed
// lldb-check:[...]$1 = (-15, -20)
// lldb-command:print *managed_val_ref
// lldb-check:[...]$2 = (-16, -21)
// lldb-command:print *unique_val_ref
// lldb-check:[...]$3 = (-17, -22)
#![allow(unused_variable)]
use std::gc::{Gc, GC};
......@@ -44,7 +65,7 @@ fn main() {
let unique_val: Box<(i16, f32)> = box() (-17, -22f32);
let unique_val_ref: &(i16, f32) = unique_val;
zzz();
zzz(); // #break
}
fn zzz() {()}
......@@ -14,6 +14,9 @@
// its numerical value.
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
// gdb-command:finish
......@@ -59,6 +62,55 @@
// gdb-command:print *f64_ref
// gdb-check:$14 = 3.5
// === LLDB TESTS ==================================================================================
// lldb-command:type format add -f decimal char
// lldb-command:type format add -f decimal 'unsigned char'
// lldb-command:run
// lldb-command:print *bool_ref
// lldb-check:[...]$0 = true
// lldb-command:print *int_ref
// lldb-check:[...]$1 = -1
// d ebugger:print *char_ref
// c heck:[...]$3 = 97
// lldb-command:print *i8_ref
// lldb-check:[...]$2 = 68
// lldb-command:print *i16_ref
// lldb-check:[...]$3 = -16
// lldb-command:print *i32_ref
// lldb-check:[...]$4 = -32
// lldb-command:print *i64_ref
// lldb-check:[...]$5 = -64
// lldb-command:print *uint_ref
// lldb-check:[...]$6 = 1
// lldb-command:print *u8_ref
// lldb-check:[...]$7 = 100
// lldb-command:print *u16_ref
// lldb-check:[...]$8 = 16
// lldb-command:print *u32_ref
// lldb-check:[...]$9 = 32
// lldb-command:print *u64_ref
// lldb-check:[...]$10 = 64
// lldb-command:print *f32_ref
// lldb-check:[...]$11 = 2.5
// lldb-command:print *f64_ref
// lldb-check:[...]$12 = 3.5
#![allow(unused_variable)]
......@@ -104,7 +156,8 @@ fn main() {
let f64_box: Box<f64> = box 3.5;
let f64_ref: &f64 = f64_box;
zzz();
zzz(); // #break
}
fn zzz() {()}
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:set print pretty off
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -24,6 +27,19 @@
// gdb-command:print d->val
// gdb-check:$4 = false
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print *a
// lldb-check:[...]$0 = 1
// lldb-command:print *b
// lldb-check:[...]$1 = (2, 3.5)
// lldb-command:print c->val
// lldb-check:[...]$2 = 4
// lldb-command:print d->val
// lldb-check:[...]$3 = false
#![feature(managed_boxes)]
#![allow(unused_variable)]
......@@ -34,7 +50,8 @@ fn main() {
let b = box() (2i, 3.5f64);
let c = box(GC) 4i;
let d = box(GC) false;
_zzz();
zzz(); // #break
}
fn _zzz() {()}
fn zzz() { () }
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
// gdb-command:finish
......@@ -27,6 +30,23 @@
// gdb-command:print managed_dtor->val
// gdb-check:$4 = {x = 33, y = 333, z = 3333, w = 33333}
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print *unique
// lldb-check:[...]$0 = StructWithSomePadding { x: 99, y: 999, z: 9999, w: 99999 }
// lldb-command:print managed->val
// lldb-check:[...]$1 = StructWithSomePadding { x: 88, y: 888, z: 8888, w: 88888 }
// lldb-command:print *unique_dtor
// lldb-check:[...]$2 = StructWithDestructor { x: 77, y: 777, z: 7777, w: 77777 }
// lldb-command:print managed_dtor->val
// lldb-check:[...]$3 = StructWithDestructor { x: 33, y: 333, z: 3333, w: 33333 }
#![feature(managed_boxes)]
#![allow(unused_variable)]
......@@ -58,7 +78,7 @@ fn main() {
let unique_dtor = box StructWithDestructor { x: 77, y: 777, z: 7777, w: 77777 };
let managed_dtor = box(GC) StructWithDestructor { x: 33, y: 333, z: 3333, w: 33333 };
zzz();
zzz(); // #break
}
fn zzz() {()}
fn zzz() { () }
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -43,6 +46,35 @@
// gdb-check:$7 = {{Case1, x = 0, y = 8970181431921507452}, {Case1, 0, 2088533116, 2088533116}}
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print s
// lldb-check:[...]$0 = Struct { a: 1, b: 2.5 }
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$1 = Struct { a: 3, b: 4.5 }
// lldb-command:print y
// lldb-check:[...]$2 = 5
// lldb-command:print z
// lldb-check:[...]$3 = 6.5
// lldb-command:continue
// lldb-command:print a
// lldb-check:[...]$4 = (7, 8, 9.5, 10.5)
// lldb-command:continue
// lldb-command:print a
// lldb-check:[...]$5 = Newtype(11.5, 12.5, 13, 14)
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$6 = Case1 { x: 0, y: 8970181431921507452 }
// lldb-command:continue
#![feature(struct_variant)]
#[deriving(Clone)]
......@@ -58,21 +90,21 @@ struct StructStruct {
}
fn fun(s: Struct) {
zzz();
zzz(); // #break
}
fn fun_fun(StructStruct { a: x, b: Struct { a: y, b: z } }: StructStruct) {
zzz();
zzz(); // #break
}
fn tup(a: (int, uint, f64, f64)) {
zzz();
zzz(); // #break
}
struct Newtype(f64, f64, int, uint);
fn new_type(a: Newtype) {
zzz();
zzz(); // #break
}
// The first element is to ensure proper alignment, irrespective of the machines word size. Since
......@@ -84,7 +116,7 @@ enum Enum {
}
fn by_val_enum(x: Enum) {
zzz();
zzz(); // #break
}
fn main() {
......@@ -100,4 +132,4 @@ fn main() {
by_val_enum(Case1 { x: 0, y: 8970181431921507452 });
}
fn zzz() {()}
fn zzz() { () }
......@@ -13,6 +13,9 @@
#![feature(managed_boxes)]
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -36,6 +39,27 @@
// gdb-check:$4 = 8888
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print self
// lldb-check:[...]$0 = 1111
// lldb-command:continue
// lldb-command:print self
// lldb-check:[...]$1 = Struct { x: 2222, y: 3333 }
// lldb-command:continue
// lldb-command:print self
// lldb-check:[...]$2 = (4444.5, 5555, 6666, 7777.5)
// lldb-command:continue
// lldb-command:print self->val
// lldb-check:[...]$3 = 8888
// lldb-command:continue
use std::gc::{Gc, GC};
trait Trait {
......@@ -44,7 +68,7 @@ trait Trait {
impl Trait for int {
fn method(self) -> int {
zzz();
zzz(); // #break
self
}
}
......@@ -56,21 +80,21 @@ struct Struct {
impl Trait for Struct {
fn method(self) -> Struct {
zzz();
zzz(); // #break
self
}
}
impl Trait for (f64, int, int, f64) {
fn method(self) -> (f64, int, int, f64) {
zzz();
zzz(); // #break
self
}
}
impl Trait for Gc<int> {
fn method(self) -> Gc<int> {
zzz();
zzz(); // #break
self
}
}
......@@ -82,4 +106,4 @@ fn main() {
let _ = (box(GC) 8888).method();
}
fn zzz() {()}
fn zzz() { () }
......@@ -8,9 +8,13 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// ignore-tidy-linelength
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
// gdb-command:finish
......@@ -36,6 +40,31 @@
// gdb-command:print struct_with_drop
// gdb-check:$7 = {{a = OneHundred, b = Vienna}, 9}
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print tuple_interior_padding
// lldb-check:[...]$0 = (0, OneHundred)
// lldb-command:print tuple_padding_at_end
// lldb-check:[...]$1 = ((1, OneThousand), 2)
// lldb-command:print tuple_different_enums
// lldb-check:[...]$2 = (OneThousand, MountainView, OneMillion, Vienna)
// lldb-command:print padded_struct
// lldb-check:[...]$3 = PaddedStruct { a: 3, b: OneMillion, c: 4, d: Toronto, e: 5 }
// lldb-command:print packed_struct
// lldb-check:[...]$4 = PackedStruct { a: 6, b: OneHundred, c: 7, d: Vienna, e: 8 }
// lldb-command:print non_padded_struct
// lldb-check:[...]$5 = NonPaddedStruct { a: OneMillion, b: MountainView, c: OneThousand, d: Toronto }
// lldb-command:print struct_with_drop
// lldb-check:[...]$6 = (StructWithDrop { a: OneHundred, b: Vienna }, 9)
#![allow(unused_variable)]
enum AnEnum {
......@@ -115,7 +144,7 @@ fn main() {
let struct_with_drop = (StructWithDrop { a: OneHundred, b: Vienna }, 9_i64);
zzz();
zzz(); // #break
}
fn zzz() {()}
fn zzz() { () }
......@@ -12,6 +12,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:print 'c-style-enum::SINGLE_VARIANT'
......@@ -71,6 +74,32 @@
// gdb-command:print 'c-style-enum::MANUAL_THREE'
// gdb-check:$18 = OneMillion
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print auto_one
// lldb-check:[...]$0 = One
// lldb-command:print auto_two
// lldb-check:[...]$1 = Two
// lldb-command:print auto_three
// lldb-check:[...]$2 = Three
// lldb-command:print manual_one_hundred
// lldb-check:[...]$3 = OneHundred
// lldb-command:print manual_one_thousand
// lldb-check:[...]$4 = OneThousand
// lldb-command:print manual_one_million
// lldb-check:[...]$5 = OneMillion
// lldb-command:print single_variant
// lldb-check:[...]$6 = TheOnlyVariant
#![allow(unused_variable)]
#![allow(dead_code)]
......@@ -120,11 +149,11 @@ fn main() {
MANUAL_THREE = OneMillion;
};
zzz();
zzz(); // #break
let a = SINGLE_VARIANT;
let a = unsafe { AUTO_ONE };
let a = unsafe { MANUAL_ONE };
}
fn zzz() {()}
fn zzz() { () }
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -28,10 +31,27 @@
// gdb-check:$4 = 110
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print x
// lldb-check:[...]$0 = 0.5
// lldb-command:print y
// lldb-check:[...]$1 = 10
// lldb-command:continue
// lldb-command:print *x
// lldb-check:[...]$2 = 29
// lldb-command:print *y
// lldb-check:[...]$3 = 110
// lldb-command:continue
fn some_generic_fun<T1, T2>(a: T1, b: T2) -> (T2, T1) {
let closure = |x, y| {
zzz();
zzz(); // #break
(y, x)
};
......@@ -43,4 +63,4 @@ fn main() {
some_generic_fun(&29i, box 110i);
}
fn zzz() {()}
fn zzz() { () }
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -181,6 +184,154 @@
// gdb-check:$49 = 62
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print a
// lldb-check:[...]$0 = 1
// lldb-command:print b
// lldb-check:[...]$1 = false
// lldb-command:continue
// lldb-command:print a
// lldb-check:[...]$2 = 2
// lldb-command:print b
// lldb-check:[...]$3 = 3
// lldb-command:print c
// lldb-check:[...]$4 = 4
// lldb-command:continue
// lldb-command:print a
// lldb-check:[...]$5 = 5
// lldb-command:print b
// lldb-check:[...]$6 = (6, 7)
// lldb-command:continue
// lldb-command:print h
// lldb-check:[...]$7 = 8
// lldb-command:print i
// lldb-check:[...]$8 = Struct { a: 9, b: 10 }
// lldb-command:print j
// lldb-check:[...]$9 = 11
// lldb-command:continue
// lldb-command:print k
// lldb-check:[...]$10 = 12
// lldb-command:print l
// lldb-check:[...]$11 = 13
// lldb-command:continue
// lldb-command:print m
// lldb-check:[...]$12 = 14
// lldb-command:print n
// lldb-check:[...]$13 = 16
// lldb-command:continue
// lldb-command:print o
// lldb-check:[...]$14 = 18
// lldb-command:continue
// lldb-command:print p
// lldb-check:[...]$15 = 19
// lldb-command:print q
// lldb-check:[...]$16 = 20
// lldb-command:print r
// lldb-check:[...]$17 = Struct { a: 21, b: 22 }
// lldb-command:continue
// lldb-command:print s
// lldb-check:[...]$18 = 24
// lldb-command:print t
// lldb-check:[...]$19 = 23
// lldb-command:continue
// lldb-command:print u
// lldb-check:[...]$20 = 25
// lldb-command:print v
// lldb-check:[...]$21 = 26
// lldb-command:print w
// lldb-check:[...]$22 = 27
// lldb-command:print x
// lldb-check:[...]$23 = 28
// lldb-command:print y
// lldb-check:[...]$24 = 29
// lldb-command:print z
// lldb-check:[...]$25 = 30
// lldb-command:print ae
// lldb-check:[...]$26 = 31
// lldb-command:print oe
// lldb-check:[...]$27 = 32
// lldb-command:print ue
// lldb-check:[...]$28 = 33
// lldb-command:continue
// lldb-command:print aa
// lldb-check:[...]$29 = (34, 35)
// lldb-command:continue
// lldb-command:print bb
// lldb-check:[...]$30 = (36, 37)
// lldb-command:continue
// lldb-command:print cc
// lldb-check:[...]$31 = 38
// lldb-command:continue
// lldb-command:print dd
// lldb-check:[...]$32 = (40, 41, 42)
// lldb-command:continue
// lldb-command:print *ee
// lldb-check:[...]$33 = (43, 44, 45)
// lldb-command:continue
// lldb-command:print *ff
// lldb-check:[...]$34 = 46
// lldb-command:print gg
// lldb-check:[...]$35 = (47, 48)
// lldb-command:continue
// lldb-command:print *hh
// lldb-check:[...]$36 = 50
// lldb-command:continue
// lldb-command:print ii
// lldb-check:[...]$37 = 51
// lldb-command:continue
// lldb-command:print *jj
// lldb-check:[...]$38 = 52
// lldb-command:continue
// lldb-command:print kk
// lldb-check:[...]$39 = 53
// lldb-command:print ll
// lldb-check:[...]$40 = 54
// lldb-command:continue
// lldb-command:print mm
// lldb-check:[...]$41 = 55
// lldb-command:print *nn
// lldb-check:[...]$42 = 56
// lldb-command:continue
// lldb-command:print oo
// lldb-check:[...]$43 = 57
// lldb-command:print pp
// lldb-check:[...]$44 = 58
// lldb-command:print qq
// lldb-check:[...]$45 = 59
// lldb-command:continue
// lldb-command:print rr
// lldb-check:[...]$46 = 60
// lldb-command:print ss
// lldb-check:[...]$47 = 61
// lldb-command:print tt
// lldb-check:[...]$48 = 62
// lldb-command:continue
#![allow(unused_variable)]
......@@ -197,93 +348,93 @@ enum Univariant {
fn simple_tuple((a, b): (int, bool)) {
zzz();
zzz(); // #break
}
fn nested_tuple((a, (b, c)): (int, (u16, u16))) {
zzz();
zzz(); // #break
}
fn destructure_only_first_level((a, b): (int, (u32, u32))) {
zzz();
zzz(); // #break
}
fn struct_as_tuple_element((h, i, j): (i16, Struct, i16)) {
zzz();
zzz(); // #break
}
fn struct_pattern(Struct { a: k, b: l }: Struct) {
zzz();
zzz(); // #break
}
fn ignored_tuple_element((m, _, n): (int, u16, i32)) {
zzz();
zzz(); // #break
}
fn ignored_struct_field(Struct { b: o, .. }: Struct) {
zzz();
zzz(); // #break
}
fn one_struct_destructured_one_not((Struct { a: p, b: q }, r): (Struct, Struct)) {
zzz();
zzz(); // #break
}
fn different_order_of_struct_fields(Struct { b: s, a: t }: Struct ) {
zzz();
zzz(); // #break
}
fn complex_nesting(((u, v ), ((w, (x, Struct { a: y, b: z})), Struct { a: ae, b: oe }), ue ):
((i16, i32), ((i64, (i32, Struct, )), Struct ), u16))
{
zzz();
zzz(); // #break
}
fn managed_box(&aa: &(int, int)) {
zzz();
zzz(); // #break
}
fn borrowed_pointer(&bb: &(int, int)) {
zzz();
zzz(); // #break
}
fn contained_borrowed_pointer((&cc, _): (&int, int)) {
zzz();
zzz(); // #break
}
fn unique_pointer(box dd: Box<(int, int, int)>) {
zzz();
zzz(); // #break
}
fn ref_binding(ref ee: (int, int, int)) {
zzz();
zzz(); // #break
}
fn ref_binding_in_tuple((ref ff, gg): (int, (int, int))) {
zzz();
zzz(); // #break
}
fn ref_binding_in_struct(Struct { b: ref hh, .. }: Struct) {
zzz();
zzz(); // #break
}
fn univariant_enum(Unit(ii): Univariant) {
zzz();
zzz(); // #break
}
fn univariant_enum_with_ref_binding(Unit(ref jj): Univariant) {
zzz();
zzz(); // #break
}
fn tuple_struct(TupleStruct(kk, ll): TupleStruct) {
zzz();
zzz(); // #break
}
fn tuple_struct_with_ref_binding(TupleStruct(mm, ref nn): TupleStruct) {
zzz();
zzz(); // #break
}
fn multiple_arguments((oo, pp): (int, int), qq : int) {
zzz();
zzz(); // #break
}
fn main() {
......@@ -311,11 +462,10 @@ fn main() {
multiple_arguments((57, 58), 59);
fn nested_function(rr: int, (ss, tt): (int, int)) {
zzz();
zzz(); // #break
}
nested_function(60, (61, 62));
}
fn zzz() {()}
fn zzz() { () }
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
// gdb-command:finish
......@@ -125,6 +128,122 @@
// gdb-command:print *nn
// gdb-check:$43 = 56
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print a
// lldb-check:[...]$0 = 1
// lldb-command:print b
// lldb-check:[...]$1 = false
// lldb-command:print c
// lldb-check:[...]$2 = 2
// lldb-command:print d
// lldb-check:[...]$3 = 3
// lldb-command:print e
// lldb-check:[...]$4 = 4
// lldb-command:print f
// lldb-check:[...]$5 = 5
// lldb-command:print g
// lldb-check:[...]$6 = (6, 7)
// lldb-command:print h
// lldb-check:[...]$7 = 8
// lldb-command:print i
// lldb-check:[...]$8 = Struct { a: 9, b: 10 }
// lldb-command:print j
// lldb-check:[...]$9 = 11
// lldb-command:print k
// lldb-check:[...]$10 = 12
// lldb-command:print l
// lldb-check:[...]$11 = 13
// lldb-command:print m
// lldb-check:[...]$12 = 14
// lldb-command:print n
// lldb-check:[...]$13 = 16
// lldb-command:print o
// lldb-check:[...]$14 = 18
// lldb-command:print p
// lldb-check:[...]$15 = 19
// lldb-command:print q
// lldb-check:[...]$16 = 20
// lldb-command:print r
// lldb-check:[...]$17 = Struct { a: 21, b: 22 }
// lldb-command:print s
// lldb-check:[...]$18 = 24
// lldb-command:print t
// lldb-check:[...]$19 = 23
// lldb-command:print u
// lldb-check:[...]$20 = 25
// lldb-command:print v
// lldb-check:[...]$21 = 26
// lldb-command:print w
// lldb-check:[...]$22 = 27
// lldb-command:print x
// lldb-check:[...]$23 = 28
// lldb-command:print y
// lldb-check:[...]$24 = 29
// lldb-command:print z
// lldb-check:[...]$25 = 30
// lldb-command:print ae
// lldb-check:[...]$26 = 31
// lldb-command:print oe
// lldb-check:[...]$27 = 32
// lldb-command:print ue
// lldb-check:[...]$28 = 33
// lldb-command:print aa
// lldb-check:[...]$29 = (34, 35)
// lldb-command:print bb
// lldb-check:[...]$30 = (36, 37)
// lldb-command:print cc
// lldb-check:[...]$31 = 38
// lldb-command:print dd
// lldb-check:[...]$32 = (40, 41, 42)
// lldb-command:print *ee
// lldb-check:[...]$33 = (43, 44, 45)
// lldb-command:print *ff
// lldb-check:[...]$34 = 46
// lldb-command:print gg
// lldb-check:[...]$35 = (47, 48)
// lldb-command:print *hh
// lldb-check:[...]$36 = 50
// lldb-command:print ii
// lldb-check:[...]$37 = 51
// lldb-command:print *jj
// lldb-check:[...]$38 = 52
// lldb-command:print kk
// lldb-check:[...]$39 = 53
// lldb-command:print ll
// lldb-check:[...]$40 = 54
// lldb-command:print mm
// lldb-check:[...]$41 = 55
// lldb-command:print *nn
// lldb-check:[...]$42 = 56
#![allow(unused_variable)]
struct Struct {
......@@ -204,7 +323,7 @@ fn main() {
// tuple struct with ref binding
let &TupleStruct(mm, ref nn) = &TupleStruct(55.0, 56);
zzz();
zzz(); // #break
}
fn zzz() {()}
fn zzz() { () }
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:set print pretty off
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -30,6 +33,25 @@
// gdb-command:print struct_padded_at_end
// gdb-check:$5 = {x = {22, 23}, y = {24, 25}}
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print no_padding1
// lldb-check:[...]$0 = NoPadding1 { x: [0, 1, 2], y: -3, z: [4.5, 5.5] }
// lldb-command:print no_padding2
// lldb-check:[...]$1 = NoPadding2 { x: [6, 7, 8], y: [[9, 10], [11, 12]] }
// lldb-command:print struct_internal_padding
// lldb-check:[...]$2 = StructInternalPadding { x: [13, 14], y: [15, 16] }
// lldb-command:print single_vec
// lldb-check:[...]$3 = SingleVec { x: [17, 18, 19, 20, 21] }
// lldb-command:print struct_padded_at_end
// lldb-check:[...]$4 = StructPaddedAtEnd { x: [22, 23], y: [24, 25] }
#![allow(unused_variable)]
struct NoPadding1 {
......@@ -84,7 +106,7 @@ fn main() {
y: [24, 25]
};
zzz();
zzz(); // #break
}
fn zzz() {()}
fn zzz() { () }
......@@ -18,18 +18,19 @@
// compile-flags:-g
// gdb-command:set print pretty off
// gdb-command:break function-arg-initialization.rs:139
// gdb-command:break function-arg-initialization.rs:154
// gdb-command:break function-arg-initialization.rs:158
// gdb-command:break function-arg-initialization.rs:162
// gdb-command:break function-arg-initialization.rs:166
// gdb-command:break function-arg-initialization.rs:170
// gdb-command:break function-arg-initialization.rs:174
// gdb-command:break function-arg-initialization.rs:178
// gdb-command:break function-arg-initialization.rs:182
// gdb-command:break function-arg-initialization.rs:190
// gdb-command:break function-arg-initialization.rs:197
// gdb-command:break function-arg-initialization.rs:243
// gdb-command:break function-arg-initialization.rs:258
// gdb-command:break function-arg-initialization.rs:262
// gdb-command:break function-arg-initialization.rs:266
// gdb-command:break function-arg-initialization.rs:270
// gdb-command:break function-arg-initialization.rs:274
// gdb-command:break function-arg-initialization.rs:278
// gdb-command:break function-arg-initialization.rs:282
// gdb-command:break function-arg-initialization.rs:286
// gdb-command:break function-arg-initialization.rs:294
// gdb-command:break function-arg-initialization.rs:301
// === GDB TESTS ===================================================================================
// gdb-command:run
......@@ -130,13 +131,116 @@
// gdb-check:$32 = 45
// gdb-command:continue
#![allow(unused_variable)]
// === LLDB TESTS ==================================================================================
// lldb-command:run
// IMMEDIATE ARGS
// lldb-command:print a
// lldb-check:[...]$0 = 1
// lldb-command:print b
// lldb-check:[...]$1 = true
// lldb-command:print c
// lldb-check:[...]$2 = 2.5
// lldb-command:continue
// NON IMMEDIATE ARGS
// lldb-command:print a
// lldb-check:[...]$3 = BigStruct { a: 3, b: 4, c: 5, d: 6, e: 7, f: 8, g: 9, h: 10 }
// lldb-command:print b
// lldb-check:[...]$4 = BigStruct { a: 11, b: 12, c: 13, d: 14, e: 15, f: 16, g: 17, h: 18 }
// lldb-command:continue
// BINDING
// lldb-command:print a
// lldb-check:[...]$5 = 19
// lldb-command:print b
// lldb-check:[...]$6 = 20
// lldb-command:print c
// lldb-check:[...]$7 = 21.5
// lldb-command:continue
// ASSIGNMENT
// lldb-command:print a
// lldb-check:[...]$8 = 22
// lldb-command:print b
// lldb-check:[...]$9 = 23
// lldb-command:print c
// lldb-check:[...]$10 = 24.5
// lldb-command:continue
// FUNCTION CALL
// lldb-command:print x
// lldb-check:[...]$11 = 25
// lldb-command:print y
// lldb-check:[...]$12 = 26
// lldb-command:print z
// lldb-check:[...]$13 = 27.5
// lldb-command:continue
// EXPR
// lldb-command:print x
// lldb-check:[...]$14 = 28
// lldb-command:print y
// lldb-check:[...]$15 = 29
// lldb-command:print z
// lldb-check:[...]$16 = 30.5
// lldb-command:continue
// RETURN EXPR
// lldb-command:print x
// lldb-check:[...]$17 = 31
// lldb-command:print y
// lldb-check:[...]$18 = 32
// lldb-command:print z
// lldb-check:[...]$19 = 33.5
// lldb-command:continue
// ARITHMETIC EXPR
// lldb-command:print x
// lldb-check:[...]$20 = 34
// lldb-command:print y
// lldb-check:[...]$21 = 35
// lldb-command:print z
// lldb-check:[...]$22 = 36.5
// lldb-command:continue
// IF EXPR
// lldb-command:print x
// lldb-check:[...]$23 = 37
// lldb-command:print y
// lldb-check:[...]$24 = 38
// lldb-command:print z
// lldb-check:[...]$25 = 39.5
// lldb-command:continue
// WHILE EXPR
// lldb-command:print x
// lldb-check:[...]$26 = 40
// lldb-command:print y
// lldb-check:[...]$27 = 41
// lldb-command:print z
// lldb-check:[...]$28 = 42
// lldb-command:continue
// LOOP EXPR
// lldb-command:print x
// lldb-check:[...]$29 = 43
// lldb-command:print y
// lldb-check:[...]$30 = 44
// lldb-command:print z
// lldb-check:[...]$31 = 45
// lldb-command:continue
#![allow(unused_variable)]
fn immediate_args(a: int, b: bool, c: f64) {
()
() // #break
}
struct BigStruct {
......@@ -151,35 +255,35 @@ struct BigStruct {
}
fn non_immediate_args(a: BigStruct, b: BigStruct) {
()
() // #break
}
fn binding(a: i64, b: u64, c: f64) {
let x = 0i;
let x = 0i; // #break
}
fn assignment(mut a: u64, b: u64, c: f64) {
a = b;
a = b; // #break
}
fn function_call(x: u64, y: u64, z: f64) {
std::io::stdio::print("Hi!")
std::io::stdio::print("Hi!") // #break
}
fn identifier(x: u64, y: u64, z: f64) -> u64 {
x
x // #break
}
fn return_expr(x: u64, y: u64, z: f64) -> u64 {
return x;
return x; // #break
}
fn arithmetic_expr(x: u64, y: u64, z: f64) -> u64 {
x + y
x + y // #break
}
fn if_expr(x: u64, y: u64, z: f64) -> u64 {
if x + y < 1000 {
if x + y < 1000 { // #break
x
} else {
y
......@@ -187,14 +291,14 @@ fn if_expr(x: u64, y: u64, z: f64) -> u64 {
}
fn while_expr(mut x: u64, y: u64, z: u64) -> u64 {
while x + y < 1000 {
while x + y > 1000 { // #break
x += z
}
return x;
}
fn loop_expr(mut x: u64, y: u64, z: u64) -> u64 {
loop {
loop { // #break
x += z;
if x + y > 1000 {
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
// gdb-command:finish
......@@ -28,21 +31,38 @@
// gdb-command:print b
// gdb-check:$4 = 3000
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print x
// lldb-check:[...]$0 = 111102
// lldb-command:print y
// lldb-check:[...]$1 = true
// lldb-command:continue
// lldb-command:print a
// lldb-check:[...]$2 = 2000
// lldb-command:print b
// lldb-check:[...]$3 = 3000
// lldb-command:continue
fn main() {
fun(111102, true);
nested(2000, 3000);
fn nested(a: i32, b: i64) -> (i32, i64) {
zzz();
zzz(); // #break
(a, b)
}
}
fn fun(x: int, y: bool) -> (int, bool) {
zzz();
zzz(); // #break
(x, y)
}
fn zzz() {()}
fn zzz() { () }
......@@ -14,9 +14,13 @@
// beginning of a function. Functions with the #[no_split_stack] attribute have the same prologue as
// regular C functions compiled with GCC or Clang and therefore are better handled by GDB. As a
// consequence, and as opposed to regular Rust functions, we can set the breakpoints via the
// function name (and don't have to fall back on using line numbers).
// function name (and don't have to fall back on using line numbers). For LLDB this shouldn't make
// a difference because it can handle both cases.
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:set print pretty off
// gdb-command:rbreak immediate_args
// gdb-command:rbreak binding
......@@ -127,6 +131,119 @@
// gdb-check:$32 = 45
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:breakpoint set --name immediate_args
// lldb-command:breakpoint set --name non_immediate_args
// lldb-command:breakpoint set --name binding
// lldb-command:breakpoint set --name assignment
// lldb-command:breakpoint set --name function_call
// lldb-command:breakpoint set --name identifier
// lldb-command:breakpoint set --name return_expr
// lldb-command:breakpoint set --name arithmetic_expr
// lldb-command:breakpoint set --name if_expr
// lldb-command:breakpoint set --name while_expr
// lldb-command:breakpoint set --name loop_expr
// lldb-command:run
// IMMEDIATE ARGS
// lldb-command:print a
// lldb-check:[...]$0 = 1
// lldb-command:print b
// lldb-check:[...]$1 = true
// lldb-command:print c
// lldb-check:[...]$2 = 2.5
// lldb-command:continue
// NON IMMEDIATE ARGS
// lldb-command:print a
// lldb-check:[...]$3 = BigStruct { a: 3, b: 4, c: 5, d: 6, e: 7, f: 8, g: 9, h: 10 }
// lldb-command:print b
// lldb-check:[...]$4 = BigStruct { a: 11, b: 12, c: 13, d: 14, e: 15, f: 16, g: 17, h: 18 }
// lldb-command:continue
// BINDING
// lldb-command:print a
// lldb-check:[...]$5 = 19
// lldb-command:print b
// lldb-check:[...]$6 = 20
// lldb-command:print c
// lldb-check:[...]$7 = 21.5
// lldb-command:continue
// ASSIGNMENT
// lldb-command:print a
// lldb-check:[...]$8 = 22
// lldb-command:print b
// lldb-check:[...]$9 = 23
// lldb-command:print c
// lldb-check:[...]$10 = 24.5
// lldb-command:continue
// FUNCTION CALL
// lldb-command:print x
// lldb-check:[...]$11 = 25
// lldb-command:print y
// lldb-check:[...]$12 = 26
// lldb-command:print z
// lldb-check:[...]$13 = 27.5
// lldb-command:continue
// EXPR
// lldb-command:print x
// lldb-check:[...]$14 = 28
// lldb-command:print y
// lldb-check:[...]$15 = 29
// lldb-command:print z
// lldb-check:[...]$16 = 30.5
// lldb-command:continue
// RETURN EXPR
// lldb-command:print x
// lldb-check:[...]$17 = 31
// lldb-command:print y
// lldb-check:[...]$18 = 32
// lldb-command:print z
// lldb-check:[...]$19 = 33.5
// lldb-command:continue
// ARITHMETIC EXPR
// lldb-command:print x
// lldb-check:[...]$20 = 34
// lldb-command:print y
// lldb-check:[...]$21 = 35
// lldb-command:print z
// lldb-check:[...]$22 = 36.5
// lldb-command:continue
// IF EXPR
// lldb-command:print x
// lldb-check:[...]$23 = 37
// lldb-command:print y
// lldb-check:[...]$24 = 38
// lldb-command:print z
// lldb-check:[...]$25 = 39.5
// lldb-command:continue
// WHILE EXPR
// lldb-command:print x
// lldb-check:[...]$26 = 40
// lldb-command:print y
// lldb-check:[...]$27 = 41
// lldb-command:print z
// lldb-check:[...]$28 = 42
// lldb-command:continue
// LOOP EXPR
// lldb-command:print x
// lldb-check:[...]$29 = 43
// lldb-command:print y
// lldb-check:[...]$30 = 44
// lldb-command:print z
// lldb-check:[...]$31 = 45
// lldb-command:continue
#![allow(unused_variable)]
#[no_split_stack]
......
// Copyright 2013-2014 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// This test case checks if function arguments already have the correct value when breaking at the
// beginning of a function.
// ignore-gdb
// compile-flags:-g
// lldb-command:breakpoint set --name immediate_args
// lldb-command:breakpoint set --name non_immediate_args
// lldb-command:breakpoint set --name binding
// lldb-command:breakpoint set --name assignment
// lldb-command:breakpoint set --name function_call
// lldb-command:breakpoint set --name identifier
// lldb-command:breakpoint set --name return_expr
// lldb-command:breakpoint set --name arithmetic_expr
// lldb-command:breakpoint set --name if_expr
// lldb-command:breakpoint set --name while_expr
// lldb-command:breakpoint set --name loop_expr
// lldb-command:run
// IMMEDIATE ARGS
// lldb-command:print a
// lldb-check:[...]$0 = 1
// lldb-command:print b
// lldb-check:[...]$1 = true
// lldb-command:print c
// lldb-check:[...]$2 = 2.5
// lldb-command:continue
// NON IMMEDIATE ARGS
// lldb-command:print a
// lldb-check:[...]$3 = BigStruct { a: 3, b: 4, c: 5, d: 6, e: 7, f: 8, g: 9, h: 10 }
// lldb-command:print b
// lldb-check:[...]$4 = BigStruct { a: 11, b: 12, c: 13, d: 14, e: 15, f: 16, g: 17, h: 18 }
// lldb-command:continue
// BINDING
// lldb-command:print a
// lldb-check:[...]$5 = 19
// lldb-command:print b
// lldb-check:[...]$6 = 20
// lldb-command:print c
// lldb-check:[...]$7 = 21.5
// lldb-command:continue
// ASSIGNMENT
// lldb-command:print a
// lldb-check:[...]$8 = 22
// lldb-command:print b
// lldb-check:[...]$9 = 23
// lldb-command:print c
// lldb-check:[...]$10 = 24.5
// lldb-command:continue
// FUNCTION CALL
// lldb-command:print x
// lldb-check:[...]$11 = 25
// lldb-command:print y
// lldb-check:[...]$12 = 26
// lldb-command:print z
// lldb-check:[...]$13 = 27.5
// lldb-command:continue
// EXPR
// lldb-command:print x
// lldb-check:[...]$14 = 28
// lldb-command:print y
// lldb-check:[...]$15 = 29
// lldb-command:print z
// lldb-check:[...]$16 = 30.5
// lldb-command:continue
// RETURN EXPR
// lldb-command:print x
// lldb-check:[...]$17 = 31
// lldb-command:print y
// lldb-check:[...]$18 = 32
// lldb-command:print z
// lldb-check:[...]$19 = 33.5
// lldb-command:continue
// ARITHMETIC EXPR
// lldb-command:print x
// lldb-check:[...]$20 = 34
// lldb-command:print y
// lldb-check:[...]$21 = 35
// lldb-command:print z
// lldb-check:[...]$22 = 36.5
// lldb-command:continue
// IF EXPR
// lldb-command:print x
// lldb-check:[...]$23 = 37
// lldb-command:print y
// lldb-check:[...]$24 = 38
// lldb-command:print z
// lldb-check:[...]$25 = 39.5
// lldb-command:continue
// WHILE EXPR
// lldb-command:print x
// lldb-check:[...]$26 = 40
// lldb-command:print y
// lldb-check:[...]$27 = 41
// lldb-command:print z
// lldb-check:[...]$28 = 42
// lldb-command:continue
// LOOP EXPR
// lldb-command:print x
// lldb-check:[...]$29 = 43
// lldb-command:print y
// lldb-check:[...]$30 = 44
// lldb-command:print z
// lldb-check:[...]$31 = 45
// lldb-command:continue
#![allow(unused_variable)]
fn immediate_args(a: int, b: bool, c: f64) {
()
}
struct BigStruct {
a: u64,
b: u64,
c: u64,
d: u64,
e: u64,
f: u64,
g: u64,
h: u64
}
fn non_immediate_args(a: BigStruct, b: BigStruct) {
()
}
fn binding(a: i64, b: u64, c: f64) {
let x = 0i;
}
fn assignment(mut a: u64, b: u64, c: f64) {
a = b;
}
fn function_call(x: u64, y: u64, z: f64) {
std::io::stdio::print("Hi!")
}
fn identifier(x: u64, y: u64, z: f64) -> u64 {
x
}
fn return_expr(x: u64, y: u64, z: f64) -> u64 {
return x;
}
fn arithmetic_expr(x: u64, y: u64, z: f64) -> u64 {
x + y
}
fn if_expr(x: u64, y: u64, z: f64) -> u64 {
if x + y < 1000 {
x
} else {
y
}
}
fn while_expr(mut x: u64, y: u64, z: u64) -> u64 {
while x + y < 1000 {
x += z
}
return x;
}
fn loop_expr(mut x: u64, y: u64, z: u64) -> u64 {
loop {
x += z;
if x + y > 1000 {
return x;
}
}
}
fn main() {
immediate_args(1, true, 2.5);
non_immediate_args(
BigStruct {
a: 3,
b: 4,
c: 5,
d: 6,
e: 7,
f: 8,
g: 9,
h: 10
},
BigStruct {
a: 11,
b: 12,
c: 13,
d: 14,
e: 15,
f: 16,
g: 17,
h: 18
}
);
binding(19, 20, 21.5);
assignment(22, 23, 24.5);
function_call(25, 26, 27.5);
identifier(28, 29, 30.5);
return_expr(31, 32, 33.5);
arithmetic_expr(34, 35, 36.5);
if_expr(37, 38, 39.5);
while_expr(40, 41, 42);
loop_expr(43, 44, 45);
}
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -41,6 +44,36 @@
// gdb-check:$9 = {{5, {a = 6, b = 7.5}}, {{a = 6, b = 7.5}, 5}}
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print *t0
// lldb-check:[...]$0 = 1
// lldb-command:print *t1
// lldb-check:[...]$1 = 2.5
// lldb-command:print ret
// lldb-check:[...]$2 = ((1, 2.5), (2.5, 1))
// lldb-command:continue
// lldb-command:print *t0
// lldb-check:[...]$3 = 3.5
// lldb-command:print *t1
// lldb-check:[...]$4 = 4
// lldb-command:print ret
// lldb-check:[...]$5 = ((3.5, 4), (4, 3.5))
// lldb-command:continue
// lldb-command:print *t0
// lldb-check:[...]$6 = 5
// lldb-command:print *t1
// lldb-check:[...]$7 = Struct { a: 6, b: 7.5 }
// lldb-command:print ret
// lldb-check:[...]$8 = ((5, Struct { a: 6, b: 7.5 }), (Struct { a: 6, b: 7.5 }, 5))
// lldb-command:continue
#[deriving(Clone)]
struct Struct {
a: int,
......@@ -49,7 +82,7 @@ struct Struct {
fn dup_tup<T0: Clone, T1: Clone>(t0: &T0, t1: &T1) -> ((T0, T1), (T1, T0)) {
let ret = ((t0.clone(), t1.clone()), (t1.clone(), t0.clone()));
zzz();
zzz(); // #break
ret
}
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -42,12 +45,41 @@
// gdb-check:$8 = 2.5
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print x
// lldb-check:[...]$0 = -1
// lldb-command:print y
// lldb-check:[...]$1 = 1
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$2 = -1
// lldb-command:print y
// lldb-check:[...]$3 = 2.5
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$4 = -2.5
// lldb-command:print y
// lldb-check:[...]$5 = 1
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$6 = -2.5
// lldb-command:print y
// lldb-check:[...]$7 = 2.5
// lldb-command:continue
fn outer<TA: Clone>(a: TA) {
inner(a.clone(), 1i);
inner(a.clone(), 2.5f64);
fn inner<TX, TY>(x: TX, y: TY) {
zzz();
zzz(); // #break
}
}
......@@ -56,4 +88,4 @@ fn main() {
outer(-2.5f64);
}
fn zzz() {()}
fn zzz() { () }
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -20,8 +23,8 @@
// gdb-check:$1 = {x = {8888, -8888}}
// gdb-command:print arg1
// gdb-check:$2 = -1
// gdb-command:print/d arg2
// gdb-check:$3 = -2
// gdb-command:print arg2
// gdb-check:$3 = 2
// gdb-command:continue
// STACK BY VAL
......@@ -64,6 +67,57 @@
// gdb-check:$15 = -10.5
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// STACK BY REF
// lldb-command:print *self
// lldb-check:[...]$0 = Struct<(u32, i32)> { x: (8888, -8888) }
// lldb-command:print arg1
// lldb-check:[...]$1 = -1
// lldb-command:print arg2
// lldb-check:[...]$2 = 2
// lldb-command:continue
// STACK BY VAL
// lldb-command:print self
// lldb-check:[...]$3 = Struct<(u32, i32)> { x: (8888, -8888) }
// lldb-command:print arg1
// lldb-check:[...]$4 = -3
// lldb-command:print arg2
// lldb-check:[...]$5 = -4
// lldb-command:continue
// OWNED BY REF
// lldb-command:print *self
// lldb-check:[...]$6 = Struct<f64> { x: 1234.5 }
// lldb-command:print arg1
// lldb-check:[...]$7 = -5
// lldb-command:print arg2
// lldb-check:[...]$8 = -6
// lldb-command:continue
// OWNED BY VAL
// lldb-command:print self
// lldb-check:[...]$9 = Struct<f64> { x: 1234.5 }
// lldb-command:print arg1
// lldb-check:[...]$10 = -7
// lldb-command:print arg2
// lldb-check:[...]$11 = -8
// lldb-command:continue
// OWNED MOVED
// lldb-command:print *self
// lldb-check:[...]$12 = Struct<f64> { x: 1234.5 }
// lldb-command:print arg1
// lldb-check:[...]$13 = -9
// lldb-command:print arg2
// lldb-check:[...]$14 = -10.5
// lldb-command:continue
struct Struct<T> {
x: T
}
......@@ -71,24 +125,24 @@ struct Struct<T> {
impl<T1> Struct<T1> {
fn self_by_ref<T2>(&self, arg1: int, arg2: T2) -> int {
zzz();
zzz(); // #break
arg1
}
fn self_by_val<T2>(self, arg1: int, arg2: T2) -> int {
zzz();
zzz(); // #break
arg1
}
fn self_owned<T2>(~self, arg1: int, arg2: T2) -> int {
zzz();
zzz(); // #break
arg1
}
}
fn main() {
let stack = Struct { x: (8888_u32, -8888_i32) };
let _ = stack.self_by_ref(-1, -2_i8);
let _ = stack.self_by_ref(-1, 2_u16);
let _ = stack.self_by_val(-3, -4_i16);
let owned = box Struct { x: 1234.5f64 };
......
......@@ -8,9 +8,13 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// ignore-tidy-linelength
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -24,6 +28,20 @@
// gdb-command:print float_int_float
// gdb-check:$4 = {key = 6.5, value = {key = 7, value = 8.5}}
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print int_int
// lldb-check:[...]$0 = AGenericStruct<int, int> { key: 0, value: 1 }
// lldb-command:print int_float
// lldb-check:[...]$1 = AGenericStruct<int, f64> { key: 2, value: 3.5 }
// lldb-command:print float_int
// lldb-check:[...]$2 = AGenericStruct<f64, int> { key: 4.5, value: 5 }
// lldb-command:print float_int_float
// lldb-check:[...]$3 = AGenericStruct<f64, generic-struct::AGenericStruct<int, f64>> { key: 6.5, value: AGenericStruct<int, f64> { key: 7, value: 8.5 } }
struct AGenericStruct<TKey, TValue> {
key: TKey,
value: TValue
......@@ -39,7 +57,7 @@ fn main() {
value: AGenericStruct { key: 7i, value: 8.5f64 },
};
zzz();
zzz(); // #break
}
fn zzz() {()}
fn zzz() { () }
......@@ -12,6 +12,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:set print union on
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -30,6 +33,23 @@
// gdb-check:$4 = {{-1}}
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print case1
// lldb-check:[...]$0 = Case1(0, 31868, 31868, 31868, 31868)
// lldb-command:print case2
// lldb-check:[...]$1 = Case2(0, 286331153, 286331153)
// lldb-command:print case3
// lldb-check:[...]$2 = Case3(0, 6438275382588823897)
// lldb-command:print univariant
// lldb-check:[...]$3 = TheOnlyCase(-1)
// NOTE: This is a copy of the non-generic test case. The `Txx` type parameters have to be
// substituted with something of size `xx` bits and the same alignment as an integer type of the
// same size.
......@@ -73,7 +93,7 @@ fn main() {
let univariant = TheOnlyCase(-1_i64);
zzz();
zzz(); // #break
}
fn zzz() {()}
fn zzz() { () }
......@@ -15,13 +15,27 @@
// gdb-command:run
// gdb-command:finish
// gdb-command:print string1.length
// gdb-check:$1 = 49
// gdb-check:$1 = 48
// gdb-command:print string2.length
// gdb-check:$2 = 49
// gdb-command:print string3.length
// gdb-check:$3 = 49
// gdb-check:$3 = 50
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print string1.length
// lldb-check:[...]$0 = 48
// lldb-command:print string2.length
// lldb-check:[...]$1 = 49
// lldb-command:print string3.length
// lldb-check:[...]$2 = 50
// lldb-command:continue
#![allow(unused_variable)]
// This test case makes sure that debug info does not ICE when include_str is
......@@ -31,7 +45,8 @@ fn main() {
let string1 = include_str!("text-to-include-1.txt");
let string2 = include_str!("text-to-include-2.txt");
let string3 = include_str!("text-to-include-3.txt");
zzz();
zzz(); // #break
}
fn zzz() {()}
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -53,6 +56,43 @@
// gdb-check:$7 = 1000000
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// FIRST ITERATION
// lldb-command:print x
// lldb-check:[...]$0 = 1
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$1 = -1
// lldb-command:continue
// SECOND ITERATION
// lldb-command:print x
// lldb-check:[...]$2 = 2
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$3 = -2
// lldb-command:continue
// THIRD ITERATION
// lldb-command:print x
// lldb-check:[...]$4 = 3
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$5 = -3
// lldb-command:continue
// AFTER LOOP
// lldb-command:print x
// lldb-check:[...]$6 = 1000000
// lldb-command:continue
fn main() {
let range = [1i, 2, 3];
......@@ -60,16 +100,16 @@ fn main() {
let x = 1000000i; // wan meeeljen doollaars!
for &x in range.iter() {
zzz();
zzz(); // #break
sentinel();
let x = -1i * x;
zzz();
zzz(); // #break
sentinel();
}
zzz();
zzz(); // #break
sentinel();
}
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -78,47 +81,109 @@
// gdb-check:$16 = -1
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// BEFORE if
// lldb-command:print x
// lldb-check:[...]$0 = 999
// lldb-command:print y
// lldb-check:[...]$1 = -1
// lldb-command:continue
// AT BEGINNING of 'then' block
// lldb-command:print x
// lldb-check:[...]$2 = 999
// lldb-command:print y
// lldb-check:[...]$3 = -1
// lldb-command:continue
// AFTER 1st redeclaration of 'x'
// lldb-command:print x
// lldb-check:[...]$4 = 1001
// lldb-command:print y
// lldb-check:[...]$5 = -1
// lldb-command:continue
// AFTER 2st redeclaration of 'x'
// lldb-command:print x
// lldb-check:[...]$6 = 1002
// lldb-command:print y
// lldb-check:[...]$7 = 1003
// lldb-command:continue
// AFTER 1st if expression
// lldb-command:print x
// lldb-check:[...]$8 = 999
// lldb-command:print y
// lldb-check:[...]$9 = -1
// lldb-command:continue
// BEGINNING of else branch
// lldb-command:print x
// lldb-check:[...]$10 = 999
// lldb-command:print y
// lldb-check:[...]$11 = -1
// lldb-command:continue
// BEGINNING of else branch
// lldb-command:print x
// lldb-check:[...]$12 = 1004
// lldb-command:print y
// lldb-check:[...]$13 = 1005
// lldb-command:continue
// BEGINNING of else branch
// lldb-command:print x
// lldb-check:[...]$14 = 999
// lldb-command:print y
// lldb-check:[...]$15 = -1
// lldb-command:continue
fn main() {
let x = 999i;
let y = -1i;
zzz();
zzz(); // #break
sentinel();
if x < 1000 {
zzz();
zzz(); // #break
sentinel();
let x = 1001i;
zzz();
zzz(); // #break
sentinel();
let x = 1002i;
let y = 1003i;
zzz();
zzz(); // #break
sentinel();
} else {
unreachable!();
}
zzz();
zzz(); // #break
sentinel();
if x > 1000 {
unreachable!();
} else {
zzz();
zzz(); // #break
sentinel();
let x = 1004i;
let y = 1005i;
zzz();
zzz(); // #break
sentinel();
}
zzz();
zzz(); // #break
sentinel();
}
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -74,6 +77,64 @@
// gdb-check:$18 = 232
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print shadowed
// lldb-check:[...]$0 = 231
// lldb-command:print not_shadowed
// lldb-check:[...]$1 = 232
// lldb-command:continue
// lldb-command:print shadowed
// lldb-check:[...]$2 = 233
// lldb-command:print not_shadowed
// lldb-check:[...]$3 = 232
// lldb-command:print local_to_arm
// lldb-check:[...]$4 = 234
// lldb-command:continue
// lldb-command:print shadowed
// lldb-check:[...]$5 = 236
// lldb-command:print not_shadowed
// lldb-check:[...]$6 = 232
// lldb-command:continue
// lldb-command:print shadowed
// lldb-check:[...]$7 = 237
// lldb-command:print not_shadowed
// lldb-check:[...]$8 = 232
// lldb-command:print local_to_arm
// lldb-check:[...]$9 = 238
// lldb-command:continue
// lldb-command:print shadowed
// lldb-check:[...]$10 = 239
// lldb-command:print not_shadowed
// lldb-check:[...]$11 = 232
// lldb-command:continue
// lldb-command:print shadowed
// lldb-check:[...]$12 = 241
// lldb-command:print not_shadowed
// lldb-check:[...]$13 = 232
// lldb-command:continue
// lldb-command:print shadowed
// lldb-check:[...]$14 = 243
// lldb-command:print *local_to_arm
// lldb-check:[...]$15 = 244
// lldb-command:continue
// lldb-command:print shadowed
// lldb-check:[...]$16 = 231
// lldb-command:print not_shadowed
// lldb-check:[...]$17 = 232
// lldb-command:continue
struct Struct {
x: int,
y: int
......@@ -84,13 +145,13 @@ fn main() {
let shadowed = 231i;
let not_shadowed = 232i;
zzz();
zzz(); // #break
sentinel();
match (233i, 234i) {
(shadowed, local_to_arm) => {
zzz();
zzz(); // #break
sentinel();
}
}
......@@ -99,7 +160,7 @@ fn main() {
// with literal
(235, shadowed) => {
zzz();
zzz(); // #break
sentinel();
}
_ => {}
......@@ -108,7 +169,7 @@ fn main() {
match (Struct { x: 237, y: 238 }) {
Struct { x: shadowed, y: local_to_arm } => {
zzz();
zzz(); // #break
sentinel();
}
}
......@@ -117,7 +178,7 @@ fn main() {
// ignored field
Struct { x: shadowed, .. } => {
zzz();
zzz(); // #break
sentinel();
}
}
......@@ -126,7 +187,7 @@ fn main() {
// with literal
Struct { x: shadowed, y: 242 } => {
zzz();
zzz(); // #break
sentinel();
}
_ => {}
......@@ -135,12 +196,12 @@ fn main() {
match (243i, 244i) {
(shadowed, ref local_to_arm) => {
zzz();
zzz(); // #break
sentinel();
}
}
zzz();
zzz(); // #break
sentinel();
}
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -44,34 +47,63 @@
// gdb-check:$6 = false
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print x
// lldb-check:[...]$0 = false
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$1 = false
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$2 = 1000
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$3 = 2.5
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$4 = true
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$5 = false
// lldb-command:continue
fn main() {
let x = false;
zzz();
zzz(); // #break
sentinel();
let stack_closure: |int| = |x| {
zzz();
zzz(); // #break
sentinel();
let x = 2.5f64;
zzz();
zzz(); // #break
sentinel();
let x = true;
zzz();
zzz(); // #break
sentinel();
};
zzz();
zzz(); // #break
sentinel();
stack_closure(1000);
zzz();
zzz(); // #break
sentinel();
}
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -82,6 +85,66 @@
// gdb-check:$13 = 2
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// FIRST ITERATION
// lldb-command:print x
// lldb-check:[...]$0 = 0
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$1 = 1
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$2 = 101
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$3 = 101
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$4 = -987
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$5 = 101
// lldb-command:continue
// SECOND ITERATION
// lldb-command:print x
// lldb-check:[...]$6 = 1
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$7 = 2
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$8 = 102
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$9 = 102
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$10 = -987
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$11 = 102
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$12 = 2
// lldb-command:continue
fn main() {
let mut x = 0i;
......@@ -91,35 +154,35 @@ fn main() {
break;
}
zzz();
zzz(); // #break
sentinel();
x += 1;
zzz();
zzz(); // #break
sentinel();
// Shadow x
let x = x + 100;
zzz();
zzz(); // #break
sentinel();
// open scope within loop's top level scope
{
zzz();
zzz(); // #break
sentinel();
let x = -987i;
zzz();
zzz(); // #break
sentinel();
}
// Check that we get the x before the inner scope again
zzz();
zzz(); // #break
sentinel();
}
zzz();
zzz(); // #break
sentinel();
}
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -44,34 +47,63 @@
// gdb-check:$6 = false
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print x
// lldb-check:[...]$0 = false
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$1 = false
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$2 = 1000
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$3 = 2.5
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$4 = true
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$5 = false
// lldb-command:continue
fn main() {
let x = false;
zzz();
zzz(); // #break
sentinel();
let unique_closure: proc(int) = proc(x) {
zzz();
zzz(); // #break
sentinel();
let x = 2.5f64;
zzz();
zzz(); // #break
sentinel();
let x = true;
zzz();
zzz(); // #break
sentinel();
};
zzz();
zzz(); // #break
sentinel();
unique_closure(1000);
zzz();
zzz(); // #break
sentinel();
}
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -82,40 +85,101 @@
// gdb-check:$13 = 2
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// FIRST ITERATION
// lldb-command:print x
// lldb-check:[...]$0 = 0
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$1 = 1
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$2 = 101
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$3 = 101
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$4 = -987
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$5 = 101
// lldb-command:continue
// SECOND ITERATION
// lldb-command:print x
// lldb-check:[...]$6 = 1
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$7 = 2
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$8 = 102
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$9 = 102
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$10 = -987
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$11 = 102
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$12 = 2
// lldb-command:continue
fn main() {
let mut x = 0i;
while x < 2 {
zzz();
zzz(); // #break
sentinel();
x += 1;
zzz();
zzz(); // #break
sentinel();
// Shadow x
let x = x + 100;
zzz();
zzz(); // #break
sentinel();
// open scope within loop's top level scope
{
zzz();
zzz(); // #break
sentinel();
let x = -987i;
zzz();
zzz(); // #break
sentinel();
}
// Check that we get the x before the inner scope again
zzz();
zzz(); // #break
sentinel();
}
zzz();
zzz(); // #break
sentinel();
}
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -65,6 +68,56 @@
// gdb-check:$15 = 400
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print a
// lldb-check:[...]$0 = 10
// lldb-command:print b
// lldb-check:[...]$1 = 34
// lldb-command:continue
// lldb-command:print a
// lldb-check:[...]$2 = 890242
// lldb-command:print b
// lldb-check:[...]$3 = 34
// lldb-command:continue
// lldb-command:print a
// lldb-check:[...]$4 = 10
// lldb-command:print b
// lldb-check:[...]$5 = 34
// lldb-command:continue
// lldb-command:print a
// lldb-check:[...]$6 = 102
// lldb-command:print b
// lldb-check:[...]$7 = 34
// lldb-command:continue
// lldb-command:print a
// lldb-check:[...]$8 = 110
// lldb-command:print b
// lldb-check:[...]$9 = 34
// lldb-command:continue
// lldb-command:print a
// lldb-check:[...]$10 = 10
// lldb-command:print b
// lldb-check:[...]$11 = 34
// lldb-command:continue
// lldb-command:print a
// lldb-check:[...]$12 = 10
// lldb-command:print b
// lldb-check:[...]$13 = 34
// lldb-command:print c
// lldb-check:[...]$14 = 400
// lldb-command:continue
#![feature(macro_rules)]
macro_rules! trivial(
......@@ -78,7 +131,7 @@
macro_rules! new_scope(
() => ({
let a = 890242i;
zzz();
zzz(); // #break
sentinel();
})
)
......@@ -87,12 +140,12 @@
($e1:expr) => ({
let a = $e1 + 2;
zzz();
zzz(); // #break
sentinel();
let a = $e1 + 10;
zzz();
zzz(); // #break
sentinel();
})
)
......@@ -108,22 +161,22 @@ fn main() {
let a = trivial!(10i);
let b = no_new_scope!(33i);
zzz();
zzz(); // #break
sentinel();
new_scope!();
zzz();
zzz(); // #break
sentinel();
shadow_within_macro!(100i);
zzz();
zzz(); // #break
sentinel();
let c = dup_expr!(10i * 20);
zzz();
zzz(); // #break
sentinel();
}
......
......@@ -12,6 +12,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -211,6 +214,164 @@
// gdb-check:$57 = 10
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// STRUCT EXPRESSION
// lldb-command:print val
// lldb-check:[...]$0 = -1
// lldb-command:print ten
// lldb-check:[...]$1 = 10
// lldb-command:continue
// lldb-command:print val
// lldb-check:[...]$2 = 11
// lldb-command:print ten
// lldb-check:[...]$3 = 10
// lldb-command:continue
// lldb-command:print val
// lldb-check:[...]$4 = -1
// lldb-command:print ten
// lldb-check:[...]$5 = 10
// lldb-command:continue
// FUNCTION CALL
// lldb-command:print val
// lldb-check:[...]$6 = -1
// lldb-command:print ten
// lldb-check:[...]$7 = 10
// lldb-command:continue
// lldb-command:print val
// lldb-check:[...]$8 = 12
// lldb-command:print ten
// lldb-check:[...]$9 = 10
// lldb-command:continue
// lldb-command:print val
// lldb-check:[...]$10 = -1
// lldb-command:print ten
// lldb-check:[...]$11 = 10
// lldb-command:continue
// TUPLE EXPRESSION
// lldb-command:print val
// lldb-check:[...]$12 = -1
// lldb-command:print ten
// lldb-check:[...]$13 = 10
// lldb-command:continue
// lldb-command:print val
// lldb-check:[...]$14 = 13
// lldb-command:print ten
// lldb-check:[...]$15 = 10
// lldb-command:continue
// lldb-command:print val
// lldb-check:[...]$16 = -1
// lldb-command:print ten
// lldb-check:[...]$17 = 10
// lldb-command:continue
// VEC EXPRESSION
// lldb-command:print val
// lldb-check:[...]$18 = -1
// lldb-command:print ten
// lldb-check:[...]$19 = 10
// lldb-command:continue
// lldb-command:print val
// lldb-check:[...]$20 = 14
// lldb-command:print ten
// lldb-check:[...]$21 = 10
// lldb-command:continue
// lldb-command:print val
// lldb-check:[...]$22 = -1
// lldb-command:print ten
// lldb-check:[...]$23 = 10
// lldb-command:continue
// REPEAT VEC EXPRESSION
// lldb-command:print val
// lldb-check:[...]$24 = -1
// lldb-command:print ten
// lldb-check:[...]$25 = 10
// lldb-command:continue
// lldb-command:print val
// lldb-check:[...]$26 = 15
// lldb-command:print ten
// lldb-check:[...]$27 = 10
// lldb-command:continue
// lldb-command:print val
// lldb-check:[...]$28 = -1
// lldb-command:print ten
// lldb-check:[...]$29 = 10
// lldb-command:continue
// ASSIGNMENT EXPRESSION
// lldb-command:print val
// lldb-check:[...]$30 = -1
// lldb-command:print ten
// lldb-check:[...]$31 = 10
// lldb-command:continue
// lldb-command:print val
// lldb-check:[...]$32 = 16
// lldb-command:print ten
// lldb-check:[...]$33 = 10
// lldb-command:continue
// lldb-command:print val
// lldb-check:[...]$34 = -1
// lldb-command:print ten
// lldb-check:[...]$35 = 10
// lldb-command:continue
// ARITHMETIC EXPRESSION
// lldb-command:print val
// lldb-check:[...]$36 = -1
// lldb-command:print ten
// lldb-check:[...]$37 = 10
// lldb-command:continue
// lldb-command:print val
// lldb-check:[...]$38 = 17
// lldb-command:print ten
// lldb-check:[...]$39 = 10
// lldb-command:continue
// lldb-command:print val
// lldb-check:[...]$40 = -1
// lldb-command:print ten
// lldb-check:[...]$41 = 10
// lldb-command:continue
// INDEX EXPRESSION
// lldb-command:print val
// lldb-check:[...]$42 = -1
// lldb-command:print ten
// lldb-check:[...]$43 = 10
// lldb-command:continue
// lldb-command:print val
// lldb-check:[...]$44 = 18
// lldb-command:print ten
// lldb-check:[...]$45 = 10
// lldb-command:continue
// lldb-command:print val
// lldb-check:[...]$46 = -1
// lldb-command:print ten
// lldb-check:[...]$47 = 10
// lldb-command:continue
#![allow(unused_variable)]
#![allow(dead_assignment)]
......@@ -233,13 +394,13 @@ fn main() {
// surrounded by struct expression
let point = Point {
x: {
zzz();
zzz(); // #break
sentinel();
let val = ten + 1;
unsafe {MUT_INT = 1;};
zzz();
zzz(); // #break
sentinel();
val
......@@ -247,129 +408,129 @@ fn main() {
y: 10
};
zzz();
zzz(); // #break
sentinel();
// surrounded by function call
let _ = a_function({
zzz();
zzz(); // #break
sentinel();
let val = ten + 2;
unsafe {MUT_INT = 2;};
zzz();
zzz(); // #break
sentinel();
val
});
zzz();
zzz(); // #break
sentinel();
// surrounded by tup
let _ = ({
zzz();
zzz(); // #break
sentinel();
let val = ten + 3;
unsafe {MUT_INT = 3;};
zzz();
zzz(); // #break
sentinel();
val
}, 0i);
zzz();
zzz(); // #break
sentinel();
// surrounded by vec
let _ = [{
zzz();
zzz(); // #break
sentinel();
let val = ten + 4;
unsafe {MUT_INT = 4;};
zzz();
zzz(); // #break
sentinel();
val
}, 0, 0];
zzz();
zzz(); // #break
sentinel();
// surrounded by repeat vec
let _ = [{
zzz();
zzz(); // #break
sentinel();
let val = ten + 5;
unsafe {MUT_INT = 5;};
zzz();
zzz(); // #break
sentinel();
val
}, ..10];
zzz();
zzz(); // #break
sentinel();
// assignment expression
let mut var = 0;
var = {
zzz();
zzz(); // #break
sentinel();
let val = ten + 6;
unsafe {MUT_INT = 6;};
zzz();
zzz(); // #break
sentinel();
val
};
zzz();
zzz(); // #break
sentinel();
// arithmetic expression
var = 10 + -{
zzz();
zzz(); // #break
sentinel();
let val = ten + 7;
unsafe {MUT_INT = 7;};
zzz();
zzz(); // #break
sentinel();
val
} * 5;
zzz();
zzz(); // #break
sentinel();
// index expression
let a_vector = [10i, ..20];
let _ = a_vector[{
zzz();
zzz(); // #break
sentinel();
let val = ten + 8;
unsafe {MUT_INT = 8;};
zzz();
zzz(); // #break
sentinel();
val as uint
}];
zzz();
zzz(); // #break
sentinel();
}
......
......@@ -10,6 +10,8 @@
// ignore-android: FIXME(#10381)
// ignore-lldb
// compile-flags:--debuginfo=1
// Make sure functions have proper names
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
// gdb-command:finish
......@@ -24,6 +27,20 @@
// gdb-command:print univariant->val
// gdb-check:$3 = {{-9747455}}
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print the_a->val
// lldb-check:[...]$0 = TheA { x: 0, y: 8970181431921507452 }
// lldb-command:print the_b->val
// lldb-check:[...]$1 = TheB(0, 286331153, 286331153)
// lldb-command:print univariant->val
// lldb-check:[...]$2 = TheOnlyCase(-9747455)
#![allow(unused_variable)]
#![feature(struct_variant, managed_boxes)]
......@@ -62,7 +79,7 @@ fn main() {
let univariant = box(GC) TheOnlyCase(-9747455);
zzz();
zzz(); // #break
}
fn zzz() {()}
......@@ -13,6 +13,9 @@
#![feature(managed_boxes)]
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
// gdb-command:finish
......@@ -29,6 +32,24 @@
// gdb-command:print unique.ptr[3]->val
// gdb-check:$4 = 13
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print unique.ptr[0]->val
// lldb-check:[...]$0 = 10
// lldb-command:print unique.ptr[1]->val
// lldb-check:[...]$1 = 11
// lldb-command:print unique.ptr[2]->val
// lldb-check:[...]$2 = 12
// lldb-command:print unique.ptr[3]->val
// lldb-check:[...]$3 = 13
#![allow(unused_variable)]
use std::gc::{Gc, GC};
......@@ -37,7 +58,7 @@ fn main() {
let unique: Vec<Gc<i64>> = vec!(box(GC) 10, box(GC) 11, box(GC) 12, box(GC) 13);
zzz();
zzz(); // #break
}
fn zzz() {()}
......@@ -13,6 +13,9 @@
#![feature(managed_boxes)]
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:set print pretty off
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -27,6 +30,19 @@
// gdb-command:print managed_within_unique->y->val
// gdb-check:$3 = -4
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print *ordinary_unique
// lldb-check:[...]$0 = (-1, -2)
// lldb-command:print managed_within_unique->x
// lldb-check:[...]$1 = -3
// lldb-command:print managed_within_unique->y->val
// lldb-check:[...]$2 = -4
#![allow(unused_variable)]
use std::gc::{GC, Gc};
......@@ -41,7 +57,7 @@ fn main() {
let managed_within_unique = box ContainsManaged { x: -3, y: box(GC) -4i };
zzz();
zzz(); // #break
}
fn zzz() {()}
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -64,6 +67,56 @@
// gdb-check:$15 = -10
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// STACK BY REF
// lldb-command:print *self
// lldb-check:[...]$0 = Variant2(117901063)
// lldb-command:print arg1
// lldb-check:[...]$1 = -1
// lldb-command:print arg2
// lldb-check:[...]$2 = -2
// lldb-command:continue
// STACK BY VAL
// lldb-command:print self
// lldb-check:[...]$3 = Variant2(117901063)
// lldb-command:print arg1
// lldb-check:[...]$4 = -3
// lldb-command:print arg2
// lldb-check:[...]$5 = -4
// lldb-command:continue
// OWNED BY REF
// lldb-command:print *self
// lldb-check:[...]$6 = Variant1 { x: 1799, y: 1799 }
// lldb-command:print arg1
// lldb-check:[...]$7 = -5
// lldb-command:print arg2
// lldb-check:[...]$8 = -6
// lldb-command:continue
// OWNED BY VAL
// lldb-command:print self
// lldb-check:[...]$9 = Variant1 { x: 1799, y: 1799 }
// lldb-command:print arg1
// lldb-check:[...]$10 = -7
// lldb-command:print arg2
// lldb-check:[...]$11 = -8
// lldb-command:continue
// OWNED MOVED
// lldb-command:print *self
// lldb-check:[...]$12 = Variant1 { x: 1799, y: 1799 }
// lldb-command:print arg1
// lldb-check:[...]$13 = -9
// lldb-command:print arg2
// lldb-check:[...]$14 = -10
// lldb-command:continue
#![feature(struct_variant)]
enum Enum {
......@@ -74,17 +127,17 @@ enum Enum {
impl Enum {
fn self_by_ref(&self, arg1: int, arg2: int) -> int {
zzz();
zzz(); // #break
arg1 + arg2
}
fn self_by_val(self, arg1: int, arg2: int) -> int {
zzz();
zzz(); // #break
arg1 + arg2
}
fn self_owned(~self, arg1: int, arg2: int) -> int {
zzz();
zzz(); // #break
arg1 + arg2
}
}
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -64,6 +67,57 @@
// gdb-check:$15 = -10
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// STACK BY REF
// lldb-command:print *self
// lldb-check:[...]$0 = Struct<(u32, i32)> { x: (8888, -8888) }
// lldb-command:print arg1
// lldb-check:[...]$1 = -1
// lldb-command:print arg2
// lldb-check:[...]$2 = -2
// lldb-command:continue
// STACK BY VAL
// lldb-command:print self
// lldb-check:[...]$3 = Struct<(u32, i32)> { x: (8888, -8888) }
// lldb-command:print arg1
// lldb-check:[...]$4 = -3
// lldb-command:print arg2
// lldb-check:[...]$5 = -4
// lldb-command:continue
// OWNED BY REF
// lldb-command:print *self
// lldb-check:[...]$6 = Struct<f64> { x: 1234.5 }
// lldb-command:print arg1
// lldb-check:[...]$7 = -5
// lldb-command:print arg2
// lldb-check:[...]$8 = -6
// lldb-command:continue
// OWNED BY VAL
// lldb-command:print self
// lldb-check:[...]$9 = Struct<f64> { x: 1234.5 }
// lldb-command:print arg1
// lldb-check:[...]$10 = -7
// lldb-command:print arg2
// lldb-check:[...]$11 = -8
// lldb-command:continue
// OWNED MOVED
// lldb-command:print *self
// lldb-check:[...]$12 = Struct<f64> { x: 1234.5 }
// lldb-command:print arg1
// lldb-check:[...]$13 = -9
// lldb-command:print arg2
// lldb-check:[...]$14 = -10
// lldb-command:continue
struct Struct<T> {
x: T
}
......@@ -71,17 +125,17 @@ struct Struct<T> {
impl<T> Struct<T> {
fn self_by_ref(&self, arg1: int, arg2: int) -> int {
zzz();
zzz(); // #break
arg1 + arg2
}
fn self_by_val(self, arg1: int, arg2: int) -> int {
zzz();
zzz(); // #break
arg1 + arg2
}
fn self_owned(~self, arg1: int, arg2: int) -> int {
zzz();
zzz(); // #break
arg1 + arg2
}
}
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -64,6 +67,56 @@
// gdb-check:$15 = -10
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// STACK BY REF
// lldb-command:print *self
// lldb-check:[...]$0 = Struct { x: 100 }
// lldb-command:print arg1
// lldb-check:[...]$1 = -1
// lldb-command:print arg2
// lldb-check:[...]$2 = -2
// lldb-command:continue
// STACK BY VAL
// lldb-command:print self
// lldb-check:[...]$3 = Struct { x: 100 }
// lldb-command:print arg1
// lldb-check:[...]$4 = -3
// lldb-command:print arg2
// lldb-check:[...]$5 = -4
// lldb-command:continue
// OWNED BY REF
// lldb-command:print *self
// lldb-check:[...]$6 = Struct { x: 200 }
// lldb-command:print arg1
// lldb-check:[...]$7 = -5
// lldb-command:print arg2
// lldb-check:[...]$8 = -6
// lldb-command:continue
// OWNED BY VAL
// lldb-command:print self
// lldb-check:[...]$9 = Struct { x: 200 }
// lldb-command:print arg1
// lldb-check:[...]$10 = -7
// lldb-command:print arg2
// lldb-check:[...]$11 = -8
// lldb-command:continue
// OWNED MOVED
// lldb-command:print *self
// lldb-check:[...]$12 = Struct { x: 200 }
// lldb-command:print arg1
// lldb-check:[...]$13 = -9
// lldb-command:print arg2
// lldb-check:[...]$14 = -10
// lldb-command:continue
struct Struct {
x: int
}
......@@ -71,17 +124,17 @@ struct Struct {
impl Struct {
fn self_by_ref(&self, arg1: int, arg2: int) -> int {
zzz();
zzz(); // #break
self.x + arg1 + arg2
}
fn self_by_val(self, arg1: int, arg2: int) -> int {
zzz();
zzz(); // #break
self.x + arg1 + arg2
}
fn self_owned(~self, arg1: int, arg2: int) -> int {
zzz();
zzz(); // #break
self.x + arg1 + arg2
}
}
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -64,6 +67,56 @@
// gdb-check:$15 = -10
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// STACK BY REF
// lldb-command:print *self
// lldb-check:[...]$0 = Struct { x: 100 }
// lldb-command:print arg1
// lldb-check:[...]$1 = -1
// lldb-command:print arg2
// lldb-check:[...]$2 = -2
// lldb-command:continue
// STACK BY VAL
// lldb-command:print self
// lldb-check:[...]$3 = Struct { x: 100 }
// lldb-command:print arg1
// lldb-check:[...]$4 = -3
// lldb-command:print arg2
// lldb-check:[...]$5 = -4
// lldb-command:continue
// OWNED BY REF
// lldb-command:print *self
// lldb-check:[...]$6 = Struct { x: 200 }
// lldb-command:print arg1
// lldb-check:[...]$7 = -5
// lldb-command:print arg2
// lldb-check:[...]$8 = -6
// lldb-command:continue
// OWNED BY VAL
// lldb-command:print self
// lldb-check:[...]$9 = Struct { x: 200 }
// lldb-command:print arg1
// lldb-check:[...]$10 = -7
// lldb-command:print arg2
// lldb-check:[...]$11 = -8
// lldb-command:continue
// OWNED MOVED
// lldb-command:print *self
// lldb-check:[...]$12 = Struct { x: 200 }
// lldb-command:print arg1
// lldb-check:[...]$13 = -9
// lldb-command:print arg2
// lldb-check:[...]$14 = -10
// lldb-command:continue
struct Struct {
x: int
}
......@@ -77,17 +130,17 @@ trait Trait {
impl Trait for Struct {
fn self_by_ref(&self, arg1: int, arg2: int) -> int {
zzz();
zzz(); // #break
self.x + arg1 + arg2
}
fn self_by_val(self, arg1: int, arg2: int) -> int {
zzz();
zzz(); // #break
self.x + arg1 + arg2
}
fn self_owned(~self, arg1: int, arg2: int) -> int {
zzz();
zzz(); // #break
self.x + arg1 + arg2
}
}
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -64,22 +67,72 @@
// gdb-check:$15 = -10
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// STACK BY REF
// lldb-command:print *self
// lldb-check:[...]$0 = TupleStruct(100, -100.5)
// lldb-command:print arg1
// lldb-check:[...]$1 = -1
// lldb-command:print arg2
// lldb-check:[...]$2 = -2
// lldb-command:continue
// STACK BY VAL
// lldb-command:print self
// lldb-check:[...]$3 = TupleStruct(100, -100.5)
// lldb-command:print arg1
// lldb-check:[...]$4 = -3
// lldb-command:print arg2
// lldb-check:[...]$5 = -4
// lldb-command:continue
// OWNED BY REF
// lldb-command:print *self
// lldb-check:[...]$6 = TupleStruct(200, -200.5)
// lldb-command:print arg1
// lldb-check:[...]$7 = -5
// lldb-command:print arg2
// lldb-check:[...]$8 = -6
// lldb-command:continue
// OWNED BY VAL
// lldb-command:print self
// lldb-check:[...]$9 = TupleStruct(200, -200.5)
// lldb-command:print arg1
// lldb-check:[...]$10 = -7
// lldb-command:print arg2
// lldb-check:[...]$11 = -8
// lldb-command:continue
// OWNED MOVED
// lldb-command:print *self
// lldb-check:[...]$12 = TupleStruct(200, -200.5)
// lldb-command:print arg1
// lldb-check:[...]$13 = -9
// lldb-command:print arg2
// lldb-check:[...]$14 = -10
// lldb-command:continue
struct TupleStruct(int, f64);
impl TupleStruct {
fn self_by_ref(&self, arg1: int, arg2: int) -> int {
zzz();
zzz(); // #break
arg1 + arg2
}
fn self_by_val(self, arg1: int, arg2: int) -> int {
zzz();
zzz(); // #break
arg1 + arg2
}
fn self_owned(~self, arg1: int, arg2: int) -> int {
zzz();
zzz(); // #break
arg1 + arg2
}
}
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
// gdb-command:finish
......@@ -28,22 +31,38 @@
// gdb-command:print abc
// gdb-check:$3 = 30303
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print abc
// lldb-check:[...]$0 = 10101
// lldb-command:continue
// lldb-command:print abc
// lldb-check:[...]$1 = 20202
// lldb-command:continue
// lldb-command:print abc
// lldb-check:[...]$2 = 30303
#![allow(unused_variable)]
fn function_one() {
let abc = 10101i;
zzz();
zzz(); // #break
}
fn function_two() {
let abc = 20202i;
zzz();
zzz(); // #break
}
fn function_three() {
let abc = 30303i;
zzz();
zzz(); // #break
}
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
// gdb-command:finish
......@@ -28,22 +31,38 @@
// gdb-command:print c
// gdb-check:$3 = 30303
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print a
// lldb-check:[...]$0 = 10101
// lldb-command:continue
// lldb-command:print b
// lldb-check:[...]$1 = 20202
// lldb-command:continue
// lldb-command:print c
// lldb-check:[...]$2 = 30303
#![allow(unused_variable)]
fn function_one() {
let a = 10101i;
zzz();
zzz(); // #break
}
fn function_two() {
let b = 20202i;
zzz();
zzz(); // #break
}
fn function_three() {
let c = 30303i;
zzz();
zzz(); // #break
}
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -56,38 +59,79 @@
// gdb-check:$12 = 20
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print x
// lldb-check:[...]$0 = false
// lldb-command:print y
// lldb-check:[...]$1 = true
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$2 = 10
// lldb-command:print y
// lldb-check:[...]$3 = true
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$4 = 10.5
// lldb-command:print y
// lldb-check:[...]$5 = 20
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$6 = true
// lldb-command:print y
// lldb-check:[...]$7 = 2220
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$8 = 203203.5
// lldb-command:print y
// lldb-check:[...]$9 = 2220
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$10 = 10.5
// lldb-command:print y
// lldb-check:[...]$11 = 20
// lldb-command:continue
fn main() {
let x = false;
let y = true;
zzz();
zzz(); // #break
sentinel();
let x = 10i;
zzz();
zzz(); // #break
sentinel();
let x = 10.5f64;
let y = 20i;
zzz();
zzz(); // #break
sentinel();
{
let x = true;
let y = 2220i;
zzz();
zzz(); // #break
sentinel();
let x = 203203.5f64;
zzz();
zzz(); // #break
sentinel();
}
zzz();
zzz(); // #break
sentinel();
}
......
......@@ -8,6 +8,9 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// LLDB can't handle zero-sized values
// ignore-lldb
// ignore-android: FIXME(#10381)
// compile-flags:-g
......
......@@ -12,6 +12,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
// gdb-command:finish
......@@ -25,17 +28,41 @@
// gdb-command:print full
// gdb-check:$3 = {RUST$ENCODED$ENUM$1$Empty = {454545, 0x87654321, 9988}}
// gdb-command:print empty->discr
// gdb-command:print empty_gdb->discr
// gdb-check:$4 = (int *) 0x0
// gdb-command:print droid
// gdb-check:$5 = {RUST$ENCODED$ENUM$2$Void = {id = 675675, range = 10000001, internals = 0x43218765}}
// gdb-command:print void_droid->internals
// gdb-command:print void_droid_gdb->internals
// gdb-check:$6 = (int *) 0x0
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print some
// lldb-check:[...]$0 = Some(&0x12345678)
// lldb-command:print none
// lldb-check:[...]$1 = None
// lldb-command:print full
// lldb-check:[...]$2 = Full(454545, &0x87654321, 9988)
// lldb-command:print empty
// lldb-check:[...]$3 = Empty
// lldb-command:print droid
// lldb-check:[...]$4 = Droid { id: 675675, range: 10000001, internals: &0x43218765 }
// lldb-command:print void_droid
// lldb-check:[...]$5 = Void
#![feature(struct_variant)]
// If a struct has exactly two variants, one of them is empty, and the other one
......@@ -77,8 +104,8 @@ fn main() {
let full = Full(454545, unsafe { std::mem::transmute(0x87654321u) }, 9988);
let int_val = 0i;
let empty: &MoreFieldsRepr = unsafe { std::mem::transmute(&Empty) };
let empty = Empty;
let empty_gdb: &MoreFieldsRepr = unsafe { std::mem::transmute(&Empty) };
let droid = Droid {
id: 675675,
......@@ -86,9 +113,10 @@ fn main() {
internals: unsafe { std::mem::transmute(0x43218765u) }
};
let void_droid: &NamedFieldsRepr = unsafe { std::mem::transmute(&Void) };
let void_droid = Void;
let void_droid_gdb: &NamedFieldsRepr = unsafe { std::mem::transmute(&Void) };
zzz();
zzz(); // #break
}
fn zzz() {()}
......@@ -12,6 +12,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:set print pretty off
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -42,6 +45,36 @@
// gdb-command:print deeplyNested
// gdb-check:$8 = {a = {a = 1, b = {x = 2, y = 3, z = 4}, c = 5, d = {x = 6, y = 7, z = 8}}, b = {a = 9, b = {x = 10, y = 11, z = 12}, c = {x = 13, y = 14, z = 15}, d = 16}, c = {a = 17, b = {x = 18, y = 19, z = 20}, c = 21, d = {x = 22, y = 23, z = 24}}, d = {a = 25, b = {x = 26, y = 27, z = 28}, c = 29, d = {x = 30, y = 31, z = 32}}, e = {a = 33, b = {x = 34, y = 35, z = 36}, c = {x = 37, y = 38, z = 39}, d = 40}, f = {a = 41, b = {x = 42, y = 43, z = 44}, c = 45, d = {x = 46, y = 47, z = 48}}}
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print packed
// lldb-check:[...]$0 = Packed { x: 123, y: 234, z: 345 }
// lldb-command:print packedInPacked
// lldb-check:[...]$1 = PackedInPacked { a: 1111, b: Packed { x: 2222, y: 3333, z: 4444 }, c: 5555, d: Packed { x: 6666, y: 7777, z: 8888 } }
// lldb-command:print packedInUnpacked
// lldb-check:[...]$2 = PackedInUnpacked { a: -1111, b: Packed { x: -2222, y: -3333, z: -4444 }, c: -5555, d: Packed { x: -6666, y: -7777, z: -8888 } }
// lldb-command:print unpackedInPacked
// lldb-check:[...]$3 = UnpackedInPacked { a: 987, b: Unpacked { x: 876, y: 765, z: 654 }, c: Unpacked { x: 543, y: 432, z: 321 }, d: 210 }
// lldb-command:print packedInPackedWithDrop
// lldb-check:[...]$4 = PackedInPackedWithDrop { a: 11, b: Packed { x: 22, y: 33, z: 44 }, c: 55, d: Packed { x: 66, y: 77, z: 88 } }
// lldb-command:print packedInUnpackedWithDrop
// lldb-check:[...]$5 = PackedInUnpackedWithDrop { a: -11, b: Packed { x: -22, y: -33, z: -44 }, c: -55, d: Packed { x: -66, y: -77, z: -88 } }
// lldb-command:print unpackedInPackedWithDrop
// lldb-check:[...]$6 = UnpackedInPackedWithDrop { a: 98, b: Unpacked { x: 87, y: 76, z: 65 }, c: Unpacked { x: 54, y: 43, z: 32 }, d: 21 }
// lldb-command:print deeplyNested
// lldb-check:[...]$7 = DeeplyNested { a: PackedInPacked { a: 1, b: Packed { x: 2, y: 3, z: 4 }, c: 5, d: Packed { x: 6, y: 7, z: 8 } }, b: UnpackedInPackedWithDrop { a: 9, b: Unpacked { x: 10, y: 11, z: 12 }, c: Unpacked { x: 13, y: 14, z: 15 }, d: 16 }, c: PackedInUnpacked { a: 17, b: Packed { x: 18, y: 19, z: 20 }, c: 21, d: Packed { x: 22, y: 23, z: 24 } }, d: PackedInUnpackedWithDrop { a: 25, b: Packed { x: 26, y: 27, z: 28 }, c: 29, d: Packed { x: 30, y: 31, z: 32 } }, e: UnpackedInPacked { a: 33, b: Unpacked { x: 34, y: 35, z: 36 }, c: Unpacked { x: 37, y: 38, z: 39 }, d: 40 }, f: PackedInPackedWithDrop { a: 41, b: Packed { x: 42, y: 43, z: 44 }, c: 45, d: Packed { x: 46, y: 47, z: 48 } } }
#![allow(unused_variable)]
#[packed]
......@@ -216,7 +249,7 @@ fn main() {
}
};
zzz();
zzz(); // #break
}
fn zzz() {()}
......@@ -12,6 +12,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:set print pretty off
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -35,6 +38,29 @@
// gdb-command:print sizeof(packedInPacked)
// gdb-check:$6 = 40
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print packed
// lldb-check:[...]$0 = Packed { x: 123, y: 234, z: 345 }
// lldb-command:print packedInPacked
// lldb-check:[...]$1 = PackedInPacked { a: 1111, b: Packed { x: 2222, y: 3333, z: 4444 }, c: 5555, d: Packed { x: 6666, y: 7777, z: 8888 } }
// lldb-command:print packedInUnpacked
// lldb-check:[...]$2 = PackedInUnpacked { a: -1111, b: Packed { x: -2222, y: -3333, z: -4444 }, c: -5555, d: Packed { x: -6666, y: -7777, z: -8888 } }
// lldb-command:print unpackedInPacked
// lldb-check:[...]$3 = UnpackedInPacked { a: 987, b: Unpacked { x: 876, y: 765, z: 654, w: 543 }, c: Unpacked { x: 432, y: 321, z: 210, w: 109 }, d: -98 }
// lldb-command:print sizeof(packed)
// lldb-check:[...]$4 = 14
// lldb-command:print sizeof(packedInPacked)
// lldb-check:[...]$5 = 40
#![allow(unused_variable)]
#[packed]
......@@ -101,7 +127,7 @@ fn main() {
d: -98
};
zzz();
zzz(); // #break
}
fn zzz() {()}
......@@ -10,6 +10,8 @@
// ignore-android: FIXME(#10381)
// ignore-lldb
// compile-flags:-g
// gdb-command:run
......
......@@ -10,6 +10,7 @@
// ignore-tidy-linelength
// ignore-android: FIXME(#10381)
// ignore-lldb
#![feature(managed_boxes)]
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -64,23 +67,74 @@
// gdb-check:$15 = -10
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// STACK BY REF
// lldb-command:print *self
// lldb-check:[...]$0 = Struct { x: 100 }
// lldb-command:print arg1
// lldb-check:[...]$1 = -1
// lldb-command:print arg2
// lldb-check:[...]$2 = -2
// lldb-command:continue
// STACK BY VAL
// lldb-command:print self
// lldb-check:[...]$3 = Struct { x: 100 }
// lldb-command:print arg1
// lldb-check:[...]$4 = -3
// lldb-command:print arg2
// lldb-check:[...]$5 = -4
// lldb-command:continue
// OWNED BY REF
// lldb-command:print *self
// lldb-check:[...]$6 = Struct { x: 200 }
// lldb-command:print arg1
// lldb-check:[...]$7 = -5
// lldb-command:print arg2
// lldb-check:[...]$8 = -6
// lldb-command:continue
// OWNED BY VAL
// lldb-command:print self
// lldb-check:[...]$9 = Struct { x: 200 }
// lldb-command:print arg1
// lldb-check:[...]$10 = -7
// lldb-command:print arg2
// lldb-check:[...]$11 = -8
// lldb-command:continue
// OWNED MOVED
// lldb-command:print *self
// lldb-check:[...]$12 = Struct { x: 200 }
// lldb-command:print arg1
// lldb-check:[...]$13 = -9
// lldb-command:print arg2
// lldb-check:[...]$14 = -10
// lldb-command:continue
struct Struct {
x: int
}
trait Trait {
fn self_by_ref(&self, arg1: int, arg2: int) -> int {
zzz();
zzz(); // #break
arg1 + arg2
}
fn self_by_val(self, arg1: int, arg2: int) -> int {
zzz();
zzz(); // #break
arg1 + arg2
}
fn self_owned(~self, arg1: int, arg2: int) -> int {
zzz();
zzz(); // #break
arg1 + arg2
}
}
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -20,8 +23,8 @@
// gdb-check:$1 = {x = 987}
// gdb-command:print arg1
// gdb-check:$2 = -1
// gdb-command:print/d arg2
// gdb-check:$3 = -2
// gdb-command:print arg2
// gdb-check:$3 = 2
// gdb-command:continue
// STACK BY VAL
......@@ -64,6 +67,57 @@
// gdb-check:$15 = -10.5
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// STACK BY REF
// lldb-command:print *self
// lldb-check:[...]$0 = Struct { x: 987 }
// lldb-command:print arg1
// lldb-check:[...]$1 = -1
// lldb-command:print arg2
// lldb-check:[...]$2 = 2
// lldb-command:continue
// STACK BY VAL
// lldb-command:print self
// lldb-check:[...]$3 = Struct { x: 987 }
// lldb-command:print arg1
// lldb-check:[...]$4 = -3
// lldb-command:print arg2
// lldb-check:[...]$5 = -4
// lldb-command:continue
// OWNED BY REF
// lldb-command:print *self
// lldb-check:[...]$6 = Struct { x: 879 }
// lldb-command:print arg1
// lldb-check:[...]$7 = -5
// lldb-command:print arg2
// lldb-check:[...]$8 = -6
// lldb-command:continue
// OWNED BY VAL
// lldb-command:print self
// lldb-check:[...]$9 = Struct { x: 879 }
// lldb-command:print arg1
// lldb-check:[...]$10 = -7
// lldb-command:print arg2
// lldb-check:[...]$11 = -8
// lldb-command:continue
// OWNED MOVED
// lldb-command:print *self
// lldb-check:[...]$12 = Struct { x: 879 }
// lldb-command:print arg1
// lldb-check:[...]$13 = -9
// lldb-command:print arg2
// lldb-check:[...]$14 = -10.5
// lldb-command:continue
struct Struct {
x: int
}
......@@ -71,17 +125,17 @@ struct Struct {
trait Trait {
fn self_by_ref<T>(&self, arg1: int, arg2: T) -> int {
zzz();
zzz(); // #break
arg1
}
fn self_by_val<T>(self, arg1: int, arg2: T) -> int {
zzz();
zzz(); // #break
arg1
}
fn self_owned<T>(~self, arg1: int, arg2: T) -> int {
zzz();
zzz(); // #break
arg1
}
}
......@@ -90,7 +144,7 @@ impl Trait for Struct {}
fn main() {
let stack = Struct { x: 987 };
let _ = stack.self_by_ref(-1, -2_i8);
let _ = stack.self_by_ref(-1, 2_u16);
let _ = stack.self_by_val(-3, -4_i16);
let owned = box Struct { x: 879 };
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -35,19 +38,42 @@
// gdb-check:$6 = 20
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print x
// lldb-check:[...]$0 = false
// lldb-command:print y
// lldb-check:[...]$1 = true
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$2 = 10
// lldb-command:print y
// lldb-check:[...]$3 = true
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$4 = 10.5
// lldb-command:print y
// lldb-check:[...]$5 = 20
// lldb-command:continue
fn a_function(x: bool, y: bool) {
zzz();
zzz(); // #break
sentinel();
let x = 10i;
zzz();
zzz(); // #break
sentinel();
let x = 10.5f64;
let y = 20i;
zzz();
zzz(); // #break
sentinel();
}
......
......@@ -11,6 +11,9 @@
// ignore-android: FIXME(#10381)
// compile-flags:-g
// === GDB TESTS ===================================================================================
// gdb-command:rbreak zzz
// gdb-command:run
......@@ -35,22 +38,45 @@
// gdb-check:$6 = 20
// gdb-command:continue
// === LLDB TESTS ==================================================================================
// lldb-command:run
// lldb-command:print x
// lldb-check:[...]$0 = false
// lldb-command:print y
// lldb-check:[...]$1 = true
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$2 = 10
// lldb-command:print y
// lldb-check:[...]$3 = true
// lldb-command:continue
// lldb-command:print x
// lldb-check:[...]$4 = 10.5
// lldb-command:print y
// lldb-check:[...]$5 = 20
// lldb-command:continue
fn main() {
let x = false;
let y = true;
zzz();
zzz(); // #break
sentinel();
let x = 10i;
zzz();
zzz(); // #break
sentinel();
let x = 10.5f64;
let y = 20i;
zzz();
zzz(); // #break
sentinel();
}
......
......@@ -8,6 +8,9 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// Need a fix for LLDB first...
// ignore-lldb
// ignore-android: FIXME(#10381)
// compile-flags:-g
......
此差异已折叠。
此差异已折叠。
some text to include in another file as string 2
some text to include in another file as string 2.
\ No newline at end of file
some text to include in another file as string 3
some text to include in another file as string 3..
\ No newline at end of file
......@@ -10,6 +10,8 @@
// ignore-android: FIXME(#10381)
// ignore-lldb
// compile-flags:-g
// gdb-command:run
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册