From: Muhammad Mahad Date: Wed, 19 Jul 2023 15:54:28 +0000 (+0500) Subject: gccrs: [E0268] break or continue used outside of loop X-Git-Tag: basepoints/gcc-15~2329 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f67f840d291516112b530d961fc73d5a2ace77e2;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.cc b/gcc/rust/typecheck/rust-hir-type-check-expr.cc index 863d998e869d..a1da9db67826 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 % outside of a loop"); + rust_error_at (expr.get_locus (), ErrorCode ("E0268"), + "% 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 % outside of a loop"); + rust_error_at (expr.get_locus (), ErrorCode ("E0268"), + "% outside of a loop"); return; } diff --git a/gcc/testsuite/rust/compile/break1.rs b/gcc/testsuite/rust/compile/break1.rs index e33077f6e2a4..ac8b7ee6bb7c 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 000000000000..b10b578daa7a --- /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 f1b58f69271c..2955a5171c67 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 }; }