svn commit: r260018 - in user/gjb/hacking/release-embedded: contrib/gcc contrib/gcc/cp contrib/gcc/doc contrib/libc++/include lib/libiconv_modules/BIG5 lib/libiconv_modules/DECHanyu lib/libiconv_mo...

Glen Barber gjb at FreeBSD.org
Sat Dec 28 22:27:01 UTC 2013


Author: gjb
Date: Sat Dec 28 22:26:57 2013
New Revision: 260018
URL: http://svnweb.freebsd.org/changeset/base/260018

Log:
  MFH: Tracking commit.
  
  Sponsored by:	The FreeBSD Foundation

Added:
  user/gjb/hacking/release-embedded/contrib/gcc/ChangeLog.apple
     - copied unchanged from r260017, head/contrib/gcc/ChangeLog.apple
  user/gjb/hacking/release-embedded/contrib/gcc/cp/ChangeLog.apple
     - copied unchanged from r260017, head/contrib/gcc/cp/ChangeLog.apple
Modified:
  user/gjb/hacking/release-embedded/contrib/gcc/c-common.c
  user/gjb/hacking/release-embedded/contrib/gcc/c-decl.c
  user/gjb/hacking/release-embedded/contrib/gcc/c-parser.c
  user/gjb/hacking/release-embedded/contrib/gcc/c-tree.h
  user/gjb/hacking/release-embedded/contrib/gcc/c-typeck.c
  user/gjb/hacking/release-embedded/contrib/gcc/cp/cp-gimplify.c
  user/gjb/hacking/release-embedded/contrib/gcc/cp/cp-tree.def
  user/gjb/hacking/release-embedded/contrib/gcc/cp/cp-tree.h
  user/gjb/hacking/release-embedded/contrib/gcc/cp/decl.c
  user/gjb/hacking/release-embedded/contrib/gcc/cp/dump.c
  user/gjb/hacking/release-embedded/contrib/gcc/cp/init.c
  user/gjb/hacking/release-embedded/contrib/gcc/cp/parser.c
  user/gjb/hacking/release-embedded/contrib/gcc/cp/pt.c
  user/gjb/hacking/release-embedded/contrib/gcc/cp/semantics.c
  user/gjb/hacking/release-embedded/contrib/gcc/doc/extend.texi
  user/gjb/hacking/release-embedded/contrib/gcc/dwarf2out.c
  user/gjb/hacking/release-embedded/contrib/gcc/emit-rtl.c
  user/gjb/hacking/release-embedded/contrib/gcc/final.c
  user/gjb/hacking/release-embedded/contrib/gcc/print-rtl.c
  user/gjb/hacking/release-embedded/contrib/gcc/print-tree.c
  user/gjb/hacking/release-embedded/contrib/gcc/rtl.def
  user/gjb/hacking/release-embedded/contrib/gcc/rtl.h
  user/gjb/hacking/release-embedded/contrib/gcc/stmt.c
  user/gjb/hacking/release-embedded/contrib/gcc/toplev.c
  user/gjb/hacking/release-embedded/contrib/gcc/toplev.h
  user/gjb/hacking/release-embedded/contrib/gcc/tree-cfg.c
  user/gjb/hacking/release-embedded/contrib/gcc/tree.h
  user/gjb/hacking/release-embedded/contrib/libc++/include/type_traits
  user/gjb/hacking/release-embedded/lib/libiconv_modules/BIG5/citrus_big5.c
  user/gjb/hacking/release-embedded/lib/libiconv_modules/DECHanyu/citrus_dechanyu.c
  user/gjb/hacking/release-embedded/lib/libiconv_modules/EUC/citrus_euc.c
  user/gjb/hacking/release-embedded/lib/libiconv_modules/EUCTW/citrus_euctw.c
  user/gjb/hacking/release-embedded/lib/libiconv_modules/GBK2K/citrus_gbk2k.c
  user/gjb/hacking/release-embedded/lib/libiconv_modules/HZ/citrus_hz.c
  user/gjb/hacking/release-embedded/lib/libiconv_modules/ISO2022/citrus_iso2022.c
  user/gjb/hacking/release-embedded/lib/libiconv_modules/JOHAB/citrus_johab.c
  user/gjb/hacking/release-embedded/lib/libiconv_modules/MSKanji/citrus_mskanji.c
  user/gjb/hacking/release-embedded/lib/libiconv_modules/UES/citrus_ues.c
  user/gjb/hacking/release-embedded/lib/libiconv_modules/UTF7/citrus_utf7.c
  user/gjb/hacking/release-embedded/lib/libiconv_modules/UTF8/citrus_utf8.c
  user/gjb/hacking/release-embedded/lib/libiconv_modules/VIQR/citrus_viqr.c
  user/gjb/hacking/release-embedded/lib/libiconv_modules/ZW/citrus_zw.c
  user/gjb/hacking/release-embedded/sys/dev/iwn/if_iwn_chip_cfg.h
  user/gjb/hacking/release-embedded/sys/dev/sk/if_sk.c
  user/gjb/hacking/release-embedded/sys/ia64/ia64/dump_machdep.c
  user/gjb/hacking/release-embedded/sys/sys/param.h
  user/gjb/hacking/release-embedded/sys/sys/pctrie.h
  user/gjb/hacking/release-embedded/sys/vm/vm_reserv.c
  user/gjb/hacking/release-embedded/usr.sbin/bhyve/acpi.c
  user/gjb/hacking/release-embedded/usr.sbin/bhyve/acpi.h
  user/gjb/hacking/release-embedded/usr.sbin/bhyve/mevent.c
  user/gjb/hacking/release-embedded/usr.sbin/bhyve/mevent.h
  user/gjb/hacking/release-embedded/usr.sbin/bhyve/mptbl.c
  user/gjb/hacking/release-embedded/usr.sbin/bhyve/pm.c
  user/gjb/hacking/release-embedded/usr.sbin/bhyve/pmtmr.c
Directory Properties:
  user/gjb/hacking/release-embedded/   (props changed)

