From: Douglas Gregor Date: Wed, 10 Mar 2010 04:54:39 +0000 (+0000) Subject: Statement expressions can be used in global- or namespace-scoped blocks X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dd8f569f84a73c0b0e1449475f333d101e6c9401;p=clang Statement expressions can be used in global- or namespace-scoped blocks git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@98135 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 10001c356d..2249579ba4 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -6593,7 +6593,8 @@ Sema::ActOnStmtExpr(SourceLocation LPLoc, StmtArg substmt, assert(SubStmt && isa(SubStmt) && "Invalid action invocation!"); CompoundStmt *Compound = cast(SubStmt); - bool isFileScope = getCurFunctionOrMethodDecl() == 0; + bool isFileScope + = (getCurFunctionOrMethodDecl() == 0) && (getCurBlock() == 0); if (isFileScope) return ExprError(Diag(LPLoc, diag::err_stmtexpr_file_scope)); diff --git a/test/SemaObjC/exprs.m b/test/SemaObjC/exprs.m index 33b144461f..3370bda051 100644 --- a/test/SemaObjC/exprs.m +++ b/test/SemaObjC/exprs.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 %s -fsyntax-only -verify -Wno-unreachable-code +// RUN: %clang_cc1 %s -fsyntax-only -fblocks -verify -Wno-unreachable-code // rdar://6597252 Class test1(Class X) { @@ -19,3 +19,6 @@ void test2() { if (@encode(int) == "foo") { } // expected-warning {{result of comparison against @encode is unspecified}} } + +#define MAX(A,B) ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __b : __a; }) +void (^foo)(int, int) = ^(int x, int y) { int z = MAX(x, y); };