diff options
author | Muhammad Mahad <mahadtxt@gmail.com> | 2023-07-19 20:54:28 +0500 |
---|---|---|
committer | CohenArthur <arthur.cohen@embecosm.com> | 2023-07-20 09:06:44 +0000 |
commit | 41e7dee1030e1b4813d160b9fd7206fab2302d32 (patch) | |
tree | 7fcf11ed55121def26049ff06725e0d6d4fc0001 | |
parent | aaeeaa2f7775f6f672aa490884c01217fd1c3f5d (diff) | |
download | gcc-41e7dee1030e1b4813d160b9fd7206fab2302d32.zip gcc-41e7dee1030e1b4813d160b9fd7206fab2302d32.tar.gz gcc-41e7dee1030e1b4813d160b9fd7206fab2302d32.tar.bz2 |
gccrs: [E0268] break or continue used outside of loop
Refactored error description similiar to rustc.
gcc/rust/ChangeLog:
* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit):
refactored and call error function.
gcc/testsuite/ChangeLog:
* rust/compile/break1.rs: Modified to pass test case.
* rust/compile/continue1.rs: likewise.
* rust/compile/break_continue_outside_loop.rs: New test.
Signed-off-by: Muhammad Mahad <mahadtxt@gmail.com>
-rw-r--r-- | gcc/rust/typecheck/rust-hir-type-check-expr.cc | 7 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/break1.rs | 2 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/break_continue_outside_loop.rs | 10 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/continue1.rs | 2 |
4 files changed, 16 insertions, 5 deletions
diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.cc b/gcc/rust/typecheck/rust-hir-type-check-expr.cc index e91da55..3dbe31e 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-expr.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-expr.cc @@ -1277,7 +1277,8 @@ TypeCheckExpr::visit (HIR::BreakExpr &expr) { if (!context->have_loop_context ()) { - rust_error_at (expr.get_locus (), "cannot %<break%> outside of a loop"); + rust_error_at (expr.get_locus (), ErrorCode ("E0268"), + "%<break%> outside of a loop or labeled block"); return; } @@ -1311,8 +1312,8 @@ TypeCheckExpr::visit (HIR::ContinueExpr &expr) { if (!context->have_loop_context ()) { - rust_error_at (expr.get_locus (), - "cannot %<continue%> outside of a loop"); + rust_error_at (expr.get_locus (), ErrorCode ("E0268"), + "%<continue%> outside of a loop"); return; } diff --git a/gcc/testsuite/rust/compile/break1.rs b/gcc/testsuite/rust/compile/break1.rs index e33077f..ac8b7ee 100644 --- a/gcc/testsuite/rust/compile/break1.rs +++ b/gcc/testsuite/rust/compile/break1.rs @@ -1,5 +1,5 @@ fn main() { let a; a = 1; - break a; // { dg-error "cannot 'break' outside of a loop" } + break a; // { dg-error ".break. outside of a loop or labeled block" } } diff --git a/gcc/testsuite/rust/compile/break_continue_outside_loop.rs b/gcc/testsuite/rust/compile/break_continue_outside_loop.rs new file mode 100644 index 0000000..b10b578 --- /dev/null +++ b/gcc/testsuite/rust/compile/break_continue_outside_loop.rs @@ -0,0 +1,10 @@ +// https://doc.rust-lang.org/error_codes/E0268.html +#![allow(unused)] +fn boo() { + continue; // { dg-error ".continue. outside of a loop" } + break; // { dg-error ".break. outside of a loop or labeled block" } +} + +fn main() { + boo() +} diff --git a/gcc/testsuite/rust/compile/continue1.rs b/gcc/testsuite/rust/compile/continue1.rs index f1b58f6..2955a51 100644 --- a/gcc/testsuite/rust/compile/continue1.rs +++ b/gcc/testsuite/rust/compile/continue1.rs @@ -3,7 +3,7 @@ fn main() { let mut b = 1; let _fib = { - continue; // { dg-error "cannot 'continue' outside of a loop" } + continue; // { dg-error ".continue. outside of a loop" } 123 }; } |