Changeset f107afe
- Timestamp:
- Jul 18, 2024, 1:54:33 PM (9 months ago)
- Branches:
- master
- Children:
- e6128959
- Parents:
- 1842167 (diff), c248b39 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Files:
-
- 2 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified src/ControlStruct/MultiLevelExit.cpp ¶
r1842167 rf107afe 84 84 bool isFallDefaultTarget() const { return kind == SwitchStmtK; } 85 85 86 // Check if this entry can be the target of an unlabelled break. 87 bool isUnlabelledBreakTarget() const { return kind <= WhileDoStmtK || kind == SwitchStmtK; } 88 86 89 // These routines set a target as being "used" by a BranchStmt 87 90 Label useContExit() { assert( kind <= WhileDoStmtK ); return useTarget(secondTarget); } … … 114 117 bool isFallthroughDefaultTarget( const Entry & entry ) { 115 118 return entry.isFallDefaultTarget(); 119 } 120 121 bool isUnlabelledBreakTarget( const Entry & entry ) { 122 return entry.isUnlabelledBreakTarget(); 116 123 } 117 124 … … 247 254 case BranchStmt::Break: { 248 255 bool isContinue = stmt->kind == BranchStmt::Continue; 249 // Handle unlabeled break and continue. 250 if ( stmt->target.empty() ) { 251 if ( isContinue ) { 252 targetEntry = findEnclosingControlStructure( isContinueTarget ); 253 } else { 254 if ( enclosing_control_structures.empty() ) { 255 SemanticError( stmt->location, 256 "\"break\" outside a loop, \"switch\", or labelled block" ); 257 } 258 targetEntry = findEnclosingControlStructure( isBreakTarget ); 256 // Handle unlabeled continue. 257 if ( isContinue && stmt->target.empty() ) { 258 targetEntry = findEnclosingControlStructure( isContinueTarget ); 259 if ( targetEntry == enclosing_control_structures.rend() ) { 260 SemanticError( stmt->location, 261 "\"continue\" outside a loop" ); 259 262 } 260 // Handle labeled break and continue. 263 // Handle unlabeled break. 264 } else if ( stmt->target.empty() ) { 265 targetEntry = findEnclosingControlStructure( isUnlabelledBreakTarget ); 266 if ( targetEntry == enclosing_control_structures.rend() ) { 267 SemanticError( stmt->location, 268 "\"break\" outside a loop or \"switch\"" ); 269 } 270 // Handle labeled break and continue. 261 271 } else { 262 272 // Lookup label in table to find attached control structure. … … 265 275 return entry.stmt == targetStmt; 266 276 } ); 267 } 268 // Ensure that selected target is valid. 269 if ( targetEntry == enclosing_control_structures.rend() || ( isContinue && ! isContinueTarget( *targetEntry ) ) ) { 270 SemanticError( stmt->location, toString( (isContinue ? "\"continue\"" : "\"break\""), 271 " target must be an enclosing ", (isContinue ? "loop: " : "control structure: "), 272 stmt->originalTarget ) ); 277 // Ensure that selected target is valid. 278 if ( targetEntry == enclosing_control_structures.rend() 279 || ( isContinue ? !isContinueTarget( *targetEntry ) : !isBreakTarget( *targetEntry ) ) ) { 280 SemanticError( stmt->location, toString( (isContinue ? "\"continue\"" : "\"break\""), 281 " target must be an enclosing ", (isContinue ? "loop: " : "control structure: "), 282 stmt->originalTarget ) ); 283 } 273 284 } 274 285 break; -
TabularUnified tests/exceptions/.expect/try-ctrl-flow.txt ¶
r1842167 rf107afe 1 exceptions/try-ctrl-flow.cfa:7:1 error: "break" outside a loop , "switch", or labelled block2 exceptions/try-ctrl-flow.cfa:15:1 error: "break" outside a loop , "switch", or labelled block3 exceptions/try-ctrl-flow.cfa:23:1 error: "break" outside a loop , "switch", or labelled block4 exceptions/try-ctrl-flow.cfa:31:1 error: "continue" target must be an enclosing loop:1 exceptions/try-ctrl-flow.cfa:7:1 error: "break" outside a loop or "switch" 2 exceptions/try-ctrl-flow.cfa:15:1 error: "break" outside a loop or "switch" 3 exceptions/try-ctrl-flow.cfa:23:1 error: "break" outside a loop or "switch" 4 exceptions/try-ctrl-flow.cfa:31:1 error: "continue" outside a loop 5 5 exceptions/try-ctrl-flow.cfa:48:1 error: "break" target must be an enclosing control structure: mainLoop 6 6 exceptions/try-ctrl-flow.cfa:56:1 error: "continue" target must be an enclosing loop: mainLoop 7 exceptions/try-ctrl-flow.cfa:65:1 error: "break" outside a loop , "switch", or labelled block8 exceptions/try-ctrl-flow.cfa:76:1 error: "break" outside a loop , "switch", or labelled block7 exceptions/try-ctrl-flow.cfa:65:1 error: "break" outside a loop or "switch" 8 exceptions/try-ctrl-flow.cfa:76:1 error: "break" outside a loop or "switch" 9 9 exceptions/try-ctrl-flow.cfa:87:1 error: "fallthrough" must be enclosed in a "switch" or "choose" 10 10 exceptions/try-ctrl-flow.cfa:98:1 error: "break" target must be an enclosing control structure: mainBlock … … 13 13 exceptions/try-ctrl-flow.cfa:133:1 error: "return" may not appear in a finally clause 14 14 exceptions/try-ctrl-flow.cfa:139:1 error: "return" may not appear in a finally clause 15 exceptions/try-ctrl-flow.cfa:148:1 error: "break" outside a loop , "switch", or labelled block15 exceptions/try-ctrl-flow.cfa:148:1 error: "break" outside a loop or "switch" 16 16 exceptions/try-ctrl-flow.cfa:159:1 error: "return" may not appear in a try statement with a catch clause 17 17 exceptions/try-ctrl-flow.cfa:187:1 error: "return" may not appear in a catchResume clause
Note: See TracChangeset
for help on using the changeset viewer.