aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/c-family
diff options
context:
space:
mode:
authorRong Xu <xur@google.com>2014-07-21 16:47:22 -0700
committerRong Xu <xur@google.com>2014-07-29 15:31:03 -0700
commit38a8aecfb882072900434499696b5c32a2274515 (patch)
tree2aac97f0ae24b03cd98c1a06e989c031c173f889 /gcc-4.9/gcc/c-family
parentc231900e5dcc14d8296bd9f62b45997a49d4d5e7 (diff)
downloadtoolchain_gcc-38a8aecfb882072900434499696b5c32a2274515.tar.gz
toolchain_gcc-38a8aecfb882072900434499696b5c32a2274515.tar.bz2
toolchain_gcc-38a8aecfb882072900434499696b5c32a2274515.zip
[4.9] Switch gcc-4.9 to use google/gcc-4_9 branch.
This source drop uses svn version r212828 of google/gcc-4.9 branch. We also cherry-picked r213062, r213063 and r213064 to fix windows build issues. All gcc-4.9 patches before July 3rd are ported to google/gcc-4.9. The following prior commits has not been merged to google branch yet. (They are included in this commit). e7af147f979e657fe2df00808e5b4319b0e088c6, baf87df3cb2683649ba7e9872362a7e721117c23, and c231900e5dcc14d8296bd9f62b45997a49d4d5e7. Change-Id: I4bea3ea470387ff751c2be4cb0d4a12059b9299b
Diffstat (limited to 'gcc-4.9/gcc/c-family')
-rw-r--r--gcc-4.9/gcc/c-family/ChangeLog26
-rw-r--r--gcc-4.9/gcc/c-family/c-common.c117
-rw-r--r--gcc-4.9/gcc/c-family/c-common.h3
-rw-r--r--gcc-4.9/gcc/c-family/c-cppbuiltin.c29
-rw-r--r--gcc-4.9/gcc/c-family/c-gimplify.c4
-rw-r--r--gcc-4.9/gcc/c-family/c-omp.c9
-rw-r--r--gcc-4.9/gcc/c-family/c-opts.c126
-rw-r--r--gcc-4.9/gcc/c-family/c-pragma.c2
-rw-r--r--gcc-4.9/gcc/c-family/c.opt4
9 files changed, 293 insertions, 27 deletions
diff --git a/gcc-4.9/gcc/c-family/ChangeLog b/gcc-4.9/gcc/c-family/ChangeLog
index 4f277de68..1fa0dd088 100644
--- a/gcc-4.9/gcc/c-family/ChangeLog
+++ b/gcc-4.9/gcc/c-family/ChangeLog
@@ -1,3 +1,29 @@
+2014-06-30 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from mainline
+ 2014-06-10 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/60928
+ * c-pragma.c (omp_pragmas_simd): Move PRAGMA_OMP_TASK...
+ (omp_pragmas): ... back here.
+
+2014-06-12 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/61486
+ * c-omp.c (c_omp_split_clauses): Don't crash on firstprivate in
+ #pragma omp target teams or
+ #pragma omp {,target }teams distribute simd.
+
+2014-06-04 Marek Polacek <polacek@redhat.com>
+
+ Backport from mainline
+ 2014-05-08 Marek Polacek <polacek@redhat.com>
+
+ PR c/61053
+ * c-common.c (min_align_of_type): New function factored out from...
+ (c_sizeof_or_alignof_type): ...here.
+ * c-common.h (min_align_of_type): Declare.
+
2014-05-06 Richard Biener <rguenther@suse.de>
* c-opts.c (c_common_post_options): For -freestanding,
diff --git a/gcc-4.9/gcc/c-family/c-common.c b/gcc-4.9/gcc/c-family/c-common.c
index f7f2bb3e3..65c25bf17 100644
--- a/gcc-4.9/gcc/c-family/c-common.c
+++ b/gcc-4.9/gcc/c-family/c-common.c
@@ -380,6 +380,13 @@ static tree handle_omp_declare_simd_attribute (tree *, tree, tree, int,
static tree handle_omp_declare_target_attribute (tree *, tree, tree, int,
bool *);
+static tree handle_always_patch_for_instrumentation_attribute (tree *, tree,
+ tree, int,
+ bool *);
+static tree handle_never_patch_for_instrumentation_attribute (tree *, tree,
+ tree, int,
+ bool *);
+
static void check_function_nonnull (tree, int, tree *);
static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
@@ -758,6 +765,13 @@ const struct attribute_spec c_common_attribute_table[] =
The name contains space to prevent its usage in source code. */
{ "fn spec", 1, 1, false, true, true,
handle_fnspec_attribute, false },
+ { "always_patch_for_instrumentation", 0, 0, true, false, false,
+ handle_always_patch_for_instrumentation_attribute,
+ false },
+ { "never_patch_for_instrumentation", 0, 0, true, false, false,
+ handle_never_patch_for_instrumentation_attribute,
+ false },
+
{ "warn_unused", 0, 0, false, false, false,
handle_warn_unused_attribute, false },
{ "returns_nonnull", 0, 0, false, true, true,
@@ -4927,6 +4941,26 @@ c_common_get_alias_set (tree t)
return -1;
}
+/* Return the least alignment required for type TYPE. */
+
+unsigned int
+min_align_of_type (tree type)
+{
+ unsigned int align = TYPE_ALIGN (type);
+ align = MIN (align, BIGGEST_ALIGNMENT);
+#ifdef BIGGEST_FIELD_ALIGNMENT
+ align = MIN (align, BIGGEST_FIELD_ALIGNMENT);
+#endif
+ unsigned int field_align = align;
+#ifdef ADJUST_FIELD_ALIGN
+ tree field = build_decl (UNKNOWN_LOCATION, FIELD_DECL, NULL_TREE,
+ type);
+ field_align = ADJUST_FIELD_ALIGN (field, field_align);
+#endif
+ align = MIN (align, field_align);
+ return align / BITS_PER_UNIT;
+}
+
/* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where
the IS_SIZEOF parameter indicates which operator is being applied.
The COMPLAIN flag controls whether we should diagnose possibly
@@ -5005,21 +5039,7 @@ c_sizeof_or_alignof_type (location_t loc,
size_int (TYPE_PRECISION (char_type_node)
/ BITS_PER_UNIT));
else if (min_alignof)
- {
- unsigned int align = TYPE_ALIGN (type);
- align = MIN (align, BIGGEST_ALIGNMENT);
-#ifdef BIGGEST_FIELD_ALIGNMENT
- align = MIN (align, BIGGEST_FIELD_ALIGNMENT);
-#endif
- unsigned int field_align = align;
-#ifdef ADJUST_FIELD_ALIGN
- tree field = build_decl (UNKNOWN_LOCATION, FIELD_DECL, NULL_TREE,
- type);
- field_align = ADJUST_FIELD_ALIGN (field, field_align);
-#endif
- align = MIN (align, field_align);
- value = size_int (align / BITS_PER_UNIT);
- }
+ value = size_int (min_align_of_type (type));
else
value = size_int (TYPE_ALIGN_UNIT (type));
}
@@ -6867,6 +6887,7 @@ handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
if (TREE_CODE (decl) == PARM_DECL
|| TREE_CODE (decl) == VAR_DECL
+ || TREE_CODE (decl) == FIELD_DECL
|| TREE_CODE (decl) == FUNCTION_DECL
|| TREE_CODE (decl) == LABEL_DECL
|| TREE_CODE (decl) == TYPE_DECL)
@@ -8680,6 +8701,47 @@ handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
return NULL_TREE;
}
+/* Handle a "always_patch_for_instrumentation" attribute; arguments as in
+ struct attribute_spec.handler. */
+
+static tree
+handle_always_patch_for_instrumentation_attribute (tree *node, tree name,
+ tree ARG_UNUSED (args),
+ int ARG_UNUSED (flags),
+ bool *no_add_attrs)
+{
+ if (TREE_CODE (*node) == FUNCTION_DECL)
+ {
+ /* Disable inlining if forced instrumentation. */
+ DECL_UNINLINABLE (*node) = 1;
+ }
+ else
+ {
+ warning (OPT_Wattributes, "%qE attribute ignored", name);
+ *no_add_attrs = true;
+ }
+ return NULL_TREE;
+}
+
+
+/* Handle a "never_patch_for_instrumentation" attribute; arguments as in
+ struct attribute_spec.handler. */
+
+static tree
+handle_never_patch_for_instrumentation_attribute (tree *node, tree name,
+ tree ARG_UNUSED (args),
+ int ARG_UNUSED (flags),
+ bool *no_add_attrs)
+{
+ if (TREE_CODE (*node) != FUNCTION_DECL)
+ {
+ warning (OPT_Wattributes, "%qE attribute ignored", name);
+ *no_add_attrs = true;
+ }
+ return NULL_TREE;
+}
+
+
/* Check the argument list of a function call for null in argument slots
that are marked as requiring a non-null pointer argument. The NARGS
arguments are passed in the array ARGARRAY.
@@ -11727,6 +11789,31 @@ keyword_is_decl_specifier (enum rid keyword)
}
}
+/* Check for and warn about self-assignment or self-initialization.
+ LHS and RHS are the tree nodes for the left-hand side and right-hand side
+ of the assignment or initialization we are checking.
+ LOCATION is the source location for RHS. */
+
+void
+check_for_self_assign (location_t location, tree lhs, tree rhs)
+{
+ if (lhs == NULL_TREE || rhs == NULL_TREE)
+ return;
+
+ /* Deal with TREE_LIST initializers (may be generated by class
+ member initialization in C++). */
+ if (TREE_CODE (rhs) == TREE_LIST)
+ rhs = TREE_VALUE (rhs);
+
+ /* Only emit a warning if RHS is not a folded expression so that we don't
+ warn on something like x = x / 1. */
+ if (!EXPR_FOLDED (rhs)
+ && operand_equal_p (lhs, rhs,
+ OEP_PURE_SAME | OEP_ALLOW_NULL | OEP_ALLOW_NO_TYPE))
+ warning_at (location, OPT_Wself_assign, G_("%qE is assigned to itself"),
+ lhs);
+}
+
/* Initialize language-specific-bits of tree_contains_struct. */
void
diff --git a/gcc-4.9/gcc/c-family/c-common.h b/gcc-4.9/gcc/c-family/c-common.h
index 24959d83e..fe798fa6d 100644
--- a/gcc-4.9/gcc/c-family/c-common.h
+++ b/gcc-4.9/gcc/c-family/c-common.h
@@ -758,6 +758,7 @@ extern tree c_wrap_maybe_const (tree, bool);
extern tree c_save_expr (tree);
extern tree c_common_truthvalue_conversion (location_t, tree);
extern void c_apply_type_quals_to_decl (int, tree);
+extern unsigned int min_align_of_type (tree);
extern tree c_sizeof_or_alignof_type (location_t, tree, bool, bool, int);
extern tree c_alignof_expr (location_t, tree);
/* Print an error message for invalid operands to arith operation CODE.
@@ -830,6 +831,7 @@ extern bool c_common_post_options (const char **);
extern bool c_common_init (void);
extern void c_common_finish (void);
extern void c_common_parse_file (void);
+extern FILE *get_dump_info (int, int *);
extern alias_set_type c_common_get_alias_set (tree);
extern void c_register_builtin_type (tree, const char*);
extern bool c_promoting_integer_type_p (const_tree);
@@ -1012,6 +1014,7 @@ extern void release_tree_vector (vec<tree, va_gc> *);
extern vec<tree, va_gc> *make_tree_vector_single (tree);
extern vec<tree, va_gc> *make_tree_vector_from_list (tree);
extern vec<tree, va_gc> *make_tree_vector_copy (const vec<tree, va_gc> *);
+extern void check_for_self_assign (location_t, tree, tree);
/* In c-gimplify.c */
extern void c_genericize (tree);
diff --git a/gcc-4.9/gcc/c-family/c-cppbuiltin.c b/gcc-4.9/gcc/c-family/c-cppbuiltin.c
index 2f2e7bae8..6a697f666 100644
--- a/gcc-4.9/gcc/c-family/c-cppbuiltin.c
+++ b/gcc-4.9/gcc/c-family/c-cppbuiltin.c
@@ -969,6 +969,33 @@ c_cpp_builtins (cpp_reader *pfile)
if (c_dialect_cxx () && TYPE_UNSIGNED (wchar_type_node))
cpp_define (pfile, "__WCHAR_UNSIGNED__");
+ /* Tell source code if the compiler makes sync_compare_and_swap
+ builtins available. */
+#ifdef HAVE_sync_compare_and_swapqi
+ if (HAVE_sync_compare_and_swapqi)
+ cpp_define (pfile, "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
+#endif
+
+#ifdef HAVE_sync_compare_and_swaphi
+ if (HAVE_sync_compare_and_swaphi)
+ cpp_define (pfile, "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
+#endif
+
+#ifdef HAVE_sync_compare_and_swapsi
+ if (HAVE_sync_compare_and_swapsi)
+ cpp_define (pfile, "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
+#endif
+
+#ifdef HAVE_sync_compare_and_swapdi
+ if (HAVE_sync_compare_and_swapdi)
+ cpp_define (pfile, "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
+#endif
+
+#ifdef HAVE_sync_compare_and_swapti
+ if (HAVE_sync_compare_and_swapti)
+ cpp_define (pfile, "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16");
+#endif
+
cpp_atomic_builtins (pfile);
#ifdef DWARF2_UNWIND_INFO
@@ -1028,6 +1055,8 @@ c_cpp_builtins (cpp_reader *pfile)
format. */
if (ENABLE_DECIMAL_FLOAT && ENABLE_DECIMAL_BID_FORMAT)
cpp_define (pfile, "__DECIMAL_BID_FORMAT__");
+ if (c_dialect_cxx () && flag_sized_delete)
+ cpp_define (pfile, "__GXX_DELETE_WITH_SIZE__");
}
/* Pass an object-like macro. If it doesn't lie in the user's
diff --git a/gcc-4.9/gcc/c-family/c-gimplify.c b/gcc-4.9/gcc/c-family/c-gimplify.c
index 737be4d72..d385f3a40 100644
--- a/gcc-4.9/gcc/c-family/c-gimplify.c
+++ b/gcc-4.9/gcc/c-family/c-gimplify.c
@@ -80,7 +80,7 @@ c_genericize (tree fndecl)
struct cgraph_node *cgn;
/* Dump the C-specific tree IR. */
- dump_orig = dump_begin (TDI_original, &local_dump_flags);
+ dump_orig = get_dump_info (TDI_original, &local_dump_flags);
if (dump_orig)
{
fprintf (dump_orig, "\n;; Function %s",
@@ -97,8 +97,6 @@ c_genericize (tree fndecl)
else
print_c_tree (dump_orig, DECL_SAVED_TREE (fndecl));
fprintf (dump_orig, "\n");
-
- dump_end (TDI_original, dump_orig);
}
/* Dump all nested functions now. */
diff --git a/gcc-4.9/gcc/c-family/c-omp.c b/gcc-4.9/gcc/c-family/c-omp.c
index dd0a45d96..6a0e41988 100644
--- a/gcc-4.9/gcc/c-family/c-omp.c
+++ b/gcc-4.9/gcc/c-family/c-omp.c
@@ -789,8 +789,13 @@ c_omp_split_clauses (location_t loc, enum tree_code code,
else if ((mask & (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_NUM_TEAMS))
!= 0)
{
- /* This must be #pragma omp {,target }teams distribute. */
- gcc_assert (code == OMP_DISTRIBUTE);
+ /* This must be one of
+ #pragma omp {,target }teams distribute
+ #pragma omp target teams
+ #pragma omp {,target }teams distribute simd. */
+ gcc_assert (code == OMP_DISTRIBUTE
+ || code == OMP_TEAMS
+ || code == OMP_SIMD);
s = C_OMP_CLAUSE_SPLIT_TEAMS;
}
else if ((mask & (OMP_CLAUSE_MASK_1
diff --git a/gcc-4.9/gcc/c-family/c-opts.c b/gcc-4.9/gcc/c-family/c-opts.c
index 29e9a355b..60d7145b7 100644
--- a/gcc-4.9/gcc/c-family/c-opts.c
+++ b/gcc-4.9/gcc/c-family/c-opts.c
@@ -43,6 +43,10 @@ along with GCC; see the file COPYING3. If not see
TARGET_FLT_EVAL_METHOD_NON_DEFAULT and
TARGET_OPTF. */
#include "tm_p.h" /* For C_COMMON_OVERRIDE_OPTIONS. */
+#include "function.h"
+#include "params.h"
+#include "l-ipo.h"
+#include "dumpfile.h"
#ifndef DOLLARS_IN_IDENTIFIERS
# define DOLLARS_IN_IDENTIFIERS true
@@ -102,6 +106,14 @@ static size_t deferred_count;
/* Number of deferred options scanned for -include. */
static size_t include_cursor;
+static bool parsing_done_p = false;
+
+/* Dump files/flags to use during parsing. */
+static FILE *original_dump_file = NULL;
+static int original_dump_flags;
+static FILE *class_dump_file = NULL;
+static int class_dump_flags;
+
/* Whether any standard preincluded header has been preincluded. */
static bool done_preinclude;
@@ -199,8 +211,10 @@ c_common_init_options_struct (struct gcc_options *opts)
opts->x_warn_write_strings = c_dialect_cxx ();
opts->x_flag_warn_unused_result = true;
- /* By default, C99-like requirements for complex multiply and divide. */
- opts->x_flag_complex_method = 2;
+ /* By default, C99-like requirements for complex multiply and divide.
+ But for C++ this should not be required. */
+ if (c_language != clk_cxx)
+ opts->x_flag_complex_method = 2;
}
/* Common initialization before calling option handlers. */
@@ -845,6 +859,10 @@ c_common_post_options (const char **pfilename)
else if (!flag_gnu89_inline && !flag_isoc99)
error ("-fno-gnu89-inline is only supported in GNU99 or C99 mode");
+ if (flag_dyn_ipa && cpp_opts->preprocessed)
+ error ("-fpreprocessed/-save-temps are not supported with -fripa");
+
+
/* Default to ObjC sjlj exception handling if NeXT runtime. */
if (flag_objc_sjlj_exceptions < 0)
flag_objc_sjlj_exceptions = flag_next_runtime;
@@ -1051,6 +1069,34 @@ c_common_init (void)
return true;
}
+/* Return TRUE if the lipo maximum memory consumption limit is reached, and
+ we should not import any further auxiliary modules. Check after parsing
+ each module, the Ith module being the just parsed module. */
+static bool
+lipo_max_mem_reached (unsigned int i)
+{
+ if (L_IPO_COMP_MODE && PARAM_VALUE (PARAM_MAX_LIPO_MEMORY)
+ && i < (num_in_fnames - 1)
+ /* Scale up memory usage by 25% to account for memory consumption
+ by the optimizer. */
+ && ((ggc_total_allocated () >> 10) * 1.25
+ > (size_t) PARAM_VALUE (PARAM_MAX_LIPO_MEMORY))) {
+ if (dump_enabled_p ())
+ {
+ i++;
+ do {
+ dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, input_location,
+ "Not importing %s: maximum memory "
+ "consumption reached", in_fnames[i]);
+ i++;
+ } while (i < num_in_fnames);
+ }
+ return true;
+ }
+ return false;
+}
+
+
/* Initialize the integrated preprocessor after debug output has been
initialized; loop over each input file. */
void
@@ -1062,9 +1108,26 @@ c_common_parse_file (void)
for (;;)
{
c_finish_options ();
+ /* Open the dump files to use for the original and class dump output
+ here, to be used during parsing for the current file. */
+ original_dump_file = dump_begin (TDI_original, &original_dump_flags);
+ class_dump_file = dump_begin (TDI_class, &class_dump_flags);
pch_init ();
+ set_lipo_c_parsing_context (parse_in, i, verbose);
push_file_scope ();
c_parse_file ();
+ if (i == 0 && flag_record_compilation_info_in_elf)
+ write_compilation_flags_to_asm ();
+
+ if (i == 0)
+ ggc_total_memory = (ggc_total_allocated () >> 10);
+
+ /* In lipo mode, processing too many auxiliary files will cause us
+ to hit memory limits, and cause thrashing -- prevent this by not
+ processing any further auxiliary modules if we reach a certain
+ memory limit. */
+ if (!include_all_aux && lipo_max_mem_reached (i))
+ num_in_fnames = i + 1;
pop_file_scope ();
/* And end the main input file, if the debug writer wants it */
if (debug_hooks->start_end_main_source_file)
@@ -1073,13 +1136,50 @@ c_common_parse_file (void)
break;
cpp_undef_all (parse_in);
cpp_clear_file_cache (parse_in);
+ deferred_count = 0;
this_input_filename
= cpp_read_main_file (parse_in, in_fnames[i]);
+ if (original_dump_file)
+ {
+ dump_end (TDI_original, original_dump_file);
+ original_dump_file = NULL;
+ }
+ if (class_dump_file)
+ {
+ dump_end (TDI_class, class_dump_file);
+ class_dump_file = NULL;
+ }
/* If an input file is missing, abandon further compilation.
cpplib has issued a diagnostic. */
if (!this_input_filename)
break;
}
+ parsing_done_p = true;
+}
+
+/* Returns true if parsing is done */
+
+bool
+is_parsing_done_p (void)
+{
+ return parsing_done_p;
+}
+
+/* Returns the appropriate dump file for PHASE to dump with FLAGS. */
+FILE *
+get_dump_info (int phase, int *flags)
+{
+ gcc_assert (phase == TDI_original || phase == TDI_class);
+ if (phase == TDI_original)
+ {
+ *flags = original_dump_flags;
+ return original_dump_file;
+ }
+ else
+ {
+ *flags = class_dump_flags;
+ return class_dump_file;
+ }
}
/* Common finish hook for the C, ObjC and C++ front ends. */
@@ -1089,7 +1189,11 @@ c_common_finish (void)
FILE *deps_stream = NULL;
/* Don't write the deps file if there are errors. */
- if (cpp_opts->deps.style != DEPS_NONE && !seen_error ())
+ /* FIXME. We are emitting the deps file even if there were errors.
+ This is a temporary workaround to avoid confusing Google's build
+ system. It assumes that deps files are always emitted even
+ in the presence of errors. */
+ if (cpp_opts->deps.style != DEPS_NONE /*&& !seen_error ()*/)
{
/* If -M or -MM was seen without -MF, default output to the
output stream. */
@@ -1313,9 +1417,15 @@ c_finish_options (void)
struct deferred_opt *opt = &deferred_opts[i];
if (opt->code == OPT_D)
- cpp_define (parse_in, opt->arg);
+ {
+ cpp_define (parse_in, opt->arg);
+ coverage_note_define (opt->arg, true);
+ }
else if (opt->code == OPT_U)
- cpp_undef (parse_in, opt->arg);
+ {
+ cpp_undef (parse_in, opt->arg);
+ coverage_note_define (opt->arg, false);
+ }
else if (opt->code == OPT_A)
{
if (opt->arg[0] == '-')
@@ -1338,6 +1448,7 @@ c_finish_options (void)
if (opt->code == OPT_imacros
&& cpp_push_include (parse_in, opt->arg))
{
+ coverage_note_include (opt->arg);
/* Disable push_command_line_include callback for now. */
include_cursor = deferred_count + 1;
cpp_scan_nooutput (parse_in);
@@ -1382,7 +1493,10 @@ push_command_line_include (void)
if (!cpp_opts->preprocessed && opt->code == OPT_include
&& cpp_push_include (parse_in, opt->arg))
- return;
+ {
+ coverage_note_include (opt->arg);
+ return;
+ }
}
if (include_cursor == deferred_count)
diff --git a/gcc-4.9/gcc/c-family/c-pragma.c b/gcc-4.9/gcc/c-family/c-pragma.c
index 9e2a00eb1..ad115e998 100644
--- a/gcc-4.9/gcc/c-family/c-pragma.c
+++ b/gcc-4.9/gcc/c-family/c-pragma.c
@@ -1188,6 +1188,7 @@ static const struct omp_pragma_def omp_pragmas[] = {
{ "section", PRAGMA_OMP_SECTION },
{ "sections", PRAGMA_OMP_SECTIONS },
{ "single", PRAGMA_OMP_SINGLE },
+ { "task", PRAGMA_OMP_TASK },
{ "taskgroup", PRAGMA_OMP_TASKGROUP },
{ "taskwait", PRAGMA_OMP_TASKWAIT },
{ "taskyield", PRAGMA_OMP_TASKYIELD },
@@ -1200,7 +1201,6 @@ static const struct omp_pragma_def omp_pragmas_simd[] = {
{ "parallel", PRAGMA_OMP_PARALLEL },
{ "simd", PRAGMA_OMP_SIMD },
{ "target", PRAGMA_OMP_TARGET },
- { "task", PRAGMA_OMP_TASK },
{ "teams", PRAGMA_OMP_TEAMS },
};
diff --git a/gcc-4.9/gcc/c-family/c.opt b/gcc-4.9/gcc/c-family/c.opt
index 2abf66cb7..9e0a9a410 100644
--- a/gcc-4.9/gcc/c-family/c.opt
+++ b/gcc-4.9/gcc/c-family/c.opt
@@ -331,6 +331,10 @@ Wconversion-null
C++ ObjC++ Var(warn_conversion_null) Init(1) Warning
Warn for converting NULL from/to a non-pointer type
+Wself-assign-non-pod
+C++ ObjC++ Var(warn_self_assign_non_pod) Init(0) Warning
+Warn when a variable of a non-POD type is assigned to itself
+
Wctor-dtor-privacy
C++ ObjC++ Var(warn_ctor_dtor_privacy) Warning
Warn when all constructors and destructors are private