forked from OSchip/llvm-project
make block bodies handle undefined labels just like functions.
llvm-svn: 125799
This commit is contained in:
parent
d4926266f3
commit
60f844916c
|
@ -64,7 +64,7 @@ public:
|
|||
/// \brief The list of return statements that occur within the function or
|
||||
/// block, if there is any chance of applying the named return value
|
||||
/// optimization.
|
||||
llvm::SmallVector<ReturnStmt *, 4> Returns;
|
||||
llvm::SmallVector<ReturnStmt*, 4> Returns;
|
||||
|
||||
void setHasBranchIntoScope() {
|
||||
HasBranchIntoScope = true;
|
||||
|
|
|
@ -8800,7 +8800,7 @@ void Sema::ActOnBlockError(SourceLocation CaretLoc, Scope *CurScope) {
|
|||
/// ActOnBlockStmtExpr - This is called when the body of a block statement
|
||||
/// literal was successfully completed. ^(int x){...}
|
||||
ExprResult Sema::ActOnBlockStmtExpr(SourceLocation CaretLoc,
|
||||
Stmt *Body, Scope *CurScope) {
|
||||
Stmt *Body, Scope *CurScope) {
|
||||
// If blocks are disabled, emit an error.
|
||||
if (!LangOpts.Blocks)
|
||||
Diag(CaretLoc, diag::err_blocks_disable);
|
||||
|
@ -8866,13 +8866,10 @@ ExprResult Sema::ActOnBlockStmtExpr(SourceLocation CaretLoc,
|
|||
if (getCurFunction()->NeedsScopeChecking() && !hasAnyErrorsInThisFunction())
|
||||
DiagnoseInvalidJumps(cast<CompoundStmt>(Body));
|
||||
|
||||
BSI->TheDecl->setBody(cast<CompoundStmt>(Body));
|
||||
|
||||
// Check goto/label use.
|
||||
if (BSI->checkLabelUse(0, *this)) {
|
||||
PopFunctionOrBlockScope();
|
||||
return ExprError();
|
||||
}
|
||||
BSI->checkLabelUse(Body, *this);
|
||||
|
||||
BSI->TheDecl->setBody(cast<CompoundStmt>(Body));
|
||||
|
||||
BlockExpr *Result = new (Context) BlockExpr(BSI->TheDecl, BlockTy);
|
||||
|
||||
|
|
Loading…
Reference in New Issue