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
This commit is contained in:
Douglas Gregor 2010-03-10 04:54:39 +00:00
Родитель 3cb0ebd5f7
Коммит dd8f569f84
2 изменённых файлов: 6 добавлений и 2 удалений

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

@ -6593,7 +6593,8 @@ Sema::ActOnStmtExpr(SourceLocation LPLoc, StmtArg substmt,
assert(SubStmt && isa<CompoundStmt>(SubStmt) && "Invalid action invocation!");
CompoundStmt *Compound = cast<CompoundStmt>(SubStmt);
bool isFileScope = getCurFunctionOrMethodDecl() == 0;
bool isFileScope
= (getCurFunctionOrMethodDecl() == 0) && (getCurBlock() == 0);
if (isFileScope)
return ExprError(Diag(LPLoc, diag::err_stmtexpr_file_scope));

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

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