[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