[llvm-commits] [llvm-gcc-4.2] r56722 - in /llvm-gcc-4.2/trunk/gcc: c-common.c c-parser.c cp/parser.c
Bill Wendling
isanbard at gmail.com
Fri Sep 26 17:16:58 PDT 2008
Author: void
Date: Fri Sep 26 19:16:58 2008
New Revision: 56722
URL: http://llvm.org/viewvc/llvm-project?rev=56722&view=rev
Log:
Ability to add attributes to blocks.
Modified:
llvm-gcc-4.2/trunk/gcc/c-common.c
llvm-gcc-4.2/trunk/gcc/c-parser.c
llvm-gcc-4.2/trunk/gcc/cp/parser.c
Modified: llvm-gcc-4.2/trunk/gcc/c-common.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/c-common.c?rev=56722&r1=56721&r2=56722&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/c-common.c (original)
+++ llvm-gcc-4.2/trunk/gcc/c-common.c Fri Sep 26 19:16:58 2008
@@ -4504,6 +4504,14 @@
= build_pointer_type
(build_type_variant (TREE_TYPE (type),
TYPE_READONLY (TREE_TYPE (type)), 1));
+ /* APPLE LOCAL begin radar 6237713 */
+ else if (TREE_CODE (type) == BLOCK_POINTER_TYPE
+ && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
+ TREE_TYPE (*node)
+ = build_block_pointer_type
+ (build_type_variant (TREE_TYPE (type),
+ TYPE_READONLY (TREE_TYPE (type)), 1));
+ /* APPLE LOCAL end radar 6237713 */
else
{
warning (OPT_Wattributes, "%qE attribute ignored", name);
Modified: llvm-gcc-4.2/trunk/gcc/c-parser.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/c-parser.c?rev=56722&r1=56721&r2=56722&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/c-parser.c (original)
+++ llvm-gcc-4.2/trunk/gcc/c-parser.c Fri Sep 26 19:16:58 2008
@@ -9948,15 +9948,29 @@
tree block;
/* APPLE LOCAL radar 6185344 */
tree declared_block_return_type = NULL_TREE;
+ /* APPLE LOCAL radar 6237713 */
+ tree attributes = NULL_TREE;
c_parser_consume_token (parser); /* eat '^' */
+ /* APPLE LOCAL begin radar 6237713 */
+ if (c_parser_next_token_is_keyword (parser, RID_ATTRIBUTE))
+ attributes = c_parser_attributes (parser);
+ /* APPLE LOCAL end radar 6237713 */
+
/* APPLE LOCAL begin radar 6185344 */
/* Parse user declared return type. */
if (!c_parser_next_token_is (parser, CPP_OPEN_PAREN) &&
!c_parser_next_token_is (parser, CPP_OPEN_BRACE))
{
struct c_type_name *type;
+ /* APPLE LOCAL begin radar 6237713 */
+ if (attributes)
+ {
+ warning (0, "attribute before block type is ignored");
+ attributes = NULL_TREE;
+ }
+ /* APPLE LOCAL end radar 6237713 */
parsing_block_return_type = 1;
type = c_parser_type_name (parser);
parsing_block_return_type = 0;
@@ -10061,6 +10075,12 @@
/* Enter parameter list to the scope of the helper function. */
store_parm_decls_from (cur_block->arg_info);
+ /* APPLE LOCAL begin radar 6237713 */
+ if (c_parser_next_token_is_keyword (parser, RID_ATTRIBUTE))
+ attributes = c_parser_attributes (parser);
+ decl_attributes (&cur_block->helper_func_decl, attributes, 0);
+ /* APPLE LOCAL end radar 6237713 */
+
/* Start parsing body or expression part of the block literal. */
if (c_parser_next_token_is (parser, CPP_OPEN_BRACE)) {
tree save_c_break_label = c_break_label;
Modified: llvm-gcc-4.2/trunk/gcc/cp/parser.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/cp/parser.c?rev=56722&r1=56721&r2=56722&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/cp/parser.c (original)
+++ llvm-gcc-4.2/trunk/gcc/cp/parser.c Fri Sep 26 19:16:58 2008
@@ -21101,17 +21101,31 @@
tree block;
/* APPLE LOCAL radar 6185344 */
tree declared_block_return_type = NULL_TREE;
+ /* APPLE LOCAL radar 6237713 */
+ tree attributes = NULL_TREE;
/* APPLE LOCAL radar 6169580 */
int context_is_nonstatic_method;
cp_lexer_consume_token (parser->lexer); /* eat '^' */
+ /* APPLE LOCAL begin radar 6237713 */
+ if (cp_lexer_peek_token (parser->lexer)->keyword == RID_ATTRIBUTE)
+ attributes = cp_parser_attributes_opt (parser);
+ /* APPLE LOCAL end radar 6237713 */
+
/* APPLE LOCAL begin radar 6185344 */
/* Parse user declared return type. */
if (!cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN) &&
!cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
{
tree type;
+ /* APPLE LOCAL begin radar 6237713 */
+ if (attributes)
+ {
+ warning (0, "attribute before block type is ignored");
+ attributes = NULL_TREE;
+ }
+ /* APPLE LOCAL end radar 6237713 */
parsing_block_return_type = 1;
type = cp_parser_type_id (parser);
parsing_block_return_type = 0;
@@ -21222,6 +21236,11 @@
start_preparsed_function (cur_block->helper_func_decl,
/*attrs*/NULL_TREE,
SF_PRE_PARSED);
+ /* APPLE LOCAL begin radar 6237713 */
+ if (cp_lexer_peek_token (parser->lexer)->keyword == RID_ATTRIBUTE)
+ attributes = cp_parser_attributes_opt (parser);
+ decl_attributes (&cur_block->helper_func_decl, attributes, 0);
+ /* APPLE LOCAL end radar 6237713 */
/* Start parsing body or expression part of the block literal. */
{
More information about the llvm-commits
mailing list