From: Mike Stump Date: Thu, 7 May 2009 21:56:17 +0000 (+0000) Subject: Allow qualifiers on blocks. Radar 6441502 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7bc8d964405ce3b0b95091cdb66a391e50275b3c;p=clang Allow qualifiers on blocks. Radar 6441502 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71183 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaType.cpp b/lib/Sema/SemaType.cpp index 6f9818f350..08a5770196 100644 --- a/lib/Sema/SemaType.cpp +++ b/lib/Sema/SemaType.cpp @@ -666,12 +666,11 @@ QualType Sema::GetTypeForDeclarator(Declarator &D, Scope *S, unsigned Skip) { if (!LangOpts.Blocks) Diag(DeclType.Loc, diag::err_blocks_disable); - if (DeclType.Cls.TypeQuals) - Diag(D.getIdentifierLoc(), diag::err_qualified_block_pointer_type); if (!T.getTypePtr()->isFunctionType()) Diag(D.getIdentifierLoc(), diag::err_nonfunction_block_type); else - T = Context.getBlockPointerType(T); + T = (Context.getBlockPointerType(T) + .getQualifiedType(DeclType.Cls.TypeQuals)); break; case DeclaratorChunk::Pointer: T = BuildPointerType(T, DeclType.Ptr.TypeQuals, DeclType.Loc, Name); diff --git a/test/Sema/block-misc.c b/test/Sema/block-misc.c index 6c62376dc4..93ca3c49d4 100644 --- a/test/Sema/block-misc.c +++ b/test/Sema/block-misc.c @@ -180,3 +180,8 @@ void test17() { (void)(1 < bp); // expected-error {{invalid operands to binary expression}} (void)(0 < bp); // expected-error {{invalid operands to binary expression}} } + +void test18() { + void (^const blockA)(void) = ^{ }; + blockA = ^{ }; // expected-error {{read-only variable is not assignable}} +}