From ff03fbb6718ff310da3c5a0cb66038666fe6b09a Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Wed, 14 Jan 2009 19:39:53 +0000 Subject: [PATCH] Patch to keep clang honest that it does not yet support explicit return type on block literals. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62240 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Parse/ParseExpr.cpp | 5 +++++ test/Sema/block-syntax-error.c | 9 +++++++++ 2 files changed, 14 insertions(+) create mode 100644 test/Sema/block-syntax-error.c diff --git a/lib/Parse/ParseExpr.cpp b/lib/Parse/ParseExpr.cpp index 230abf823c..0295f70633 100644 --- a/lib/Parse/ParseExpr.cpp +++ b/lib/Parse/ParseExpr.cpp @@ -1239,6 +1239,11 @@ Parser::OwningExprResult Parser::ParseBlockLiteralExpression() { Actions.ActOnBlockError(CaretLoc, CurScope); } } + else { + // Saw something like: ^expr + Diag(Tok, diag::err_expected_expression); + return ExprError(); + } return move(Result); } diff --git a/test/Sema/block-syntax-error.c b/test/Sema/block-syntax-error.c new file mode 100644 index 0000000000..c98f1fd2aa --- /dev/null +++ b/test/Sema/block-syntax-error.c @@ -0,0 +1,9 @@ +// RUN: clang %s -fsyntax-only -verify -fblocks + +void (^noop)(void); + +void somefunction() { + noop = ^int *{}; // expected-error {{expected expression}} + + noop = ^noop; // expected-error {{expected expression}} +} -- 2.40.0