aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMuhammad Mahad <mahadtxt@gmail.com>2023-07-19 20:54:28 +0500
committerCohenArthur <arthur.cohen@embecosm.com>2023-07-20 09:06:44 +0000
commit41e7dee1030e1b4813d160b9fd7206fab2302d32 (patch)
tree7fcf11ed55121def26049ff06725e0d6d4fc0001
parentaaeeaa2f7775f6f672aa490884c01217fd1c3f5d (diff)
downloadgcc-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.cc7
-rw-r--r--gcc/testsuite/rust/compile/break1.rs2
-rw-r--r--gcc/testsuite/rust/compile/break_continue_outside_loop.rs10
-rw-r--r--gcc/testsuite/rust/compile/continue1.rs2
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
};
}