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