diff --git a/src/test/run-make/graphviz-flowgraph/Makefile b/src/test/run-make/graphviz-flowgraph/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..fedcc89cd429fb3d8dfebf90bb3a9c1287995bc9 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/Makefile @@ -0,0 +1,37 @@ +-include ../tools.mk + +FILES=f00.rs f01.rs f02.rs f03.rs f04.rs f05.rs f06.rs f07.rs \ + f08.rs f09.rs f10.rs f11.rs f12.rs f13.rs f14.rs f15.rs \ + f16.rs f17.rs f18.rs f19.rs f20.rs f21.rs f22.rs + + +# all: $(patsubst %.rs,$(TMPDIR)/%.dot,$(FILES)) $(patsubst %.rs,$(TMPDIR)/%.pp,$(FILES)) +all: $(patsubst %.rs,$(TMPDIR)/%.check,$(FILES)) + + +RUSTC_LIB=$(RUSTC) --crate-type=lib + +define FIND_LAST_BLOCK +LASTBLOCKNUM_$(1) := $(shell $(RUSTC_LIB) --pretty=expanded,identified $(1) \ + | grep block + | tail -1 + | sed -e 's@.*/\* block \([0-9]*\) \*/.*@\1@') +endef + +ifeq ($(findstring rustc,$(RUSTC)),) +$(error Must set RUSTC) +endif + +$(TMPDIR)/%.pp: %.rs + $(RUSTC_LIB) --pretty=expanded,identified $< -o $@ + +$(TMPDIR)/%.dot: %.rs + $(eval $(call FIND_LAST_BLOCK,$<)) + $(RUSTC_LIB) --pretty flowgraph=$(LASTBLOCKNUM_$<) $< -o $@.tmp + cat $@.tmp | sed -e 's@ (id=[0-9]*)@@g' \ + -e 's@\[label=""\]@@' \ + -e 's@digraph [a-zA-Z0-9_]* @digraph block @' \ + > $@ + +$(TMPDIR)/%.check: %.rs $(TMPDIR)/%.dot + diff -u $(patsubst %.rs,$(TMPDIR)/%.dot,$<) $(patsubst %.rs,%.dot-expected.dot,$<) diff --git a/src/test/run-make/graphviz-flowgraph/f00.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f00.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..f699771ef24c6da108174a5bc4e4a98fc00f4df3 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f00.dot-expected.dot @@ -0,0 +1,7 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="block { }"]; + N0 -> N2; + N2 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f00.rs b/src/test/run-make/graphviz-flowgraph/f00.rs new file mode 100644 index 0000000000000000000000000000000000000000..4e7fc7ea9b084cee1eb5bc4012572b97dc8429b6 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f00.rs @@ -0,0 +1,13 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn empty_0() { + +} diff --git a/src/test/run-make/graphviz-flowgraph/f01.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f01.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..9d8411cfc58df447b93f9755e08cc1cecb9dd8b3 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f01.dot-expected.dot @@ -0,0 +1,9 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr 1"]; + N3[label="block { 1; }"]; + N0 -> N2; + N2 -> N3; + N3 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f01.rs b/src/test/run-make/graphviz-flowgraph/f01.rs new file mode 100644 index 0000000000000000000000000000000000000000..231aab69e50d95cd17f843f9047e6aab15ffc0c8 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f01.rs @@ -0,0 +1,13 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn lit_1() { + 1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f02.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f02.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..ada3f091808b8d18d8c629a1c9eda6afab3a3b52 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f02.dot-expected.dot @@ -0,0 +1,9 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="local _x"]; + N3[label="block { let _x: int; }"]; + N0 -> N2; + N2 -> N3; + N3 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f02.rs b/src/test/run-make/graphviz-flowgraph/f02.rs new file mode 100644 index 0000000000000000000000000000000000000000..3cdd73a49e18e99514cedc16a726af2e1e29e34f --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f02.rs @@ -0,0 +1,13 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn decl_x_2() { + let _x : int; +} diff --git a/src/test/run-make/graphviz-flowgraph/f03.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f03.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..aff430459e87229e65f80db04ca1fbb536f5460a --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f03.dot-expected.dot @@ -0,0 +1,13 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr 3"]; + N3[label="expr 33"]; + N4[label="expr 3 + 33"]; + N5[label="block { 3 + 33; }"]; + N0 -> N2; + N2 -> N3; + N3 -> N4; + N4 -> N5; + N5 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f03.rs b/src/test/run-make/graphviz-flowgraph/f03.rs new file mode 100644 index 0000000000000000000000000000000000000000..8b172c0a10512655dfa0b6dc97b038f718b038ce --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f03.rs @@ -0,0 +1,13 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn expr_add_3() { + 3 + 33; +} diff --git a/src/test/run-make/graphviz-flowgraph/f04.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f04.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..adcc582c73387c646d5ea4957934e16ba8391a45 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f04.dot-expected.dot @@ -0,0 +1,11 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr 4"]; + N3[label="local _x"]; + N4[label="block { let _x = 4; }"]; + N0 -> N2; + N2 -> N3; + N3 -> N4; + N4 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f04.rs b/src/test/run-make/graphviz-flowgraph/f04.rs new file mode 100644 index 0000000000000000000000000000000000000000..2a0ac8ac9e57080224887d5891db71bc5a6b72c4 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f04.rs @@ -0,0 +1,13 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn pat_id_4() { + let _x = 4; +} diff --git a/src/test/run-make/graphviz-flowgraph/f05.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f05.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..2d52c14da6246aa5af033f20884922ec8bd3af34 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f05.dot-expected.dot @@ -0,0 +1,19 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr 5"]; + N3[label="expr 55"]; + N4[label="expr (5, 55)"]; + N5[label="local _x"]; + N6[label="local _y"]; + N7[label="pat (_x, _y)"]; + N8[label="block { let (_x, _y) = (5, 55); }"]; + N0 -> N2; + N2 -> N3; + N3 -> N4; + N4 -> N5; + N5 -> N6; + N6 -> N7; + N7 -> N8; + N8 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f05.rs b/src/test/run-make/graphviz-flowgraph/f05.rs new file mode 100644 index 0000000000000000000000000000000000000000..616d822bed07bf61283be397aff1ba42d61790c7 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f05.rs @@ -0,0 +1,13 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn pat_tup_5() { + let (_x, _y) = (5, 55); +} diff --git a/src/test/run-make/graphviz-flowgraph/f06.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f06.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..61b40d68dd1b56431ce2fbd2a9170cbf9dd35d7a --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f06.dot-expected.dot @@ -0,0 +1,15 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr 6"]; + N3[label="expr S6{val: 6,}"]; + N4[label="local _x"]; + N5[label="pat S6{val: _x}"]; + N6[label="block { let S6{val: _x} = S6{val: 6,}; }"]; + N0 -> N2; + N2 -> N3; + N3 -> N4; + N4 -> N5; + N5 -> N6; + N6 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f06.rs b/src/test/run-make/graphviz-flowgraph/f06.rs new file mode 100644 index 0000000000000000000000000000000000000000..c914409629cb0af784c97ff52856fe89f59f73dc --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f06.rs @@ -0,0 +1,14 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +struct S6 { val: int } +pub fn pat_struct_6() { + let S6 { val: _x } = S6{ val: 6 }; +} diff --git a/src/test/run-make/graphviz-flowgraph/f07.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f07.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..c99af1791495ff7605fd23eff22f8070e5aabc3c --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f07.dot-expected.dot @@ -0,0 +1,33 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr 7"]; + N3[label="expr 77"]; + N4[label="expr 777"]; + N5[label="expr 7777"]; + N6[label="expr [7, 77, 777, 7777]"]; + N7[label="expr match [7, 77, 777, 7777] { [x, y, ..] => x + y }"]; + N8[label="local x"]; + N9[label="local y"]; + N10[label="pat .."]; + N11[label="pat [x, y, ..]"]; + N12[label="expr x"]; + N13[label="expr y"]; + N14[label="expr x + y"]; + N15[label="block { match [7, 77, 777, 7777] { [x, y, ..] => x + y }; }"]; + N0 -> N2; + N2 -> N3; + N3 -> N4; + N4 -> N5; + N5 -> N6; + N6 -> N8; + N8 -> N9; + N9 -> N10; + N10 -> N11; + N11 -> N12; + N12 -> N13; + N13 -> N14; + N14 -> N7; + N7 -> N15; + N15 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f07.rs b/src/test/run-make/graphviz-flowgraph/f07.rs new file mode 100644 index 0000000000000000000000000000000000000000..39f71d309fdf9363d55bba93be259e0c8a51878a --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f07.rs @@ -0,0 +1,15 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn pat_vec_7() { + match [7, 77, 777, 7777] { + [x, y, ..] => x + y + }; +} diff --git a/src/test/run-make/graphviz-flowgraph/f08.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f08.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..61a708cd9ccd4c1b15276a3a1538d572e3fac4ad --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f08.dot-expected.dot @@ -0,0 +1,30 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr 8"]; + N3[label="local x"]; + N4[label="local _y"]; + N5[label="expr x"]; + N6[label="expr 88"]; + N7[label="expr x > 88"]; + N8[label="expr 888"]; + N9[label="expr _y"]; + N10[label="expr _y = 888"]; + N11[label="block { _y = 888; }"]; + N12[label="expr if x > 88 { _y = 888; }"]; + N13[label="block { let x = 8; let _y; if x > 88 { _y = 888; } }"]; + N0 -> N2; + N2 -> N3; + N3 -> N4; + N4 -> N5; + N5 -> N6; + N6 -> N7; + N7 -> N8; + N8 -> N9; + N9 -> N10; + N10 -> N11; + N7 -> N12; + N11 -> N12; + N12 -> N13; + N13 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f08.rs b/src/test/run-make/graphviz-flowgraph/f08.rs new file mode 100644 index 0000000000000000000000000000000000000000..6ba7b03d54da5f206a715299aee42935965c559b --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f08.rs @@ -0,0 +1,16 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn expr_if_onearm_8() { + let x = 8; let _y; + if x > 88 { + _y = 888; + } +} diff --git a/src/test/run-make/graphviz-flowgraph/f09.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f09.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..892b9fcd841f8b6849864472d3165e6ba2697634 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f09.dot-expected.dot @@ -0,0 +1,44 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr 91"]; + N3[label="local x"]; + N4[label="local _y"]; + N5[label="expr x"]; + N6[label="expr 92"]; + N7[label="expr x > 92"]; + N8[label="expr 93"]; + N9[label="expr _y"]; + N10[label="expr _y = 93"]; + N11[label="block { _y = 93; }"]; + N12[label="expr 94"]; + N13[label="expr 95"]; + N14[label="expr 94 + 95"]; + N15[label="expr _y"]; + N16[label="expr _y = 94 + 95"]; + N17[label="block { _y = 94 + 95; }"]; + N18[label="expr { _y = 94 + 95; }"]; + N19[label="expr if x > 92 { _y = 93; } else { _y = 94 + 95; }"]; + N20[label="block { let x = 91; let _y; if x > 92 { _y = 93; } else { _y = 94 + 95; } }"]; + N0 -> N2; + N2 -> N3; + N3 -> N4; + N4 -> N5; + N5 -> N6; + N6 -> N7; + N7 -> N8; + N8 -> N9; + N9 -> N10; + N10 -> N11; + N7 -> N12; + N12 -> N13; + N13 -> N14; + N14 -> N15; + N15 -> N16; + N16 -> N17; + N17 -> N18; + N11 -> N19; + N18 -> N19; + N19 -> N20; + N20 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f09.rs b/src/test/run-make/graphviz-flowgraph/f09.rs new file mode 100644 index 0000000000000000000000000000000000000000..a78ccb8a93741a174368a5df7232510281d7d63a --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f09.rs @@ -0,0 +1,18 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn expr_if_twoarm_9() { + let x = 91; let _y; + if x > 92 { + _y = 93; + } else { + _y = 94+95; + } +} diff --git a/src/test/run-make/graphviz-flowgraph/f10.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f10.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..2cef122104edabadbb2969a6a80f87bb04db002f --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f10.dot-expected.dot @@ -0,0 +1,30 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr 10"]; + N3[label="local mut x"]; + N4[label="(dummy_node)"]; + N5[label="expr x"]; + N6[label="expr 0"]; + N7[label="expr x > 0"]; + N8[label="expr while x > 0 { x -= 1; }"]; + N9[label="expr 1"]; + N10[label="expr x"]; + N11[label="expr x -= 1"]; + N12[label="block { x -= 1; }"]; + N13[label="block { let mut x = 10; while x > 0 { x -= 1; } }"]; + N0 -> N2; + N2 -> N3; + N3 -> N4; + N4 -> N5; + N5 -> N6; + N6 -> N7; + N7 -> N8; + N7 -> N9; + N9 -> N10; + N10 -> N11; + N11 -> N12; + N12 -> N4; + N8 -> N13; + N13 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f10.rs b/src/test/run-make/graphviz-flowgraph/f10.rs new file mode 100644 index 0000000000000000000000000000000000000000..0ca7cc5ee86bd7f31ac6dda1a7c95140feba4e10 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f10.rs @@ -0,0 +1,16 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn expr_while_10() { + let mut x = 10; + while x > 0 { + x -= 1; + } +} diff --git a/src/test/run-make/graphviz-flowgraph/f11.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f11.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..59d65e5b8b7fc028e82f92d8e98fb2365394e576 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f11.dot-expected.dot @@ -0,0 +1,25 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr 11"]; + N3[label="local mut _x"]; + N4[label="(dummy_node)"]; + N5[label="expr loop { _x -= 1; }"]; + N6[label="expr 1"]; + N7[label="expr _x"]; + N8[label="expr _x -= 1"]; + N9[label="block { _x -= 1; }"]; + N10[label="expr \"unreachable\""]; + N11[label="block { let mut _x = 11; loop { _x -= 1; } \"unreachable\"; }"]; + N0 -> N2; + N2 -> N3; + N3 -> N4; + N4 -> N6; + N6 -> N7; + N7 -> N8; + N8 -> N9; + N9 -> N4; + N5 -> N10; + N10 -> N11; + N11 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f11.rs b/src/test/run-make/graphviz-flowgraph/f11.rs new file mode 100644 index 0000000000000000000000000000000000000000..d0f3452119e16b512712c5b22673aec811cd9122 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f11.rs @@ -0,0 +1,18 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[allow(unreachable_code)] +pub fn expr_loop_11() { + let mut _x = 11; + loop { + _x -= 1; + } + "unreachable"; +} diff --git a/src/test/run-make/graphviz-flowgraph/f12.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f12.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..9c0f25d5bece5eb8617ab57ddebf595bbfd8f2d7 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f12.dot-expected.dot @@ -0,0 +1,40 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr 12"]; + N3[label="local mut x"]; + N4[label="(dummy_node)"]; + N5[label="expr loop { x -= 1; if x == 2 { break ; \"unreachable\"; } }"]; + N6[label="expr 1"]; + N7[label="expr x"]; + N8[label="expr x -= 1"]; + N9[label="expr x"]; + N10[label="expr 2"]; + N11[label="expr x == 2"]; + N12[label="expr break"]; + N13[label="(dummy_node)"]; + N14[label="expr \"unreachable\""]; + N15[label="block { break ; \"unreachable\"; }"]; + N16[label="expr if x == 2 { break ; \"unreachable\"; }"]; + N17[label="block { x -= 1; if x == 2 { break ; \"unreachable\"; } }"]; + N18[label="block { let mut x = 12; loop { x -= 1; if x == 2 { break ; \"unreachable\"; } } }"]; + N0 -> N2; + N2 -> N3; + N3 -> N4; + N4 -> N6; + N6 -> N7; + N7 -> N8; + N8 -> N9; + N9 -> N10; + N10 -> N11; + N11 -> N12; + N12 -> N5[label="exiting scope_0 expr break,\lexiting scope_1 stmt break ;,\lexiting scope_2 block { break ; \"unreachable\"; },\lexiting scope_3 expr if x == 2 { break ; \"unreachable\"; },\lexiting scope_4 block { x -= 1; if x == 2 { break ; \"unreachable\"; } }"]; + N13 -> N14; + N14 -> N15; + N11 -> N16; + N15 -> N16; + N16 -> N17; + N17 -> N4; + N5 -> N18; + N18 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f12.rs b/src/test/run-make/graphviz-flowgraph/f12.rs new file mode 100644 index 0000000000000000000000000000000000000000..90b146340b6f5ddf53f674e239c0a55ce9f169f4 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f12.rs @@ -0,0 +1,18 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[allow(unreachable_code)] +pub fn expr_loop_12() { + let mut x = 12; + loop { + x -= 1; + if x == 2 { break; "unreachable"; } + } +} diff --git a/src/test/run-make/graphviz-flowgraph/f13.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f13.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..2be43dcaa7b66709a71c26802ce2282cbf8512fb --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f13.dot-expected.dot @@ -0,0 +1,44 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr E13b"]; + N3[label="expr 13"]; + N4[label="expr E13b(13)"]; + N5[label="local x"]; + N6[label="local _y"]; + N7[label="expr x"]; + N8[label="expr match x { E13a => _y = 1, E13b(v) => _y = v + 1 }"]; + N9[label="local E13a"]; + N10[label="expr 1"]; + N11[label="expr _y"]; + N12[label="expr _y = 1"]; + N13[label="local v"]; + N14[label="pat E13b(v)"]; + N15[label="expr v"]; + N16[label="expr 1"]; + N17[label="expr v + 1"]; + N18[label="expr _y"]; + N19[label="expr _y = v + 1"]; + N20[label="block {\l let x = E13b(13);\l let _y;\l match x { E13a => _y = 1, E13b(v) => _y = v + 1 }\l}\l"]; + N0 -> N2; + N2 -> N3; + N3 -> N4; + N4 -> N5; + N5 -> N6; + N6 -> N7; + N7 -> N9; + N9 -> N10; + N10 -> N11; + N11 -> N12; + N12 -> N8; + N7 -> N13; + N13 -> N14; + N14 -> N15; + N15 -> N16; + N16 -> N17; + N17 -> N18; + N18 -> N19; + N19 -> N8; + N8 -> N20; + N20 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f13.rs b/src/test/run-make/graphviz-flowgraph/f13.rs new file mode 100644 index 0000000000000000000000000000000000000000..0817a3210ce423b5d5bb8e834d7784ecd566fef0 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f13.rs @@ -0,0 +1,18 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +enum E13 { E13a, E13b(int) } +pub fn expr_match_13() { + let x = E13b(13); let _y; + match x { + E13a => _y = 1, + E13b(v) => _y = v + 1, + } +} diff --git a/src/test/run-make/graphviz-flowgraph/f14.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f14.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..0fa4e9b44de348dfe3431dfd26655ed3e33d0390 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f14.dot-expected.dot @@ -0,0 +1,28 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr 14"]; + N3[label="local x"]; + N4[label="expr x"]; + N5[label="expr 1"]; + N6[label="expr x > 1"]; + N7[label="expr return"]; + N8[label="(dummy_node)"]; + N9[label="expr \"unreachable\""]; + N10[label="block { return; \"unreachable\"; }"]; + N11[label="expr if x > 1 { return; \"unreachable\"; }"]; + N12[label="block { let x = 14; if x > 1 { return; \"unreachable\"; } }"]; + N0 -> N2; + N2 -> N3; + N3 -> N4; + N4 -> N5; + N5 -> N6; + N6 -> N7; + N7 -> N1; + N8 -> N9; + N9 -> N10; + N6 -> N11; + N10 -> N11; + N11 -> N12; + N12 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f14.rs b/src/test/run-make/graphviz-flowgraph/f14.rs new file mode 100644 index 0000000000000000000000000000000000000000..98ff095c8317cf1fc49004f18fb3209fd4bfe0d3 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f14.rs @@ -0,0 +1,18 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[allow(unreachable_code)] +pub fn expr_ret_14() { + let x = 14; + if x > 1 { + return; + "unreachable"; + } +} diff --git a/src/test/run-make/graphviz-flowgraph/f15.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f15.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..f0278fba311e6ac250de2dc458176f9d604a012c --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f15.dot-expected.dot @@ -0,0 +1,79 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr 15"]; + N3[label="local mut x"]; + N4[label="expr 151"]; + N5[label="local mut y"]; + N6[label="(dummy_node)"]; + N7[label="expr \'outer:\l loop {\l \'inner:\l loop {\l if x == 1 { break \'outer ; \"unreachable\" }\l if y >= 2 { break ; \"unreachable\" }\l y -= 3;\l }\l y -= 4;\l x -= 5;\l }\l"]; + N8[label="(dummy_node)"]; + N9[label="expr \'inner:\l loop {\l if x == 1 { break \'outer ; \"unreachable\" }\l if y >= 2 { break ; \"unreachable\" }\l y -= 3;\l }\l"]; + N10[label="expr x"]; + N11[label="expr 1"]; + N12[label="expr x == 1"]; + N13[label="expr break \'outer"]; + N14[label="(dummy_node)"]; + N15[label="expr \"unreachable\""]; + N16[label="block { break \'outer ; \"unreachable\" }"]; + N17[label="expr if x == 1 { break \'outer ; \"unreachable\" }"]; + N18[label="expr y"]; + N19[label="expr 2"]; + N20[label="expr y >= 2"]; + N21[label="expr break"]; + N22[label="(dummy_node)"]; + N23[label="expr \"unreachable\""]; + N24[label="block { break ; \"unreachable\" }"]; + N25[label="expr if y >= 2 { break ; \"unreachable\" }"]; + N26[label="expr 3"]; + N27[label="expr y"]; + N28[label="expr y -= 3"]; + N29[label="block {\l if x == 1 { break \'outer ; \"unreachable\" }\l if y >= 2 { break ; \"unreachable\" }\l y -= 3;\l}\l"]; + N30[label="expr 4"]; + N31[label="expr y"]; + N32[label="expr y -= 4"]; + N33[label="expr 5"]; + N34[label="expr x"]; + N35[label="expr x -= 5"]; + N36[label="block {\l \'inner:\l loop {\l if x == 1 { break \'outer ; \"unreachable\" }\l if y >= 2 { break ; \"unreachable\" }\l y -= 3;\l }\l y -= 4;\l x -= 5;\l}\l"]; + N37[label="block {\l let mut x = 15;\l let mut y = 151;\l \'outer:\l loop {\l \'inner:\l loop {\l if x == 1 { break \'outer ; \"unreachable\" }\l if y >= 2 { break ; \"unreachable\" }\l y -= 3;\l }\l y -= 4;\l x -= 5;\l }\l}\l"]; + N0 -> N2; + N2 -> N3; + N3 -> N4; + N4 -> N5; + N5 -> N6; + N6 -> N8; + N8 -> N10; + N10 -> N11; + N11 -> N12; + N12 -> N13; + N13 -> N7[label="exiting scope_0 expr break \'outer,\lexiting scope_1 stmt break \'outer ;,\lexiting scope_2 block { break \'outer ; \"unreachable\" },\lexiting scope_3 expr if x == 1 { break \'outer ; \"unreachable\" },\lexiting scope_4 stmt if x == 1 { break \'outer ; \"unreachable\" },\lexiting scope_5 block {\l if x == 1 { break \'outer ; \"unreachable\" }\l if y >= 2 { break ; \"unreachable\" }\l y -= 3;\l}\l,\lexiting scope_6 expr \'inner:\l loop {\l if x == 1 { break \'outer ; \"unreachable\" }\l if y >= 2 { break ; \"unreachable\" }\l y -= 3;\l }\l,\lexiting scope_7 stmt \'inner:\l loop {\l if x == 1 { break \'outer ; \"unreachable\" }\l if y >= 2 { break ; \"unreachable\" }\l y -= 3;\l }\l,\lexiting scope_8 block {\l \'inner:\l loop {\l if x == 1 { break \'outer ; \"unreachable\" }\l if y >= 2 { break ; \"unreachable\" }\l y -= 3;\l }\l y -= 4;\l x -= 5;\l}\l"]; + N14 -> N15; + N15 -> N16; + N12 -> N17; + N16 -> N17; + N17 -> N18; + N18 -> N19; + N19 -> N20; + N20 -> N21; + N21 -> N9[label="exiting scope_0 expr break,\lexiting scope_1 stmt break ;,\lexiting scope_2 block { break ; \"unreachable\" },\lexiting scope_3 expr if y >= 2 { break ; \"unreachable\" },\lexiting scope_4 stmt if y >= 2 { break ; \"unreachable\" },\lexiting scope_5 block {\l if x == 1 { break \'outer ; \"unreachable\" }\l if y >= 2 { break ; \"unreachable\" }\l y -= 3;\l}\l"]; + N22 -> N23; + N23 -> N24; + N20 -> N25; + N24 -> N25; + N25 -> N26; + N26 -> N27; + N27 -> N28; + N28 -> N29; + N29 -> N8; + N9 -> N30; + N30 -> N31; + N31 -> N32; + N32 -> N33; + N33 -> N34; + N34 -> N35; + N35 -> N36; + N36 -> N6; + N7 -> N37; + N37 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f15.rs b/src/test/run-make/graphviz-flowgraph/f15.rs new file mode 100644 index 0000000000000000000000000000000000000000..44c038d643badebb108167e91a49926dff13edff --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f15.rs @@ -0,0 +1,30 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[allow(unreachable_code)] +pub fn expr_break_label_15() { + let mut x = 15; + let mut y = 151; + 'outer: loop { + 'inner: loop { + if x == 1 { + break 'outer; + "unreachable" + } + if y >= 2 { + break; + "unreachable" + } + y -= 3; + } + y -= 4; + x -= 5; + } +} diff --git a/src/test/run-make/graphviz-flowgraph/f16.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f16.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..3f999ae3781426ab823ebc94129587310e307ca3 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f16.dot-expected.dot @@ -0,0 +1,81 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr 16"]; + N3[label="local mut x"]; + N4[label="expr 16"]; + N5[label="local mut y"]; + N6[label="(dummy_node)"]; + N7[label="expr \'outer:\l loop {\l \'inner:\l loop {\l if x == 1 { continue \'outer ; \"unreachable\" }\l if y >= 1 { break ; \"unreachable\" }\l y -= 1;\l }\l y -= 1;\l x -= 1;\l }\l"]; + N8[label="(dummy_node)"]; + N9[label="expr \'inner:\l loop {\l if x == 1 { continue \'outer ; \"unreachable\" }\l if y >= 1 { break ; \"unreachable\" }\l y -= 1;\l }\l"]; + N10[label="expr x"]; + N11[label="expr 1"]; + N12[label="expr x == 1"]; + N13[label="expr continue \'outer"]; + N14[label="(dummy_node)"]; + N15[label="expr \"unreachable\""]; + N16[label="block { continue \'outer ; \"unreachable\" }"]; + N17[label="expr if x == 1 { continue \'outer ; \"unreachable\" }"]; + N18[label="expr y"]; + N19[label="expr 1"]; + N20[label="expr y >= 1"]; + N21[label="expr break"]; + N22[label="(dummy_node)"]; + N23[label="expr \"unreachable\""]; + N24[label="block { break ; \"unreachable\" }"]; + N25[label="expr if y >= 1 { break ; \"unreachable\" }"]; + N26[label="expr 1"]; + N27[label="expr y"]; + N28[label="expr y -= 1"]; + N29[label="block {\l if x == 1 { continue \'outer ; \"unreachable\" }\l if y >= 1 { break ; \"unreachable\" }\l y -= 1;\l}\l"]; + N30[label="expr 1"]; + N31[label="expr y"]; + N32[label="expr y -= 1"]; + N33[label="expr 1"]; + N34[label="expr x"]; + N35[label="expr x -= 1"]; + N36[label="block {\l \'inner:\l loop {\l if x == 1 { continue \'outer ; \"unreachable\" }\l if y >= 1 { break ; \"unreachable\" }\l y -= 1;\l }\l y -= 1;\l x -= 1;\l}\l"]; + N37[label="expr \"unreachable\""]; + N38[label="block {\l let mut x = 16;\l let mut y = 16;\l \'outer:\l loop {\l \'inner:\l loop {\l if x == 1 { continue \'outer ; \"unreachable\" }\l if y >= 1 { break ; \"unreachable\" }\l y -= 1;\l }\l y -= 1;\l x -= 1;\l }\l \"unreachable\";\l}\l"]; + N0 -> N2; + N2 -> N3; + N3 -> N4; + N4 -> N5; + N5 -> N6; + N6 -> N8; + N8 -> N10; + N10 -> N11; + N11 -> N12; + N12 -> N13; + N13 -> N6[label="exiting scope_0 expr continue \'outer,\lexiting scope_1 stmt continue \'outer ;,\lexiting scope_2 block { continue \'outer ; \"unreachable\" },\lexiting scope_3 expr if x == 1 { continue \'outer ; \"unreachable\" },\lexiting scope_4 stmt if x == 1 { continue \'outer ; \"unreachable\" },\lexiting scope_5 block {\l if x == 1 { continue \'outer ; \"unreachable\" }\l if y >= 1 { break ; \"unreachable\" }\l y -= 1;\l}\l,\lexiting scope_6 expr \'inner:\l loop {\l if x == 1 { continue \'outer ; \"unreachable\" }\l if y >= 1 { break ; \"unreachable\" }\l y -= 1;\l }\l,\lexiting scope_7 stmt \'inner:\l loop {\l if x == 1 { continue \'outer ; \"unreachable\" }\l if y >= 1 { break ; \"unreachable\" }\l y -= 1;\l }\l,\lexiting scope_8 block {\l \'inner:\l loop {\l if x == 1 { continue \'outer ; \"unreachable\" }\l if y >= 1 { break ; \"unreachable\" }\l y -= 1;\l }\l y -= 1;\l x -= 1;\l}\l"]; + N14 -> N15; + N15 -> N16; + N12 -> N17; + N16 -> N17; + N17 -> N18; + N18 -> N19; + N19 -> N20; + N20 -> N21; + N21 -> N9[label="exiting scope_0 expr break,\lexiting scope_1 stmt break ;,\lexiting scope_2 block { break ; \"unreachable\" },\lexiting scope_3 expr if y >= 1 { break ; \"unreachable\" },\lexiting scope_4 stmt if y >= 1 { break ; \"unreachable\" },\lexiting scope_5 block {\l if x == 1 { continue \'outer ; \"unreachable\" }\l if y >= 1 { break ; \"unreachable\" }\l y -= 1;\l}\l"]; + N22 -> N23; + N23 -> N24; + N20 -> N25; + N24 -> N25; + N25 -> N26; + N26 -> N27; + N27 -> N28; + N28 -> N29; + N29 -> N8; + N9 -> N30; + N30 -> N31; + N31 -> N32; + N32 -> N33; + N33 -> N34; + N34 -> N35; + N35 -> N36; + N36 -> N6; + N7 -> N37; + N37 -> N38; + N38 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f16.rs b/src/test/run-make/graphviz-flowgraph/f16.rs new file mode 100644 index 0000000000000000000000000000000000000000..f4f23a65c93509abfce3d5892d859ea92a7993ec --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f16.rs @@ -0,0 +1,31 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[allow(unreachable_code)] +pub fn expr_continue_label_16() { + let mut x = 16; + let mut y = 16; + 'outer: loop { + 'inner: loop { + if x == 1 { + continue 'outer; + "unreachable" + } + if y >= 1 { + break; + "unreachable" + } + y -= 1; + } + y -= 1; + x -= 1; + } + "unreachable"; +} diff --git a/src/test/run-make/graphviz-flowgraph/f17.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f17.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..e9bccdab81be1f59dbaefde500cbf690ce461b28 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f17.dot-expected.dot @@ -0,0 +1,17 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr 1"]; + N3[label="expr 7"]; + N4[label="expr 17"]; + N5[label="expr [1, 7, 17]"]; + N6[label="local _v"]; + N7[label="block { let _v = [1, 7, 17]; }"]; + N0 -> N2; + N2 -> N3; + N3 -> N4; + N4 -> N5; + N5 -> N6; + N6 -> N7; + N7 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f17.rs b/src/test/run-make/graphviz-flowgraph/f17.rs new file mode 100644 index 0000000000000000000000000000000000000000..23f5bb8a1eb17b993fe026cc2c11f63f85f52fd8 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f17.rs @@ -0,0 +1,13 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn expr_vec_17() { + let _v = [1, 7, 17]; +} diff --git a/src/test/run-make/graphviz-flowgraph/f18.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f18.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..6345b4effaf1edbbf44a67015727ed7717c0a791 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f18.dot-expected.dot @@ -0,0 +1,17 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr inner"]; + N3[label="expr inner"]; + N4[label="expr 18"]; + N5[label="expr inner(18)"]; + N6[label="expr inner(inner(18))"]; + N7[label="block {\l fn inner(x: int) -> int { x + x }\l inner(inner(18));\l}\l"]; + N0 -> N2; + N2 -> N3; + N3 -> N4; + N4 -> N5; + N5 -> N6; + N6 -> N7; + N7 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f18.rs b/src/test/run-make/graphviz-flowgraph/f18.rs new file mode 100644 index 0000000000000000000000000000000000000000..0ace542b8f5db5bc6569db6802d4b72b3dae99de --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f18.rs @@ -0,0 +1,14 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn expr_call_18() { + fn inner(x:int) -> int { x + x } + inner(inner(18)); +} diff --git a/src/test/run-make/graphviz-flowgraph/f19.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f19.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..5fad18536e5933b954a8696f29beb3f990ef2f42 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f19.dot-expected.dot @@ -0,0 +1,19 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr 19"]; + N3[label="expr S19{x: 19,}"]; + N4[label="local s"]; + N5[label="expr s"]; + N6[label="expr s.inner()"]; + N7[label="expr s.inner().inner()"]; + N8[label="block {\l struct S19 {\l x: int,\l }\l impl S19 {\l fn inner(self) -> S19 { S19{x: self.x + self.x,} }\l }\l let s = S19{x: 19,};\l s.inner().inner();\l}\l"]; + N0 -> N2; + N2 -> N3; + N3 -> N4; + N4 -> N5; + N5 -> N6; + N6 -> N7; + N7 -> N8; + N8 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f19.rs b/src/test/run-make/graphviz-flowgraph/f19.rs new file mode 100644 index 0000000000000000000000000000000000000000..092f6890a152ab714935c364b39864e7098a9a0c --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f19.rs @@ -0,0 +1,16 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn expr_method_call_19() { + struct S19 { x: int } + impl S19 { fn inner(self) -> S19 { S19 { x: self.x + self.x } } } + let s = S19 { x: 19 }; + s.inner().inner(); +} diff --git a/src/test/run-make/graphviz-flowgraph/f20.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f20.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..593ad6f91ea5ce02ea2ca4002b2c88ef2a8093b1 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f20.dot-expected.dot @@ -0,0 +1,23 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr 2"]; + N3[label="expr 0"]; + N4[label="expr 20"]; + N5[label="expr [2, 0, 20]"]; + N6[label="local v"]; + N7[label="expr v"]; + N8[label="expr 20"]; + N9[label="expr v[20]"]; + N10[label="block { let v = [2, 0, 20]; v[20]; }"]; + N0 -> N2; + N2 -> N3; + N3 -> N4; + N4 -> N5; + N5 -> N6; + N6 -> N7; + N7 -> N8; + N8 -> N9; + N9 -> N10; + N10 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f20.rs b/src/test/run-make/graphviz-flowgraph/f20.rs new file mode 100644 index 0000000000000000000000000000000000000000..d7349932355b10c92a06c3a1d93af996a6b7e7cb --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f20.rs @@ -0,0 +1,14 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn expr_index_20() { + let v = [2, 0, 20]; + v[20]; +} diff --git a/src/test/run-make/graphviz-flowgraph/f21.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f21.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..0798c4a01c05ae9f862453ed574ac5be3f9a2531 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f21.dot-expected.dot @@ -0,0 +1,75 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr 15"]; + N3[label="local mut x"]; + N4[label="expr 151"]; + N5[label="local mut y"]; + N6[label="(dummy_node)"]; + N7[label="expr \'outer:\l loop {\l \'inner:\l loop {\l if x == 1 { break \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l y -= 3;\l x -= 5;\l }\l \"unreachable\";\l }\l"]; + N8[label="(dummy_node)"]; + N9[label="expr \'inner:\l loop {\l if x == 1 { break \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l y -= 3;\l x -= 5;\l }\l"]; + N10[label="expr x"]; + N11[label="expr 1"]; + N12[label="expr x == 1"]; + N13[label="expr break \'outer"]; + N14[label="(dummy_node)"]; + N15[label="expr \"unreachable\""]; + N16[label="block { break \'outer ; \"unreachable\"; }"]; + N17[label="expr if x == 1 { break \'outer ; \"unreachable\"; }"]; + N18[label="expr y"]; + N19[label="expr 2"]; + N20[label="expr y >= 2"]; + N21[label="expr return"]; + N22[label="(dummy_node)"]; + N23[label="expr \"unreachable\""]; + N24[label="block { return; \"unreachable\"; }"]; + N25[label="expr if y >= 2 { return; \"unreachable\"; }"]; + N26[label="expr 3"]; + N27[label="expr y"]; + N28[label="expr y -= 3"]; + N29[label="expr 5"]; + N30[label="expr x"]; + N31[label="expr x -= 5"]; + N32[label="block {\l if x == 1 { break \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l y -= 3;\l x -= 5;\l}\l"]; + N33[label="expr \"unreachable\""]; + N34[label="block {\l \'inner:\l loop {\l if x == 1 { break \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l y -= 3;\l x -= 5;\l }\l \"unreachable\";\l}\l"]; + N35[label="block {\l let mut x = 15;\l let mut y = 151;\l \'outer:\l loop {\l \'inner:\l loop {\l if x == 1 { break \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l y -= 3;\l x -= 5;\l }\l \"unreachable\";\l }\l}\l"]; + N0 -> N2; + N2 -> N3; + N3 -> N4; + N4 -> N5; + N5 -> N6; + N6 -> N8; + N8 -> N10; + N10 -> N11; + N11 -> N12; + N12 -> N13; + N13 -> N7[label="exiting scope_0 expr break \'outer,\lexiting scope_1 stmt break \'outer ;,\lexiting scope_2 block { break \'outer ; \"unreachable\"; },\lexiting scope_3 expr if x == 1 { break \'outer ; \"unreachable\"; },\lexiting scope_4 stmt if x == 1 { break \'outer ; \"unreachable\"; },\lexiting scope_5 block {\l if x == 1 { break \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l y -= 3;\l x -= 5;\l}\l,\lexiting scope_6 expr \'inner:\l loop {\l if x == 1 { break \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l y -= 3;\l x -= 5;\l }\l,\lexiting scope_7 stmt \'inner:\l loop {\l if x == 1 { break \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l y -= 3;\l x -= 5;\l }\l,\lexiting scope_8 block {\l \'inner:\l loop {\l if x == 1 { break \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l y -= 3;\l x -= 5;\l }\l \"unreachable\";\l}\l"]; + N14 -> N15; + N15 -> N16; + N12 -> N17; + N16 -> N17; + N17 -> N18; + N18 -> N19; + N19 -> N20; + N20 -> N21; + N21 -> N1[label="exiting scope_0 expr \'inner:\l loop {\l if x == 1 { break \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l y -= 3;\l x -= 5;\l }\l,\lexiting scope_1 expr \'outer:\l loop {\l \'inner:\l loop {\l if x == 1 { break \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l y -= 3;\l x -= 5;\l }\l \"unreachable\";\l }\l"]; + N22 -> N23; + N23 -> N24; + N20 -> N25; + N24 -> N25; + N25 -> N26; + N26 -> N27; + N27 -> N28; + N28 -> N29; + N29 -> N30; + N30 -> N31; + N31 -> N32; + N32 -> N8; + N9 -> N33; + N33 -> N34; + N34 -> N6; + N7 -> N35; + N35 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f21.rs b/src/test/run-make/graphviz-flowgraph/f21.rs new file mode 100644 index 0000000000000000000000000000000000000000..70083ed8312cbbb181e5d5652f8150646e496dc3 --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f21.rs @@ -0,0 +1,30 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[allow(unreachable_code)] +pub fn expr_break_label_21() { + let mut x = 15; + let mut y = 151; + 'outer: loop { + 'inner: loop { + if x == 1 { + break 'outer; + "unreachable"; + } + if y >= 2 { + return; + "unreachable"; + } + y -= 3; + x -= 5; + } + "unreachable"; + } +} diff --git a/src/test/run-make/graphviz-flowgraph/f22.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f22.dot-expected.dot new file mode 100644 index 0000000000000000000000000000000000000000..9ad731bc756bfe8c2dd91bc1c8589768033733bd --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f22.dot-expected.dot @@ -0,0 +1,77 @@ +digraph block { + N0[label="entry"]; + N1[label="exit"]; + N2[label="expr 15"]; + N3[label="local mut x"]; + N4[label="expr 151"]; + N5[label="local mut y"]; + N6[label="(dummy_node)"]; + N7[label="expr \'outer:\l loop {\l \'inner:\l loop {\l if x == 1 { continue \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l x -= 1;\l y -= 3;\l }\l \"unreachable\";\l }\l"]; + N8[label="(dummy_node)"]; + N9[label="expr \'inner:\l loop {\l if x == 1 { continue \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l x -= 1;\l y -= 3;\l }\l"]; + N10[label="expr x"]; + N11[label="expr 1"]; + N12[label="expr x == 1"]; + N13[label="expr continue \'outer"]; + N14[label="(dummy_node)"]; + N15[label="expr \"unreachable\""]; + N16[label="block { continue \'outer ; \"unreachable\"; }"]; + N17[label="expr if x == 1 { continue \'outer ; \"unreachable\"; }"]; + N18[label="expr y"]; + N19[label="expr 2"]; + N20[label="expr y >= 2"]; + N21[label="expr return"]; + N22[label="(dummy_node)"]; + N23[label="expr \"unreachable\""]; + N24[label="block { return; \"unreachable\"; }"]; + N25[label="expr if y >= 2 { return; \"unreachable\"; }"]; + N26[label="expr 1"]; + N27[label="expr x"]; + N28[label="expr x -= 1"]; + N29[label="expr 3"]; + N30[label="expr y"]; + N31[label="expr y -= 3"]; + N32[label="block {\l if x == 1 { continue \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l x -= 1;\l y -= 3;\l}\l"]; + N33[label="expr \"unreachable\""]; + N34[label="block {\l \'inner:\l loop {\l if x == 1 { continue \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l x -= 1;\l y -= 3;\l }\l \"unreachable\";\l}\l"]; + N35[label="expr \"unreachable\""]; + N36[label="block {\l let mut x = 15;\l let mut y = 151;\l \'outer:\l loop {\l \'inner:\l loop {\l if x == 1 { continue \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l x -= 1;\l y -= 3;\l }\l \"unreachable\";\l }\l \"unreachable\";\l}\l"]; + N0 -> N2; + N2 -> N3; + N3 -> N4; + N4 -> N5; + N5 -> N6; + N6 -> N8; + N8 -> N10; + N10 -> N11; + N11 -> N12; + N12 -> N13; + N13 -> N6[label="exiting scope_0 expr continue \'outer,\lexiting scope_1 stmt continue \'outer ;,\lexiting scope_2 block { continue \'outer ; \"unreachable\"; },\lexiting scope_3 expr if x == 1 { continue \'outer ; \"unreachable\"; },\lexiting scope_4 stmt if x == 1 { continue \'outer ; \"unreachable\"; },\lexiting scope_5 block {\l if x == 1 { continue \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l x -= 1;\l y -= 3;\l}\l,\lexiting scope_6 expr \'inner:\l loop {\l if x == 1 { continue \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l x -= 1;\l y -= 3;\l }\l,\lexiting scope_7 stmt \'inner:\l loop {\l if x == 1 { continue \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l x -= 1;\l y -= 3;\l }\l,\lexiting scope_8 block {\l \'inner:\l loop {\l if x == 1 { continue \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l x -= 1;\l y -= 3;\l }\l \"unreachable\";\l}\l"]; + N14 -> N15; + N15 -> N16; + N12 -> N17; + N16 -> N17; + N17 -> N18; + N18 -> N19; + N19 -> N20; + N20 -> N21; + N21 -> N1[label="exiting scope_0 expr \'inner:\l loop {\l if x == 1 { continue \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l x -= 1;\l y -= 3;\l }\l,\lexiting scope_1 expr \'outer:\l loop {\l \'inner:\l loop {\l if x == 1 { continue \'outer ; \"unreachable\"; }\l if y >= 2 { return; \"unreachable\"; }\l x -= 1;\l y -= 3;\l }\l \"unreachable\";\l }\l"]; + N22 -> N23; + N23 -> N24; + N20 -> N25; + N24 -> N25; + N25 -> N26; + N26 -> N27; + N27 -> N28; + N28 -> N29; + N29 -> N30; + N30 -> N31; + N31 -> N32; + N32 -> N8; + N9 -> N33; + N33 -> N34; + N34 -> N6; + N7 -> N35; + N35 -> N36; + N36 -> N1; +} diff --git a/src/test/run-make/graphviz-flowgraph/f22.rs b/src/test/run-make/graphviz-flowgraph/f22.rs new file mode 100644 index 0000000000000000000000000000000000000000..b35aac9ec422e924e3f4d167ae0ba0ab080de24b --- /dev/null +++ b/src/test/run-make/graphviz-flowgraph/f22.rs @@ -0,0 +1,31 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[allow(unreachable_code)] +pub fn expr_break_label_21() { + let mut x = 15; + let mut y = 151; + 'outer: loop { + 'inner: loop { + if x == 1 { + continue 'outer; + "unreachable"; + } + if y >= 2 { + return; + "unreachable"; + } + x -= 1; + y -= 3; + } + "unreachable"; + } + "unreachable"; +}