make block bodies handle undefined labels just like functions.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125799 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2011-02-17 23:58:47 +00:00
Родитель d8df5b65fc
Коммит e476bdce8c
2 изменённых файлов: 5 добавлений и 8 удалений

Просмотреть файл

@ -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);