summaryrefslogtreecommitdiff
path: root/gcc/d/dmd/statementsem.d
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/d/dmd/statementsem.d')
-rw-r--r--gcc/d/dmd/statementsem.d16
1 files changed, 13 insertions, 3 deletions
diff --git a/gcc/d/dmd/statementsem.d b/gcc/d/dmd/statementsem.d
index 2916bbc38dd..c1c2dc92e12 100644
--- a/gcc/d/dmd/statementsem.d
+++ b/gcc/d/dmd/statementsem.d
@@ -2829,10 +2829,20 @@ package (dmd) extern (C++) final class StatementSemanticVisitor : Visitor
rs.error("`return` statements cannot be in contracts");
errors = true;
}
- if (sc.os && sc.os.tok != TOK.onScopeFailure)
+ if (sc.os)
{
- rs.error("`return` statements cannot be in `%s` bodies", Token.toChars(sc.os.tok));
- errors = true;
+ // @@@DEPRECATED_2.112@@@
+ // Deprecated in 2.100, transform into an error in 2.112
+ if (sc.os.tok == TOK.onScopeFailure)
+ {
+ rs.deprecation("`return` statements cannot be in `scope(failure)` bodies.");
+ deprecationSupplemental(rs.loc, "Use try-catch blocks for this purpose");
+ }
+ else
+ {
+ rs.error("`return` statements cannot be in `%s` bodies", Token.toChars(sc.os.tok));
+ errors = true;
+ }
}
if (sc.tf)
{