From 93edb7c17bd4d2d56b0f1f510de5f820cf61bb5f Mon Sep 17 00:00:00 2001 From: Michael Woerister Date: Thu, 5 Feb 2015 18:26:58 +0100 Subject: debuginfo: Fix problem with debug locations of constants in match patterns. --- src/test/debuginfo/constant-in-match-pattern.rs | 92 +++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 src/test/debuginfo/constant-in-match-pattern.rs (limited to 'src/test/debuginfo') diff --git a/src/test/debuginfo/constant-in-match-pattern.rs b/src/test/debuginfo/constant-in-match-pattern.rs new file mode 100644 index 00000000000..487c69a85d6 --- /dev/null +++ b/src/test/debuginfo/constant-in-match-pattern.rs @@ -0,0 +1,92 @@ +// Copyright 2013-2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// ignore-android: FIXME(#10381) +// min-lldb-version: 310 + +// compile-flags:-g + +#![allow(unused_variables)] +#![allow(dead_code)] +#![omit_gdb_pretty_printer_section] + +// This test makes sure that the compiler doesn't crash when trying to assign +// debug locations to 'constant' patterns in match expressions. + +const CONSTANT: u64 = 3; + +struct Struct { + a: isize, + b: usize, +} +const STRUCT: Struct = Struct { a: 1, b: 2 }; + +struct TupleStruct(u32); +const TUPLE_STRUCT: TupleStruct = TupleStruct(4); + +enum Enum { + Variant1(char), + Variant2 { a: u8 }, + Variant3 +} +const VARIANT1: Enum = Enum::Variant1('v'); +const VARIANT2: Enum = Enum::Variant2 { a: 2 }; +const VARIANT3: Enum = Enum::Variant3; + +const STRING: &'static str = "String"; + +fn main() { + + match 1 { + CONSTANT => {} + _ => {} + }; + + // if let 3 = CONSTANT {} + + match (Struct { a: 2, b: 2 }) { + STRUCT => {} + _ => {} + }; + + // if let STRUCT = STRUCT {} + + match TupleStruct(3) { + TUPLE_STRUCT => {} + _ => {} + }; + + // if let TupleStruct(4) = TUPLE_STRUCT {} + + match VARIANT3 { + VARIANT1 => {}, + VARIANT2 => {}, + VARIANT3 => {}, + _ => {} + }; + + match (VARIANT3, VARIANT2) { + (VARIANT1, VARIANT3) => {}, + (VARIANT2, VARIANT2) => {}, + (VARIANT3, VARIANT1) => {}, + _ => {} + }; + + // if let VARIANT1 = Enum::Variant3 {} + // if let VARIANT2 = Enum::Variant3 {} + // if let VARIANT3 = Enum::Variant3 {} + + match "abc" { + STRING => {}, + _ => {} + } + + if let STRING = "def" {} +} -- cgit 1.4.1-3-g733a5