Copied: user/gjb/hacking/release-embedded/contrib/gcc/ChangeLog.apple (from r260017, head/contrib/gcc/ChangeLog.apple)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/gjb/hacking/release-embedded/contrib/gcc/ChangeLog.apple	Sat Dec 28 22:26:57 2013	(r260018, copy of r260017, head/contrib/gcc/ChangeLog.apple)
@@ -0,0 +1,51 @@
+006-02-15   Fariborz Jahanian <fjahanian at apple.com>
+
+	Radar 4445586
+	* c-common.def (DO_STMT): Takes an extra argument.
+
+/* APPLE LOCAL merge marger */
+/* Stuff under is in fsf mainline, but not in the 4.2 branch */
+
+2007-08-02  Geoffrey Keating  <geoffk at apple.com>
+
+	Radar 3274130, 5295549
+	* c-parser.c (c_parser_while_statement): Handle attributes.
+	(c_parser_do_statement): Handle attributes.
+	(c_parser_for_statement): Handle attributes.
+	* c-common.c (handle_unused_attribute): Warn if a statement
+	is marked as unused.
+	* c-tree.h (c_finish_loop): Add extra parameter.
+	* c-typeck.c (c_finish_loop): Handle attributes.
+	* doc/extend.texi (Attribute Syntax): Document statement attributes.
+	(Label Attributes): Explain how they apply to statements.
+	* tree-cfg.c (cleanup_dead_labels): Preserve labels with
+	user-specified alignment or attributes.
+	* stmt.c (expand_label): Update and correct documentation.
+
+	* c-common.c (handle_aligned_attribute): Handle LABEL_DECL.
+	* rtl.def (CODE_LABEL): Add 8th operand.
+	* rtl.h (LABEL_ALIGN_LOG): New.
+	(LABEL_MAX_SKIP): New.
+	(SET_LABEL_ALIGN): New.
+	* emit-rtl.c (gen_label_rtx): Adjust.
+	* print-rtl.c (print_rtx): Print LABEL_ALIGN_LOG.
+	* stmt.c (label_rtx): Set CODE_LABEL's alignment from DECL_ALIGN.
+	(expand_label): Update documentation.
+	* final.c (struct label_alignment): Delete.
+	(label_align): Delete.
+	(min_labelno): Delete.
+	(max_labelno): Delete.
+	(LABEL_TO_ALIGNMENT): Delete.
+	(LABEL_TO_MAX_SKIP): Delete.
+	(label_to_alignment): Adjust for LABEL_ALIGN_LOG.
+	(align_fuzz): Likewise.
+	(compute_alignments): Likewise.
+	(shorten_branches): Remove code to set up label_align.
+	Adjust for LABEL_ALIGN_LOG.
+	(final_scan_insn): Adjust for LABEL_ALIGN_LOG.
+	* doc/extend.texi (C Extensions): Add 'Label Attributes' to menu.
+	(Attribute Syntax): Move label content to Label Attributes.
+	(Function Attributes): Mention label attributes.
+	(Variable Attributes): Mention label attributes.
+	(Type Attributes): Mention label attributes.
+	(Label Attributes): New.

Modified: user/gjb/hacking/release-embedded/contrib/gcc/c-common.c
==============================================================================
--- user/gjb/hacking/release-embedded/contrib/gcc/c-common.c	Sat Dec 28 21:31:58 2013	(r260017)
+++ user/gjb/hacking/release-embedded/contrib/gcc/c-common.c	Sat Dec 28 22:26:57 2013	(r260018)
@@ -541,6 +541,9 @@ static tree handle_pure_attribute (tree 
 static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
 static tree handle_deprecated_attribute (tree *, tree, tree, int,
 					 bool *);
+/* APPLE LOCAL begin "unavailable" attribute (Radar 2809697) --ilr */
+static tree handle_unavailable_attribute (tree *, tree, tree, int,  bool *);
+/* APPLE LOCAL end "unavailable" attribute --ilr */
 static tree handle_vector_size_attribute (tree *, tree, tree, int,
 					  bool *);
 static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
@@ -626,6 +629,10 @@ const struct attribute_spec c_common_att
 			      handle_novops_attribute },
   { "deprecated",             0, 0, false, false, false,
 			      handle_deprecated_attribute },
+  /* APPLE LOCAL begin "unavailable" attribute (Radar 2809697) --ilr */
+  { "unavailable",            0, 0, false, false, false,
+			      handle_unavailable_attribute },
+  /* APPLE LOCAL end "unavailable" attribute --ilr */
   { "vector_size",	      1, 1, false, true, false,
 			      handle_vector_size_attribute },
   { "visibility",	      1, 1, false, false, false,
@@ -4394,7 +4401,10 @@ handle_unused_attribute (tree *node, tre
       if (TREE_CODE (decl) == PARM_DECL
 	  || TREE_CODE (decl) == VAR_DECL
 	  || TREE_CODE (decl) == FUNCTION_DECL
-	  || TREE_CODE (decl) == LABEL_DECL
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+	  || (TREE_CODE (decl) == LABEL_DECL
+	      && ! DECL_ARTIFICIAL (decl))
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 	  || TREE_CODE (decl) == TYPE_DECL)
 	TREE_USED (decl) = 1;
       else
@@ -4842,7 +4852,10 @@ handle_aligned_attribute (tree *node, tr
       TYPE_USER_ALIGN (*type) = 1;
     }
   else if (! VAR_OR_FUNCTION_DECL_P (decl)
-	   && TREE_CODE (decl) != FIELD_DECL)
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+	   && TREE_CODE (decl) != FIELD_DECL
+	   && TREE_CODE (decl) != LABEL_DECL)
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
     {
       error ("alignment may not be specified for %q+D", decl);
       *no_add_attrs = true;
@@ -5345,6 +5358,67 @@ handle_deprecated_attribute (tree *node,
   return NULL_TREE;
 }
 
+/* APPLE LOCAL begin "unavailable" attribute (Radar 2809697) --ilr */
+/* Handle a "unavailable" attribute; arguments as in
+   struct attribute_spec.handler.  */
+
+static tree
+handle_unavailable_attribute (tree *node, tree name,
+			      tree args ATTRIBUTE_UNUSED,
+			      int flags ATTRIBUTE_UNUSED,
+			      bool *no_add_attrs)
+{
+  tree type = NULL_TREE;
+  int warn = 0;
+  const char *what = NULL;
+
+  if (DECL_P (*node))
+    {
+      tree decl = *node;
+      type = TREE_TYPE (decl);
+
+      if (TREE_CODE (decl) == TYPE_DECL
+      	  || TREE_CODE (decl) == PARM_DECL
+	  || TREE_CODE (decl) == VAR_DECL
+	  || TREE_CODE (decl) == FUNCTION_DECL)
+	{
+	  TREE_UNAVAILABLE (decl) = 1;
+	}
+      else
+	warn = 1;
+    }
+  else if (TYPE_P (*node))
+    {
+      if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
+	*node = build_variant_type_copy (*node);
+      TREE_UNAVAILABLE (*node) = 1;
+      type = *node;
+    }
+  else
+    warn = 1;
+
+  if (warn)
+    {
+      *no_add_attrs = true;
+      if (type && TYPE_NAME (type))
+	{
+	  if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
+	    what = IDENTIFIER_POINTER (TYPE_NAME (*node));
+	  else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
+		   && DECL_NAME (TYPE_NAME (type)))
+	    what = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
+	}
+      if (what)
+	warning (0, "`%s' attribute ignored for `%s'",
+		 IDENTIFIER_POINTER (name), what);
+      else
+	warning (0, "`%s' attribute ignored", IDENTIFIER_POINTER (name));
+    }
+
+  return NULL_TREE;
+}
+/* APPLE LOCAL end "unavailable" attribute --ilr */
+
 /* Handle a "vector_size" attribute; arguments as in
    struct attribute_spec.handler.  */
 

Modified: user/gjb/hacking/release-embedded/contrib/gcc/c-decl.c
==============================================================================
--- user/gjb/hacking/release-embedded/contrib/gcc/c-decl.c	Sat Dec 28 21:31:58 2013	(r260017)
+++ user/gjb/hacking/release-embedded/contrib/gcc/c-decl.c	Sat Dec 28 22:26:57 2013	(r260018)
@@ -453,10 +453,17 @@ add_stmt (tree t)
    with __attribute__((deprecated)).  An object declared as
    __attribute__((deprecated)) suppresses warnings of uses of other
    deprecated items.  */
+/* APPLE LOCAL begin "unavailable" attribute (radar 2809697) */
+/* Also add an __attribute__((unavailable)).  An object declared as
+   __attribute__((unavailable)) suppresses any reports of being
+   declared with unavailable or deprecated items.  */
+/* APPLE LOCAL end "unavailable" attribute (radar 2809697) */
 
 enum deprecated_states {
   DEPRECATED_NORMAL,
   DEPRECATED_SUPPRESS
+  /* APPLE LOCAL "unavailable" attribute (radar 2809697) */
+  , DEPRECATED_UNAVAILABLE_SUPPRESS
 };
 
 static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
@@ -1709,6 +1716,12 @@ merge_decls (tree newdecl, tree olddecl,
   if (TREE_DEPRECATED (newdecl))
     TREE_DEPRECATED (olddecl) = 1;
 
+  /* APPLE LOCAL begin "unavailable" attribute (radar 2809697) */
+  /* Merge unavailableness.  */
+  if (TREE_UNAVAILABLE (newdecl))
+    TREE_UNAVAILABLE (olddecl) = 1;
+  /* APPLE LOCAL end "unavailable" attribute (radar 2809697) */
+
   /* Keep source location of definition rather than declaration and of
      prototype rather than non-prototype unless that prototype is
      built-in.  */
@@ -3222,8 +3235,36 @@ start_decl (struct c_declarator *declara
 
   /* An object declared as __attribute__((deprecated)) suppresses
      warnings of uses of other deprecated items.  */
+  /* APPLE LOCAL begin "unavailable" attribute (radar 2809697) */
+  /* An object declared as __attribute__((unavailable)) suppresses
+     any reports of being declared with unavailable or deprecated
+     items.  An object declared as __attribute__((deprecated))
+     suppresses warnings of uses of other deprecated items.  */
+#ifdef A_LESS_INEFFICENT_WAY /* which I really don't want to do!  */
   if (lookup_attribute ("deprecated", attributes))
     deprecated_state = DEPRECATED_SUPPRESS;
+  else if (lookup_attribute ("unavailable", attributes))
+    deprecated_state = DEPRECATED_UNAVAILABLE_SUPPRESS;
+#else /* a more efficient way doing what lookup_attribute would do */
+  tree a;
+
+  for (a = attributes; a; a = TREE_CHAIN (a))
+    {
+      tree name = TREE_PURPOSE (a);
+      if (TREE_CODE (name) == IDENTIFIER_NODE)
+        if (is_attribute_p ("deprecated", name))
+	  {
+	    deprecated_state = DEPRECATED_SUPPRESS;
+	    break;
+	  }
+        if (is_attribute_p ("unavailable", name))
+	  {
+	    deprecated_state = DEPRECATED_UNAVAILABLE_SUPPRESS;
+	    break;
+	  }
+    }
+#endif
+  /* APPLE LOCAL end "unavailable" attribute (radar 2809697) */
 
   decl = grokdeclarator (declarator, declspecs,
 			 NORMAL, initialized, NULL);
@@ -4087,6 +4128,11 @@ grokdeclarator (const struct c_declarato
   /* If this looks like a function definition, make it one,
      even if it occurs where parms are expected.
      Then store_parm_decls will reject it and not use it as a parm.  */
+  /* APPLE LOCAL begin "unavailable" attribute (radar 2809697) */
+  if (declspecs->unavailable_p)
+    error_unavailable_use (declspecs->type);
+  else
+  /* APPLE LOCAL end "unavailable" attribute (radar 2809697) */
   if (decl_context == NORMAL && !funcdef_flag && current_scope->parm_flag)
     decl_context = PARM;
 
@@ -7267,6 +7313,8 @@ build_null_declspecs (void)
   ret->tag_defined_p = false;
   ret->explicit_signed_p = false;
   ret->deprecated_p = false;
+  /* APPLE LOCAL "unavailable" attribute (radar 2809697) */
+  ret->unavailable_p = false;
   ret->default_int_p = false;
   ret->long_p = false;
   ret->long_long_p = false;
@@ -7330,6 +7378,11 @@ declspecs_add_type (struct c_declspecs *
   if (TREE_DEPRECATED (type))
     specs->deprecated_p = true;
 
+  /* APPLE LOCAL begin "unavailable" attribute (radar 2809697) */
+  if (TREE_UNAVAILABLE (type))
+    specs->unavailable_p = true;
+  /* APPLE LOCAL end "unavailable" attribute (radar 2809697) */
+
   /* Handle type specifier keywords.  */
   if (TREE_CODE (type) == IDENTIFIER_NODE && C_IS_RESERVED_WORD (type))
     {

Modified: user/gjb/hacking/release-embedded/contrib/gcc/c-parser.c
==============================================================================
--- user/gjb/hacking/release-embedded/contrib/gcc/c-parser.c	Sat Dec 28 21:31:58 2013	(r260017)
+++ user/gjb/hacking/release-embedded/contrib/gcc/c-parser.c	Sat Dec 28 22:26:57 2013	(r260018)
@@ -3940,16 +3940,25 @@ c_parser_switch_statement (c_parser *par
 /* Parse a while statement (C90 6.6.5, C99 6.8.5).
 
    while-statement:
-      while (expression) statement
+   APPLE LOCAL begin for-fsf-4_4 3274130 5295549
+      while attributes (expression) statement
+
+   The use of attributes is a GNU extension.
+   APPLE LOCAL end for-fsf-4_4 3274130 5295549
 */
 
 static void
 c_parser_while_statement (c_parser *parser)
 {
-  tree block, cond, body, save_break, save_cont;
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+  tree block, cond, body, save_break, save_cont, attrs;
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
   location_t loc;
   gcc_assert (c_parser_next_token_is_keyword (parser, RID_WHILE));
   c_parser_consume_token (parser);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+  attrs = c_parser_attributes (parser);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
   block = c_begin_compound_stmt (flag_isoc99);
   loc = c_parser_peek_token (parser)->location;
   cond = c_parser_paren_condition (parser);
@@ -3958,7 +3967,10 @@ c_parser_while_statement (c_parser *pars
   save_cont = c_cont_label;
   c_cont_label = NULL_TREE;
   body = c_parser_c99_block_statement (parser);
-  c_finish_loop (loc, cond, NULL, body, c_break_label, c_cont_label, true);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+  c_finish_loop (loc, cond, NULL, body, c_break_label, c_cont_label, attrs,
+		 true);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
   add_stmt (c_end_compound_stmt (block, flag_isoc99));
   c_break_label = save_break;
   c_cont_label = save_cont;
@@ -3967,16 +3979,25 @@ c_parser_while_statement (c_parser *pars
 /* Parse a do statement (C90 6.6.5, C99 6.8.5).
 
    do-statement:
-     do statement while ( expression ) ;
+   APPLE LOCAL begin for-fsf-4_4 3274130 5295549
+     do attributes statement while ( expression ) ;
+
+   The use of attributes is a GNU extension.
+   APPLE LOCAL end for-fsf-4_4 3274130 5295549
 */
 
 static void
 c_parser_do_statement (c_parser *parser)
 {
-  tree block, cond, body, save_break, save_cont, new_break, new_cont;
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+  tree block, cond, body, save_break, save_cont, new_break, new_cont, attrs;
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
   location_t loc;
   gcc_assert (c_parser_next_token_is_keyword (parser, RID_DO));
   c_parser_consume_token (parser);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+  attrs = c_parser_attributes (parser);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
   block = c_begin_compound_stmt (flag_isoc99);
   loc = c_parser_peek_token (parser)->location;
   save_break = c_break_label;
@@ -3992,18 +4013,26 @@ c_parser_do_statement (c_parser *parser)
   cond = c_parser_paren_condition (parser);
   if (!c_parser_require (parser, CPP_SEMICOLON, "expected %<;%>"))
     c_parser_skip_to_end_of_block_or_statement (parser);
-  c_finish_loop (loc, cond, NULL, body, new_break, new_cont, false);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+  c_finish_loop (loc, cond, NULL, body, new_break, new_cont, attrs, false);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
   add_stmt (c_end_compound_stmt (block, flag_isoc99));
 }
 
 /* Parse a for statement (C90 6.6.5, C99 6.8.5).
 
    for-statement:
-     for ( expression[opt] ; expression[opt] ; expression[opt] ) statement
-     for ( nested-declaration expression[opt] ; expression[opt] ) statement
+   APPLE LOCAL begin for-fsf-4_4 3274130 5295549
+     for attributes ( expression[opt] ; expression[opt] ; expression[opt] ) \
+         statement
+     for attributes ( nested-declaration expression[opt] ; expression[opt] ) \
+         statement
 
    The form with a declaration is new in C99.
 
+   The use of attributes is a GNU extension.
+
+   APPLE LOCAL end for-fsf-4_4 3274130 5295549
    ??? In accordance with the old parser, the declaration may be a
    nested function, which is then rejected in check_for_loop_decls,
    but does it make any sense for this to be included in the grammar?
@@ -4015,11 +4044,16 @@ c_parser_do_statement (c_parser *parser)
 static void
 c_parser_for_statement (c_parser *parser)
 {
-  tree block, cond, incr, save_break, save_cont, body;
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+  tree block, cond, incr, save_break, save_cont, body, attrs;
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
   location_t loc;
   gcc_assert (c_parser_next_token_is_keyword (parser, RID_FOR));
   loc = c_parser_peek_token (parser)->location;
   c_parser_consume_token (parser);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+  attrs = c_parser_attributes (parser);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
   block = c_begin_compound_stmt (flag_isoc99);
   if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
     {
@@ -4094,7 +4128,10 @@ c_parser_for_statement (c_parser *parser
   save_cont = c_cont_label;
   c_cont_label = NULL_TREE;
   body = c_parser_c99_block_statement (parser);
-  c_finish_loop (loc, cond, incr, body, c_break_label, c_cont_label, true);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+    c_finish_loop (loc, cond, incr, body, c_break_label, c_cont_label, attrs,
+		   true);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
   add_stmt (c_end_compound_stmt (block, flag_isoc99));
   c_break_label = save_break;
   c_cont_label = save_cont;

Modified: user/gjb/hacking/release-embedded/contrib/gcc/c-tree.h
==============================================================================
--- user/gjb/hacking/release-embedded/contrib/gcc/c-tree.h	Sat Dec 28 21:31:58 2013	(r260017)
+++ user/gjb/hacking/release-embedded/contrib/gcc/c-tree.h	Sat Dec 28 22:26:57 2013	(r260018)
@@ -257,6 +257,10 @@ struct c_declspecs {
   BOOL_BITFIELD explicit_signed_p : 1;
   /* Whether the specifiers include a deprecated typedef.  */
   BOOL_BITFIELD deprecated_p : 1;
+  /* APPLE LOCAL begin "unavailable" attribute (radar 2809697) */
+  /* Whether the specifiers include a unavailable typedef.  */
+  BOOL_BITFIELD unavailable_p : 1;
+  /* APPLE LOCAL end "unavailable" attribute (radar 2809697) */
   /* Whether the type defaulted to "int" because there were no type
      specifiers.  */
   BOOL_BITFIELD default_int_p;
@@ -573,7 +577,10 @@ extern int c_types_compatible_p (tree, t
 extern tree c_begin_compound_stmt (bool);
 extern tree c_end_compound_stmt (tree, bool);
 extern void c_finish_if_stmt (location_t, tree, tree, tree, bool);
-extern void c_finish_loop (location_t, tree, tree, tree, tree, tree, bool);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+extern void c_finish_loop (location_t, tree, tree, tree, tree, tree, tree,
+			   bool);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 extern tree c_begin_stmt_expr (void);
 extern tree c_finish_stmt_expr (tree);
 extern tree c_process_expr_stmt (tree);

Modified: user/gjb/hacking/release-embedded/contrib/gcc/c-typeck.c
==============================================================================
--- user/gjb/hacking/release-embedded/contrib/gcc/c-typeck.c	Sat Dec 28 21:31:58 2013	(r260017)
+++ user/gjb/hacking/release-embedded/contrib/gcc/c-typeck.c	Sat Dec 28 22:26:57 2013	(r260018)
@@ -1849,6 +1849,11 @@ build_component_ref (tree datum, tree co
 	  if (TREE_DEPRECATED (subdatum))
 	    warn_deprecated_use (subdatum);
 
+	  /* APPLE LOCAL begin "unavailable" attribute (radar 2809697) */
+	  if (TREE_UNAVAILABLE (subdatum))
+	    error_unavailable_use (subdatum);
+	  /* APPLE LOCAL end "unavailable" attribute (radar 2809697) */
+
 	  datum = ref;
 
 	  field = TREE_CHAIN (field);
@@ -2090,6 +2095,11 @@ build_external_ref (tree id, int fun, lo
   if (TREE_DEPRECATED (ref))
     warn_deprecated_use (ref);
 
+  /* APPLE LOCAL begin "unavailable" attribute (radar 2809697) */
+  if (TREE_UNAVAILABLE (ref))
+    error_unavailable_use (ref);
+  /* APPLE LOCAL end "unavailable" attribute (radar 2809697) */
+
   if (!skip_evaluation)
     assemble_external (ref);
   TREE_USED (ref) = 1;
@@ -7247,15 +7257,22 @@ c_finish_if_stmt (location_t if_locus, t
   add_stmt (stmt);
 }
 
-/* Emit a general-purpose loop construct.  START_LOCUS is the location of
-   the beginning of the loop.  COND is the loop condition.  COND_IS_FIRST
-   is false for DO loops.  INCR is the FOR increment expression.  BODY is
-   the statement controlled by the loop.  BLAB is the break label.  CLAB is
-   the continue label.  Everything is allowed to be NULL.  */
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+/* Emit a general-purpose loop construct.  START_LOCUS is the location
+   of the beginning of the loop.  COND is the loop condition.
+   COND_IS_FIRST is false for DO loops.  INCR is the FOR increment
+   expression.  BODY is the statement controlled by the loop.  BLAB is
+   the break label.  CLAB is the continue label.  ATTRS is the
+   attributes associated with the loop, which at present are
+   associated with the topmost label.  Everything is allowed to be
+   NULL.  */
 
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 void
 c_finish_loop (location_t start_locus, tree cond, tree incr, tree body,
-	       tree blab, tree clab, bool cond_is_first)
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+	       tree blab, tree clab, tree attrs, bool cond_is_first)
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 {
   tree entry = NULL, exit = NULL, t;
 

Copied: user/gjb/hacking/release-embedded/contrib/gcc/cp/ChangeLog.apple (from r260017, head/contrib/gcc/cp/ChangeLog.apple)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/gjb/hacking/release-embedded/contrib/gcc/cp/ChangeLog.apple	Sat Dec 28 22:26:57 2013	(r260018, copy of r260017, head/contrib/gcc/cp/ChangeLog.apple)
@@ -0,0 +1,31 @@
+2006-02-15   Fariborz Jahanian <fjahanian at apple.com>
+
+        Radar 4445586
+	* semantics.c (begin_do_stmt): DO_STMT nodes take an
+	extra argument to build.
+
+ # APPLE LOCAL begin for-fsf-4_4 3274130 5295549
+2007-08-03  Geoffrey Keating  <geoffk at apple.com>
+
+	Radar 5295549
+	* parser.c (cp_parser_iteration_statement): Handle attributes.
+	* semantics.c (begin_for_stmt): Put attributes in built tree.
+	(begin_while_stmt): Put attributes in built tree.
+	(begin_do_stmt): Put attributes in built tree.
+	* pt.c (tsubst_expr): Handle attributes for FOR_STMT, WHILE_STMT,
+	DO_STMT.
+	* cp-gimplify.c (gimplify_cp_loop): Handle attributes.
+	(gimplify_for_stmt): Pass attributes to gimplify_cp_loop.
+	(gimplify_while_stmt): Pass attributes to gimplify_cp_loop.
+	(gimplify_do_stmt): Pass attributes to gimplify_cp_loop.
+	* dump.c (cp_dump_tree): Dump attributes for FOR_STMT, WHILE_STMT,
+	DO_STMT.
+	* cp-tree.h (begin_while_stmt): Update prototype.
+	(begin_do_stmt): Likewise.
+	(begin_for_stmt): Likewise.
+	* cp-tree.def (FOR_STMT): Add extra parameter.
+	(WHILE_STMT): Likewise.
+	(DO_STMT): Likewise.
+	* init.c (build_vec_init): Update for change to begin_for_stmt.
+
+ # APPLE LOCAL end for-fsf-4_4 3274130 5295549

Modified: user/gjb/hacking/release-embedded/contrib/gcc/cp/cp-gimplify.c
==============================================================================
--- user/gjb/hacking/release-embedded/contrib/gcc/cp/cp-gimplify.c	Sat Dec 28 21:31:58 2013	(r260017)
+++ user/gjb/hacking/release-embedded/contrib/gcc/cp/cp-gimplify.c	Sat Dec 28 22:26:57 2013	(r260018)
@@ -188,7 +188,10 @@ gimplify_if_stmt (tree *stmt_p)
    loop body as in do-while loops.  */
 
 static tree
-gimplify_cp_loop (tree cond, tree body, tree incr, bool cond_is_first)
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+gimplify_cp_loop (tree cond, tree body, tree incr, tree attrs,
+		  bool cond_is_first, tree inner_foreach)
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 {
   tree top, entry, exit, cont_block, break_block, stmt_list, t;
   location_t stmt_locus;
@@ -223,6 +226,12 @@ gimplify_cp_loop (tree cond, tree body, 
 	 out of the loop, or to the top of it.  If there's no exit condition,
 	 then we just build a jump back to the top.  */
       exit = build_and_jump (&LABEL_EXPR_LABEL (top));
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+
+      /* Add the attributes to the 'top' label.  */
+      decl_attributes (&LABEL_EXPR_LABEL (top), attrs, 0);
+
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
       if (cond && !integer_nonzerop (cond))
 	{
 	  t = build_bc_goto (bc_break);
@@ -270,8 +279,11 @@ gimplify_for_stmt (tree *stmt_p, tree *p
   if (FOR_INIT_STMT (stmt))
     gimplify_and_add (FOR_INIT_STMT (stmt), pre_p);
 
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
   *stmt_p = gimplify_cp_loop (FOR_COND (stmt), FOR_BODY (stmt),
-			      FOR_EXPR (stmt), 1);
+			      FOR_EXPR (stmt), FOR_ATTRIBUTES (stmt), 1,
+			      NULL_TREE);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 }
 
 /* Gimplify a WHILE_STMT node.  */
@@ -280,8 +292,11 @@ static void
 gimplify_while_stmt (tree *stmt_p)
 {
   tree stmt = *stmt_p;
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
   *stmt_p = gimplify_cp_loop (WHILE_COND (stmt), WHILE_BODY (stmt),
-			      NULL_TREE, 1);
+			      NULL_TREE, WHILE_ATTRIBUTES (stmt), 1,
+			      NULL_TREE);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 }
 
 /* Gimplify a DO_STMT node.  */
@@ -290,8 +305,11 @@ static void
 gimplify_do_stmt (tree *stmt_p)
 {
   tree stmt = *stmt_p;
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
   *stmt_p = gimplify_cp_loop (DO_COND (stmt), DO_BODY (stmt),
-			      NULL_TREE, 0);
+			      NULL_TREE, DO_ATTRIBUTES (stmt), 0,
+			      DO_FOREACH (stmt));
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 }
 
 /* Genericize a SWITCH_STMT by turning it into a SWITCH_EXPR.  */

Modified: user/gjb/hacking/release-embedded/contrib/gcc/cp/cp-tree.def
==============================================================================
--- user/gjb/hacking/release-embedded/contrib/gcc/cp/cp-tree.def	Sat Dec 28 21:31:58 2013	(r260017)
+++ user/gjb/hacking/release-embedded/contrib/gcc/cp/cp-tree.def	Sat Dec 28 22:26:57 2013	(r260018)
@@ -281,18 +281,23 @@ DEFTREECODE (CLEANUP_STMT, "cleanup_stmt
    and COND_EXPR for the benefit of templates.  */
 DEFTREECODE (IF_STMT, "if_stmt", tcc_statement, 3)
 
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
 /* Used to represent a `for' statement. The operands are
-   FOR_INIT_STMT, FOR_COND, FOR_EXPR, and FOR_BODY, respectively.  */
-DEFTREECODE (FOR_STMT, "for_stmt", tcc_statement, 4)
+   FOR_INIT_STMT, FOR_COND, FOR_EXPR, FOR_BODY and FOR_ATTRIBUTES
+   respectively.  */
+DEFTREECODE (FOR_STMT, "for_stmt", tcc_statement, 5)
 
 /* Used to represent a 'while' statement. The operands are WHILE_COND
-   and WHILE_BODY, respectively.  */
-DEFTREECODE (WHILE_STMT, "while_stmt", tcc_statement, 2)
+   WHILE_BODY, and WHILE_ATTRIBUTES respectively.  */
+DEFTREECODE (WHILE_STMT, "while_stmt", tcc_statement, 3)
 
-/* Used to represent a 'do' statement. The operands are DO_BODY and
-   DO_COND, respectively.  */
-DEFTREECODE (DO_STMT, "do_stmt", tcc_statement, 2)
+/* APPLE LOCAL begin radar 4445586 */
+/* Used to represent a 'do' statement. The operands are DO_BODY, 
+   DO_COND, DO_ATTRIBUTES, and DO_FOREACH respectively.  */
+DEFTREECODE (DO_STMT, "do_stmt", tcc_statement, 4)
+/* APPLE LOCAL end radar 4445586 */
 
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 /* Used to represent a 'break' statement.  */
 DEFTREECODE (BREAK_STMT, "break_stmt", tcc_statement, 0)
 

Modified: user/gjb/hacking/release-embedded/contrib/gcc/cp/cp-tree.h
==============================================================================
--- user/gjb/hacking/release-embedded/contrib/gcc/cp/cp-tree.h	Sat Dec 28 21:31:58 2013	(r260017)
+++ user/gjb/hacking/release-embedded/contrib/gcc/cp/cp-tree.h	Sat Dec 28 22:26:57 2013	(r260018)
@@ -3080,12 +3080,24 @@ extern void decl_shadowed_for_var_insert
    while statement and the body of the while statement, respectively.  */
 #define WHILE_COND(NODE)	TREE_OPERAND (WHILE_STMT_CHECK (NODE), 0)
 #define WHILE_BODY(NODE)	TREE_OPERAND (WHILE_STMT_CHECK (NODE), 1)
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+#define WHILE_ATTRIBUTES(NODE)	TREE_OPERAND (WHILE_STMT_CHECK (NODE), 2)
 
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 /* DO_STMT accessors. These give access to the condition of the do
    statement and the body of the do statement, respectively.  */
 #define DO_COND(NODE)		TREE_OPERAND (DO_STMT_CHECK (NODE), 0)
 #define DO_BODY(NODE)		TREE_OPERAND (DO_STMT_CHECK (NODE), 1)
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+#define DO_ATTRIBUTES(NODE)	TREE_OPERAND (DO_STMT_CHECK (NODE), 2)
+/* APPLE LOCAL begin C* language */
+/* Used as a flag to indicate synthesized inner do-while loop of a 
+   foreach statement.  Used for generation of break/continue statement 
+   of the loop. */
+#define DO_FOREACH(NODE)           TREE_OPERAND (DO_STMT_CHECK (NODE), 3)
+/* APPLE LOCAL end C* language */
 
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 /* FOR_STMT accessors. These give access to the init statement,
    condition, update expression, and body of the for statement,
    respectively.  */
@@ -3093,7 +3105,10 @@ extern void decl_shadowed_for_var_insert
 #define FOR_COND(NODE)		TREE_OPERAND (FOR_STMT_CHECK (NODE), 1)
 #define FOR_EXPR(NODE)		TREE_OPERAND (FOR_STMT_CHECK (NODE), 2)
 #define FOR_BODY(NODE)		TREE_OPERAND (FOR_STMT_CHECK (NODE), 3)
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+#define FOR_ATTRIBUTES(NODE)	TREE_OPERAND (FOR_STMT_CHECK (NODE), 4)
 
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 #define SWITCH_STMT_COND(NODE)	TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 0)
 #define SWITCH_STMT_BODY(NODE)	TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 1)
 #define SWITCH_STMT_TYPE(NODE)	TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 2)
@@ -4258,14 +4273,20 @@ extern tree finish_then_clause			(tree);
 extern void begin_else_clause			(tree);
 extern void finish_else_clause			(tree);
 extern void finish_if_stmt			(tree);
-extern tree begin_while_stmt			(void);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+extern tree begin_while_stmt			(tree);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 extern void finish_while_stmt_cond		(tree, tree);
 extern void finish_while_stmt			(tree);
-extern tree begin_do_stmt			(void);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+extern tree begin_do_stmt			(tree);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 extern void finish_do_body			(tree);
 extern void finish_do_stmt			(tree, tree);
 extern tree finish_return_stmt			(tree);
-extern tree begin_for_stmt			(void);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+extern tree begin_for_stmt			(tree);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 extern void finish_for_init_stmt		(tree);
 extern void finish_for_cond			(tree, tree);
 extern void finish_for_expr			(tree, tree);

Modified: user/gjb/hacking/release-embedded/contrib/gcc/cp/decl.c
==============================================================================
--- user/gjb/hacking/release-embedded/contrib/gcc/cp/decl.c	Sat Dec 28 21:31:58 2013	(r260017)
+++ user/gjb/hacking/release-embedded/contrib/gcc/cp/decl.c	Sat Dec 28 22:26:57 2013	(r260018)
@@ -232,10 +232,17 @@ int function_depth;
    with __attribute__((deprecated)).  An object declared as
    __attribute__((deprecated)) suppresses warnings of uses of other
    deprecated items.  */
+/* APPLE LOCAL begin "unavailable" attribute (radar 2809697) */
+/* An object declared as __attribute__((unavailable)) suppresses
+   any reports of being declared with unavailable or deprecated
+   items.  */
+/* APPLE LOCAL end "unavailable" attribute (radar 2809697) */
 
 enum deprecated_states {
   DEPRECATED_NORMAL,
   DEPRECATED_SUPPRESS
+  /* APPLE LOCAL "unavailable" attribute (radar 2809697) */
+  , DEPRECATED_UNAVAILABLE_SUPPRESS
 };
 
 static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
@@ -3836,14 +3843,40 @@ start_decl (const cp_declarator *declara
   tree decl;
   tree type, tem;
   tree context;
+  /* APPLE LOCAL "unavailable" attribute (radar 2809697) */
+  tree a;
   bool was_public;
 
   *pushed_scope_p = NULL_TREE;
 
-  /* An object declared as __attribute__((deprecated)) suppresses
-     warnings of uses of other deprecated items.  */
+  /* APPLE LOCAL begin "unavailable" attribute (radar 2809697) */
+  /* An object declared as __attribute__((unavailable)) suppresses
+     any reports of being declared with unavailable or deprecated
+     items.  An object declared as __attribute__((deprecated))
+     suppresses warnings of uses of other deprecated items.  */
+#ifdef A_LESS_INEFFICENT_WAY /* which I really don't want to do!  */
   if (lookup_attribute ("deprecated", attributes))
     deprecated_state = DEPRECATED_SUPPRESS;
+  else if (lookup_attribute ("unavailable", attributes))
+    deprecated_state = DEPRECATED_UNAVAILABLE_SUPPRESS;
+#else /* a more efficient way doing what lookup_attribute would do */
+  for (a = attributes; a; a = TREE_CHAIN (a))
+    {
+      tree name = TREE_PURPOSE (a);
+      if (TREE_CODE (name) == IDENTIFIER_NODE)
+        if (is_attribute_p ("deprecated", name))
+	  {
+	    deprecated_state = DEPRECATED_SUPPRESS;
+	    break;
+	  }
+        if (is_attribute_p ("unavailable", name))
+	  {
+	    deprecated_state = DEPRECATED_UNAVAILABLE_SUPPRESS;
+	    break;
+	  }
+    }
+#endif
+  /* APPLE LOCAL end "unavailable" attribute (radar 2809697) */
 
   attributes = chainon (attributes, prefix_attributes);
 
@@ -7274,6 +7307,19 @@ grokdeclarator (const cp_declarator *dec
       type = NULL_TREE;
       type_was_error_mark_node = true;
     }
+
+  /* APPLE LOCAL begin unavailable attribute (radar 2809697) --bowdidge */
+  /* If the entire declaration is itself tagged as unavailable then
+     suppress reports of unavailable/deprecated items.  If the
+     entire declaration is tagged as only deprecated we still
+     report unavailable uses.  */
+  if (type && TREE_DEPRECATED (type) && TREE_UNAVAILABLE (type))
+    {
+      if (deprecated_state != DEPRECATED_UNAVAILABLE_SUPPRESS)
+	warn_deprecated_use (type);
+    }
+  else
+  /* APPLE LOCAL end unavailable attribute (radar 2809697) --bowdidge */
   /* If the entire declaration is itself tagged as deprecated then
      suppress reports of deprecated items.  */
   if (type && TREE_DEPRECATED (type)

Modified: user/gjb/hacking/release-embedded/contrib/gcc/cp/dump.c
==============================================================================
--- user/gjb/hacking/release-embedded/contrib/gcc/cp/dump.c	Sat Dec 28 21:31:58 2013	(r260017)
+++ user/gjb/hacking/release-embedded/contrib/gcc/cp/dump.c	Sat Dec 28 22:26:57 2013	(r260018)
@@ -433,6 +433,9 @@ cp_dump_tree (void* dump_info, tree t)
       dump_stmt (di, t);
       dump_child ("body", DO_BODY (t));
       dump_child ("cond", DO_COND (t));
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+      dump_child ("attrs", DO_ATTRIBUTES (t));
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
       break;
 
     case FOR_STMT:
@@ -441,6 +444,9 @@ cp_dump_tree (void* dump_info, tree t)
       dump_child ("cond", FOR_COND (t));
       dump_child ("expr", FOR_EXPR (t));
       dump_child ("body", FOR_BODY (t));
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+      dump_child ("attrs", FOR_ATTRIBUTES (t));
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
       break;
 
     case SWITCH_STMT:
@@ -453,6 +459,9 @@ cp_dump_tree (void* dump_info, tree t)
       dump_stmt (di, t);
       dump_child ("cond", WHILE_COND (t));
       dump_child ("body", WHILE_BODY (t));
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+      dump_child ("attrs", WHILE_ATTRIBUTES (t));
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
       break;
 
     case STMT_EXPR:

Modified: user/gjb/hacking/release-embedded/contrib/gcc/cp/init.c
==============================================================================
--- user/gjb/hacking/release-embedded/contrib/gcc/cp/init.c	Sat Dec 28 21:31:58 2013	(r260017)
+++ user/gjb/hacking/release-embedded/contrib/gcc/cp/init.c	Sat Dec 28 22:26:57 2013	(r260018)
@@ -2563,7 +2563,9 @@ build_vec_init (tree base, tree maxindex
       tree elt_init;
       tree to;
 
-      for_stmt = begin_for_stmt ();
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+      for_stmt = begin_for_stmt (NULL_TREE);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
       finish_for_init_stmt (for_stmt);
       finish_for_cond (build2 (NE_EXPR, boolean_type_node, iterator,
 			       build_int_cst (TREE_TYPE (iterator), -1)),

Modified: user/gjb/hacking/release-embedded/contrib/gcc/cp/parser.c
==============================================================================
--- user/gjb/hacking/release-embedded/contrib/gcc/cp/parser.c	Sat Dec 28 21:31:58 2013	(r260017)
+++ user/gjb/hacking/release-embedded/contrib/gcc/cp/parser.c	Sat Dec 28 22:26:57 2013	(r260018)
@@ -6787,6 +6787,16 @@ cp_parser_condition (cp_parser* parser)
      for ( for-init-statement condition [opt] ; expression [opt] )
        statement
 
+   APPLE LOCAL begin for-fsf-4_4 3274130 5295549
+   GNU extension:
+
+     while attributes [opt] ( condition ) statement
+     do attributes [opt] statement while ( expression ) ;
+     for attributes [opt] 
+       ( for-init-statement condition [opt] ; expression [opt] )
+       statement
+
+   APPLE LOCAL end for-fsf-4_4 3274130 5295549
    Returns the new WHILE_STMT, DO_STMT, or FOR_STMT.  */
 
 static tree
@@ -6794,10 +6804,14 @@ cp_parser_iteration_statement (cp_parser
 {
   cp_token *token;
   enum rid keyword;
-  tree statement;
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+  tree statement, attributes;
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
   unsigned char in_statement;
 
-  /* Peek at the next token.  */
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+  /* Get the keyword at the start of the loop.  */
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
   token = cp_parser_require (parser, CPP_KEYWORD, "iteration-statement");
   if (!token)
     return error_mark_node;
@@ -6806,6 +6820,11 @@ cp_parser_iteration_statement (cp_parser
      statement.  */
   in_statement = parser->in_statement;
 
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+  /* Parse the attributes, if any.  */
+  attributes = cp_parser_attributes_opt (parser);
+
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
   /* See what kind of keyword it is.  */
   keyword = token->keyword;
   switch (keyword)
@@ -6815,7 +6834,9 @@ cp_parser_iteration_statement (cp_parser
 	tree condition;
 
 	/* Begin the while-statement.  */
-	statement = begin_while_stmt ();
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+	statement = begin_while_stmt (attributes);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 	/* Look for the `('.  */
 	cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
 	/* Parse the condition.  */
@@ -6837,7 +6858,9 @@ cp_parser_iteration_statement (cp_parser
 	tree expression;
 
 	/* Begin the do-statement.  */
-	statement = begin_do_stmt ();
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+	statement = begin_do_stmt (attributes);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 	/* Parse the body of the do-statement.  */
 	parser->in_statement = IN_ITERATION_STMT;
 	cp_parser_implicitly_scoped_statement (parser, NULL);
@@ -6864,7 +6887,9 @@ cp_parser_iteration_statement (cp_parser
 	tree expression = NULL_TREE;
 
 	/* Begin the for-statement.  */
-	statement = begin_for_stmt ();
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+	statement = begin_for_stmt (attributes);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 	/* Look for the `('.  */
 	cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
 	/* Parse the initialization.  */

Modified: user/gjb/hacking/release-embedded/contrib/gcc/cp/pt.c
==============================================================================
--- user/gjb/hacking/release-embedded/contrib/gcc/cp/pt.c	Sat Dec 28 21:31:58 2013	(r260017)
+++ user/gjb/hacking/release-embedded/contrib/gcc/cp/pt.c	Sat Dec 28 22:26:57 2013	(r260018)
@@ -8593,8 +8593,11 @@ tsubst_expr (tree t, tree args, tsubst_f
       }
 
     case FOR_STMT:
-      stmt = begin_for_stmt ();
-			  RECUR (FOR_INIT_STMT (t));
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+      tmp = RECUR (FOR_ATTRIBUTES (t));
+      stmt = begin_for_stmt (tmp);
+      RECUR (FOR_INIT_STMT (t));
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
       finish_for_init_stmt (stmt);
       tmp = RECUR (FOR_COND (t));
       finish_for_cond (tmp, stmt);
@@ -8605,7 +8608,10 @@ tsubst_expr (tree t, tree args, tsubst_f
       break;
 
     case WHILE_STMT:
-      stmt = begin_while_stmt ();
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+      tmp = RECUR (WHILE_ATTRIBUTES (t));
+      stmt = begin_while_stmt (tmp);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
       tmp = RECUR (WHILE_COND (t));
       finish_while_stmt_cond (tmp, stmt);
       RECUR (WHILE_BODY (t));
@@ -8613,7 +8619,10 @@ tsubst_expr (tree t, tree args, tsubst_f
       break;
 
     case DO_STMT:
-      stmt = begin_do_stmt ();
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+      tmp = RECUR (DO_ATTRIBUTES (t));
+      stmt = begin_do_stmt (tmp);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
       RECUR (DO_BODY (t));
       finish_do_body (stmt);
       tmp = RECUR (DO_COND (t));

Modified: user/gjb/hacking/release-embedded/contrib/gcc/cp/semantics.c
==============================================================================
--- user/gjb/hacking/release-embedded/contrib/gcc/cp/semantics.c	Sat Dec 28 21:31:58 2013	(r260017)
+++ user/gjb/hacking/release-embedded/contrib/gcc/cp/semantics.c	Sat Dec 28 22:26:57 2013	(r260018)
@@ -704,10 +704,14 @@ finish_if_stmt (tree if_stmt)
    appropriate.  */
 
 tree
-begin_while_stmt (void)
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+begin_while_stmt (tree attribs)
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 {
   tree r;
-  r = build_stmt (WHILE_STMT, NULL_TREE, NULL_TREE);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+  r = build_stmt (WHILE_STMT, NULL_TREE, NULL_TREE, attribs);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
   add_stmt (r);
   WHILE_BODY (r) = do_pushlevel (sk_block);
   begin_cond (&WHILE_COND (r));
@@ -737,9 +741,14 @@ finish_while_stmt (tree while_stmt)
    appropriate.  */
 
 tree
-begin_do_stmt (void)
-{
-  tree r = build_stmt (DO_STMT, NULL_TREE, NULL_TREE);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+begin_do_stmt (tree attribs)
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
+{
+  /* APPLE LOCAL radar 4445586 */
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+  tree r = build_stmt (DO_STMT, NULL_TREE, NULL_TREE, attribs, NULL_TREE);
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
   add_stmt (r);
   DO_BODY (r) = push_stmt_list ();
   return r;
@@ -803,12 +812,17 @@ finish_return_stmt (tree expr)
 /* Begin a for-statement.  Returns a new FOR_STMT if appropriate.  */
 
 tree
-begin_for_stmt (void)
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+begin_for_stmt (tree attribs)
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 {
   tree r;
 
   r = build_stmt (FOR_STMT, NULL_TREE, NULL_TREE,
-		  NULL_TREE, NULL_TREE);
+/* APPLE LOCAL begin for-fsf-4_4 3274130 5295549 */ \
+		  NULL_TREE, NULL_TREE, attribs);
+
+/* APPLE LOCAL end for-fsf-4_4 3274130 5295549 */ \
 
   if (flag_new_for_scope > 0)
     TREE_CHAIN (r) = do_pushlevel (sk_for);

Modified: user/gjb/hacking/release-embedded/contrib/gcc/doc/extend.texi
==============================================================================
--- user/gjb/hacking/release-embedded/contrib/gcc/doc/extend.texi	Sat Dec 28 21:31:58 2013	(r260017)
+++ user/gjb/hacking/release-embedded/contrib/gcc/doc/extend.texi	Sat Dec 28 22:26:57 2013	(r260018)
@@ -58,6 +58,9 @@ extensions, accepted by GCC in C89 mode 
 * Character Escapes::   @samp{\e} stands for the character @key{ESC}.
 * Variable Attributes::	Specifying attributes of variables.
 * Type Attributes::	Specifying attributes of types.
+ at c APPLE LOCAL begin for-fsf-4_4 3274130 5295549
+* Label Attributes::	Specifying attributes of labels and statements.
+ at c APPLE LOCAL end for-fsf-4_4 3274130 5295549
 * Alignment::           Inquiring about the alignment of a type or variable.
 * Inline::              Defining inline functions (as fast as macros).
 * Extended Asm::        Assembler instructions with C expressions as operands.
@@ -1587,8 +1590,11 @@ attributes are currently defined for fun
 @code{gnu_inline} and @code{externally_visible}.  Several other
 attributes are defined for functions on particular target systems.  Other
 attributes, including @code{section} are supported for variables declarations
-(@pxref{Variable Attributes}) and for types (@pxref{Type Attributes}).

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-user mailing list