aboutsummaryrefslogtreecommitdiff
path: root/gcc/c
diff options
context:
space:
mode:
authorPranil Dey <mkdeyp@gmail.com>2024-09-30 19:03:42 +0530
committerPranil Dey <mkdeyp@gmail.com>2024-09-30 19:03:42 +0530
commitb602de4ed9f872aa2a07e8cf74d5b3c8446de221 (patch)
tree0d1fa6e4793d0a240fee8b958764cb93fc837aab /gcc/c
parentc16d4a0ae162abc00d97bb73e598ca00d16cf555 (diff)
parent87905f63a6521eef1f38082e2368e18c637ef092 (diff)
downloadgcc-b602de4ed9f872aa2a07e8cf74d5b3c8446de221.zip
gcc-b602de4ed9f872aa2a07e8cf74d5b3c8446de221.tar.gz
gcc-b602de4ed9f872aa2a07e8cf74d5b3c8446de221.tar.bz2
Merge branch 'master' of git+ssh://gcc.gnu.org/git/gcc into devel/nothrow-detection
Diffstat (limited to 'gcc/c')
-rw-r--r--gcc/c/ChangeLog75
-rw-r--r--gcc/c/c-decl.cc75
-rw-r--r--gcc/c/c-errors.cc38
-rw-r--r--gcc/c/c-objc-common.cc12
-rw-r--r--gcc/c/c-objc-common.h1
-rw-r--r--gcc/c/c-parser.cc11
-rw-r--r--gcc/c/c-tree.h10
-rw-r--r--gcc/c/c-typeck.cc7
8 files changed, 192 insertions, 37 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index a05fbec..013948d 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,78 @@
+2024-09-25 Tobias Burnus <tburnus@baylibre.com>
+
+ * c-parser.cc (c_parser_omp_declare_target): Set target-used bit
+ in omp_requires_mask.
+
+2024-09-24 Tobias Burnus <tburnus@baylibre.com>
+
+ * c-parser.cc (c_parser_omp_requires): Handle self_maps clause.
+
+2024-09-20 Martin Uecker <uecker@tugraz.at>
+
+ PR c/116726
+ * c-typeck.cc (tagged_types_tu_compatible_p): Restore value
+ of the cache after recursing into comptypes_internal.
+
+2024-09-09 David Malcolm <dmalcolm@redhat.com>
+
+ * c-errors.cc (pedwarn_c23): Use "diagnostic_option_id option_id"
+ rather than "int opt". Update for renaming of diagnostic_info
+ field.
+ (pedwarn_c11): Likewise.
+ (pedwarn_c99): Likewise.
+ (pedwarn_c90): Likewise.
+ * c-tree.h (pedwarn_c90): Likewise for decl.
+ (pedwarn_c99): Likewise.
+ (pedwarn_c11): Likewise.
+ (pedwarn_c23): Likewise.
+
+2024-09-09 David Malcolm <dmalcolm@redhat.com>
+
+ PR other/116613
+ * c-objc-common.cc (c_initialize_diagnostics): Rename
+ diagnostic_context's "printer" field to "m_printer".
+
+2024-09-06 Jason Merrill <jason@redhat.com>
+
+ PR c++/46457
+ PR c++/81665
+ * c-objc-common.h (c_objc_attribute_table): Add
+ c_common_clang_attribute_table.
+
+2024-09-03 David Malcolm <dmalcolm@redhat.com>
+
+ * c-objc-common.cc (print_type): Prefix all output_buffer fields
+ with "m_".
+
+2024-09-02 Richard Sandiford <richard.sandiford@arm.com>
+
+ * c-typeck.cc (build_asm_expr): Rename ASM_INPUT_P to ASM_BASIC_P.
+
+2024-08-31 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/116130
+ * c-decl.cc (handle_std_unsequenced_attribute): New function.
+ (handle_std_reproducible_attribute): Likewise.
+ (std_attributes): Add entries for "unsequenced" and "reproducible"
+ attributes.
+ (c_warn_type_attributes): Add TYPE argument. Allow unsequenced
+ or reproducible attributes if it is FUNCTION_TYPE.
+ (groktypename): Adjust c_warn_type_attributes caller.
+ (grokdeclarator): Likewise.
+ (finish_declspecs): Likewise.
+ * c-parser.cc (c_parser_declaration_or_fndef): Likewise.
+ * c-tree.h (c_warn_type_attributes): Add TYPE argument.
+
+2024-08-29 David Malcolm <dmalcolm@redhat.com>
+
+ * c-objc-common.cc (c_tree_printer): Convert final param from
+ const char ** to pp_token_list &.
+
+2024-08-02 Martin Uecker <uecker@tugraz.at>
+
+ * c-decl.cc (grokdeclarator, finish_struct): Set and
+ propagate TYPE_TYPELESS_STORAGE.
+
2024-07-23 Andi Kleen <ak@linux.intel.com>
PR c/83324
diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc
index 97f1d346..aa7f69d 100644
--- a/gcc/c/c-decl.cc
+++ b/gcc/c/c-decl.cc
@@ -4702,6 +4702,39 @@ handle_std_noreturn_attribute (tree *node, tree name, tree args,
}
}
+/* Handle the standard [[unsequenced]] attribute. */
+
+static tree
+handle_std_unsequenced_attribute (tree *node, tree name, tree args,
+ int flags, bool *no_add_attrs)
+{
+ /* Unlike GNU __attribute__ ((unsequenced)), the standard [[unsequenced]]
+ should be only applied to function declarators or type specifiers which
+ have function type. */
+ if (node[2])
+ {
+ auto_diagnostic_group d;
+ if (pedwarn (input_location, OPT_Wattributes,
+ "standard %qE attribute can only be applied to function "
+ "declarators or type specifiers with function type", name))
+ inform (input_location, "did you mean to specify it after %<)%> "
+ "following function parameters?");
+ *no_add_attrs = true;
+ return NULL_TREE;
+ }
+ return handle_unsequenced_attribute (node, name, args, flags, no_add_attrs);
+}
+
+/* Handle the standard [[reproducible]] attribute. */
+
+static tree
+handle_std_reproducible_attribute (tree *node, tree name, tree args,
+ int flags, bool *no_add_attrs)
+{
+ return handle_std_unsequenced_attribute (node, name, args, flags,
+ no_add_attrs);
+}
+
/* Table of supported standard (C23) attributes. */
static const attribute_spec std_attributes[] =
{
@@ -4718,7 +4751,11 @@ static const attribute_spec std_attributes[] =
{ "nodiscard", 0, 1, false, false, false, false,
handle_nodiscard_attribute, NULL },
{ "noreturn", 0, 0, false, false, false, false,
- handle_std_noreturn_attribute, NULL }
+ handle_std_noreturn_attribute, NULL },
+ { "reproducible", 0, 0, false, true, true, false,
+ handle_std_reproducible_attribute, NULL },
+ { "unsequenced", 0, 0, false, true, true, false,
+ handle_std_unsequenced_attribute, NULL }
};
const scoped_attribute_specs std_attribute_table =
@@ -4911,12 +4948,24 @@ c_warn_unused_attributes (tree attrs)
list of attributes with them removed. */
tree
-c_warn_type_attributes (tree attrs)
+c_warn_type_attributes (tree type, tree attrs)
{
tree *attr_ptr = &attrs;
while (*attr_ptr)
if (get_attribute_namespace (*attr_ptr) == NULL_TREE)
{
+ if (TREE_CODE (type) == FUNCTION_TYPE)
+ {
+ tree name = get_attribute_name (*attr_ptr);
+ /* [[unsequenced]] and [[reproducible]] is fine on function
+ types that aren't being defined. */
+ if (is_attribute_p ("unsequenced", name)
+ || is_attribute_p ("reproducible", name))
+ {
+ attr_ptr = &TREE_CHAIN (*attr_ptr);
+ continue;
+ }
+ }
pedwarn (input_location, OPT_Wattributes, "%qE attribute ignored",
get_attribute_name (*attr_ptr));
*attr_ptr = TREE_CHAIN (*attr_ptr);
@@ -5386,7 +5435,7 @@ groktypename (struct c_type_name *type_name, tree *expr,
DEPRECATED_NORMAL);
/* Apply attributes. */
- attrs = c_warn_type_attributes (attrs);
+ attrs = c_warn_type_attributes (type, attrs);
decl_attributes (&type, attrs, 0);
return type;
@@ -7196,7 +7245,7 @@ grokdeclarator (const struct c_declarator *declarator,
else if (inner_decl->kind == cdk_array)
attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
}
- attrs = c_warn_type_attributes (attrs);
+ attrs = c_warn_type_attributes (type, attrs);
returned_attrs = decl_attributes (&type,
chainon (returned_attrs, attrs),
attr_flags);
@@ -7502,12 +7551,18 @@ grokdeclarator (const struct c_declarator *declarator,
modify the shared type, so we gcc_assert (itype)
below. */
{
+ /* Identify typeless storage as introduced in C2Y
+ and supported also in earlier language modes. */
+ bool typeless = (char_type_p (type)
+ && !(type_quals & TYPE_QUAL_ATOMIC))
+ || (AGGREGATE_TYPE_P (type)
+ && TYPE_TYPELESS_STORAGE (type));
+
addr_space_t as = DECODE_QUAL_ADDR_SPACE (type_quals);
if (!ADDR_SPACE_GENERIC_P (as) && as != TYPE_ADDR_SPACE (type))
type = build_qualified_type (type,
ENCODE_QUAL_ADDR_SPACE (as));
-
- type = build_array_type (type, itype);
+ type = build_array_type (type, itype, typeless);
}
if (type != error_mark_node)
@@ -9659,6 +9714,10 @@ finish_struct (location_t loc, tree t, tree fieldlist, tree attributes,
if (DECL_NAME (x)
|| RECORD_OR_UNION_TYPE_P (TREE_TYPE (x)))
saw_named_field = true;
+
+ if (AGGREGATE_TYPE_P (TREE_TYPE (x))
+ && TYPE_TYPELESS_STORAGE (TREE_TYPE (x)))
+ TYPE_TYPELESS_STORAGE (t) = true;
}
detect_field_duplicates (fieldlist);
@@ -9859,6 +9918,7 @@ finish_struct (location_t loc, tree t, tree fieldlist, tree attributes,
TYPE_FIELDS (x) = TYPE_FIELDS (t);
TYPE_LANG_SPECIFIC (x) = TYPE_LANG_SPECIFIC (t);
TYPE_TRANSPARENT_AGGR (x) = TYPE_TRANSPARENT_AGGR (t);
+ TYPE_TYPELESS_STORAGE (x) = TYPE_TYPELESS_STORAGE (t);
C_TYPE_FIELDS_READONLY (x) = C_TYPE_FIELDS_READONLY (t);
C_TYPE_FIELDS_VOLATILE (x) = C_TYPE_FIELDS_VOLATILE (t);
C_TYPE_FIELDS_NON_CONSTEXPR (x) = C_TYPE_FIELDS_NON_CONSTEXPR (t);
@@ -13433,7 +13493,8 @@ finish_declspecs (struct c_declspecs *specs)
handle_postfix_attrs:
if (specs->type != NULL)
{
- specs->postfix_attrs = c_warn_type_attributes (specs->postfix_attrs);
+ specs->postfix_attrs
+ = c_warn_type_attributes (specs->type, specs->postfix_attrs);
decl_attributes (&specs->type, specs->postfix_attrs, 0);
specs->postfix_attrs = NULL_TREE;
}
diff --git a/gcc/c/c-errors.cc b/gcc/c/c-errors.cc
index f36e7f9..c6b7c10 100644
--- a/gcc/c/c-errors.cc
+++ b/gcc/c/c-errors.cc
@@ -32,7 +32,9 @@ along with GCC; see the file COPYING3. If not see
when C2Y is specified. */
bool
-pedwarn_c23 (location_t location, int opt, const char *gmsgid, ...)
+pedwarn_c23 (location_t location,
+ diagnostic_option_id option_id,
+ const char *gmsgid, ...)
{
diagnostic_info diagnostic;
va_list ap;
@@ -47,7 +49,7 @@ pedwarn_c23 (location_t location, int opt, const char *gmsgid, ...)
diagnostic_set_info (&diagnostic, gmsgid, &ap, &richloc,
(pedantic && !flag_isoc2y)
? DK_PEDWARN : DK_WARNING);
- diagnostic.option_index = OPT_Wc23_c2y_compat;
+ diagnostic.option_id = OPT_Wc23_c2y_compat;
warned = diagnostic_report_diagnostic (global_dc, &diagnostic);
}
/* -Wno-c23-c2y-compat suppresses even the pedwarns. */
@@ -57,7 +59,7 @@ pedwarn_c23 (location_t location, int opt, const char *gmsgid, ...)
else if (pedantic && !flag_isoc2y)
{
diagnostic_set_info (&diagnostic, gmsgid, &ap, &richloc, DK_PEDWARN);
- diagnostic.option_index = opt;
+ diagnostic.option_id = option_id;
warned = diagnostic_report_diagnostic (global_dc, &diagnostic);
}
va_end (ap);
@@ -71,7 +73,9 @@ pedwarn_c23 (location_t location, int opt, const char *gmsgid, ...)
when C23 is specified. */
bool
-pedwarn_c11 (location_t location, int opt, const char *gmsgid, ...)
+pedwarn_c11 (location_t location,
+ diagnostic_option_id option_id,
+ const char *gmsgid, ...)
{
diagnostic_info diagnostic;
va_list ap;
@@ -86,7 +90,7 @@ pedwarn_c11 (location_t location, int opt, const char *gmsgid, ...)
diagnostic_set_info (&diagnostic, gmsgid, &ap, &richloc,
(pedantic && !flag_isoc23)
? DK_PEDWARN : DK_WARNING);
- diagnostic.option_index = OPT_Wc11_c23_compat;
+ diagnostic.option_id = OPT_Wc11_c23_compat;
warned = diagnostic_report_diagnostic (global_dc, &diagnostic);
}
/* -Wno-c11-c23-compat suppresses even the pedwarns. */
@@ -96,7 +100,7 @@ pedwarn_c11 (location_t location, int opt, const char *gmsgid, ...)
else if (pedantic && !flag_isoc23)
{
diagnostic_set_info (&diagnostic, gmsgid, &ap, &richloc, DK_PEDWARN);
- diagnostic.option_index = opt;
+ diagnostic.option_id = option_id;
warned = diagnostic_report_diagnostic (global_dc, &diagnostic);
}
va_end (ap);
@@ -110,7 +114,9 @@ pedwarn_c11 (location_t location, int opt, const char *gmsgid, ...)
when C11 is specified. */
bool
-pedwarn_c99 (location_t location, int opt, const char *gmsgid, ...)
+pedwarn_c99 (location_t location,
+ diagnostic_option_id option_id,
+ const char *gmsgid, ...)
{
diagnostic_info diagnostic;
va_list ap;
@@ -125,7 +131,7 @@ pedwarn_c99 (location_t location, int opt, const char *gmsgid, ...)
diagnostic_set_info (&diagnostic, gmsgid, &ap, &richloc,
(pedantic && !flag_isoc11)
? DK_PEDWARN : DK_WARNING);
- diagnostic.option_index = OPT_Wc99_c11_compat;
+ diagnostic.option_id = OPT_Wc99_c11_compat;
warned = diagnostic_report_diagnostic (global_dc, &diagnostic);
}
/* -Wno-c99-c11-compat suppresses even the pedwarns. */
@@ -135,7 +141,7 @@ pedwarn_c99 (location_t location, int opt, const char *gmsgid, ...)
else if (pedantic && !flag_isoc11)
{
diagnostic_set_info (&diagnostic, gmsgid, &ap, &richloc, DK_PEDWARN);
- diagnostic.option_index = opt;
+ diagnostic.option_id = option_id;
warned = diagnostic_report_diagnostic (global_dc, &diagnostic);
}
va_end (ap);
@@ -150,7 +156,9 @@ pedwarn_c99 (location_t location, int opt, const char *gmsgid, ...)
when C99 is specified. (There is no flag_c90.) */
bool
-pedwarn_c90 (location_t location, int opt, const char *gmsgid, ...)
+pedwarn_c90 (location_t location,
+ diagnostic_option_id option_id,
+ const char *gmsgid, ...)
{
diagnostic_info diagnostic;
va_list ap;
@@ -159,9 +167,9 @@ pedwarn_c90 (location_t location, int opt, const char *gmsgid, ...)
va_start (ap, gmsgid);
/* Warnings such as -Wvla are the most specific ones. */
- if (opt != OPT_Wpedantic)
+ if (option_id.m_idx != OPT_Wpedantic)
{
- int opt_var = *(int *) option_flag_var (opt, &global_options);
+ int opt_var = *(int *) option_flag_var (option_id.m_idx, &global_options);
if (opt_var == 0)
goto out;
else if (opt_var > 0)
@@ -169,7 +177,7 @@ pedwarn_c90 (location_t location, int opt, const char *gmsgid, ...)
diagnostic_set_info (&diagnostic, gmsgid, &ap, &richloc,
(pedantic && !flag_isoc99)
? DK_PEDWARN : DK_WARNING);
- diagnostic.option_index = opt;
+ diagnostic.option_id = option_id;
diagnostic_report_diagnostic (global_dc, &diagnostic);
warned = true;
goto out;
@@ -182,7 +190,7 @@ pedwarn_c90 (location_t location, int opt, const char *gmsgid, ...)
diagnostic_set_info (&diagnostic, gmsgid, &ap, &richloc,
(pedantic && !flag_isoc99)
? DK_PEDWARN : DK_WARNING);
- diagnostic.option_index = OPT_Wc90_c99_compat;
+ diagnostic.option_id = OPT_Wc90_c99_compat;
diagnostic_report_diagnostic (global_dc, &diagnostic);
}
/* -Wno-c90-c99-compat suppresses the pedwarns. */
@@ -192,7 +200,7 @@ pedwarn_c90 (location_t location, int opt, const char *gmsgid, ...)
else if (pedantic && !flag_isoc99)
{
diagnostic_set_info (&diagnostic, gmsgid, &ap, &richloc, DK_PEDWARN);
- diagnostic.option_index = opt;
+ diagnostic.option_id = option_id;
diagnostic_report_diagnostic (global_dc, &diagnostic);
warned = true;
}
diff --git a/gcc/c/c-objc-common.cc b/gcc/c/c-objc-common.cc
index fde9ae6..eb0c4b8 100644
--- a/gcc/c/c-objc-common.cc
+++ b/gcc/c/c-objc-common.cc
@@ -34,7 +34,7 @@ along with GCC; see the file COPYING3. If not see
#include "dwarf2.h"
static bool c_tree_printer (pretty_printer *, text_info *, const char *,
- int, bool, bool, bool, bool *, const char **);
+ int, bool, bool, bool, bool *, pp_token_list &);
/* Info for C language features which can be queried through
__has_{feature,extension}. */
@@ -236,7 +236,7 @@ print_type (c_pretty_printer *cpp, tree t, bool *quoted,
highlight_color = nullptr;
gcc_assert (TYPE_P (t));
- struct obstack *ob = pp_buffer (cpp)->obstack;
+ struct obstack *ob = pp_buffer (cpp)->m_obstack;
char *p = (char *) obstack_base (ob);
/* Remember the end of the initial dump. */
int len = obstack_object_size (ob);
@@ -258,7 +258,7 @@ print_type (c_pretty_printer *cpp, tree t, bool *quoted,
c_pretty_printer cpp2;
/* Print the stripped version into a temporary printer. */
cpp2.type_id (aka_type);
- struct obstack *ob2 = pp_buffer (&cpp2)->obstack;
+ struct obstack *ob2 = pp_buffer (&cpp2)->m_obstack;
/* Get the stripped version from the temporary printer. */
const char *aka = (char *) obstack_base (ob2);
int aka_len = obstack_object_size (ob2);
@@ -318,7 +318,7 @@ pp_markup::element_quoted_type::print_type (pp_markup::context &ctxt)
static bool
c_tree_printer (pretty_printer *pp, text_info *text, const char *spec,
int precision, bool wide, bool set_locus, bool hash,
- bool *quoted, const char **)
+ bool *quoted, pp_token_list &)
{
tree t = NULL_TREE;
// FIXME: the next cast should be a dynamic_cast, when it is permitted.
@@ -411,9 +411,9 @@ has_c_linkage (const_tree decl ATTRIBUTE_UNUSED)
void
c_initialize_diagnostics (diagnostic_context *context)
{
- pretty_printer *base = context->printer;
+ pretty_printer *base = context->m_printer;
c_pretty_printer *pp = XNEW (c_pretty_printer);
- context->printer = new (pp) c_pretty_printer ();
+ context->m_printer = new (pp) c_pretty_printer ();
/* It is safe to free this object because it was previously XNEW()'d. */
base->~pretty_printer ();
diff --git a/gcc/c/c-objc-common.h b/gcc/c/c-objc-common.h
index 20af5a5..365b593 100644
--- a/gcc/c/c-objc-common.h
+++ b/gcc/c/c-objc-common.h
@@ -79,6 +79,7 @@ static const scoped_attribute_specs *const c_objc_attribute_table[] =
{
&std_attribute_table,
&c_common_gnu_attribute_table,
+ &c_common_clang_attribute_table,
&c_common_format_attribute_table
};
diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc
index 9b9284b..a681438 100644
--- a/gcc/c/c-parser.cc
+++ b/gcc/c/c-parser.cc
@@ -2677,8 +2677,9 @@ c_parser_declaration_or_fndef (c_parser *parser, bool fndef_ok,
/* Postfix [[]] attributes are valid with C23
auto, although not with __auto_type, and
modify the type given by the initializer. */
- specs->postfix_attrs =
- c_warn_type_attributes (specs->postfix_attrs);
+ specs->postfix_attrs
+ = c_warn_type_attributes (specs->type,
+ specs->postfix_attrs);
decl_attributes (&specs->type, specs->postfix_attrs, 0);
specs->postfix_attrs = NULL_TREE;
}
@@ -25491,6 +25492,9 @@ c_parser_omp_declare_target (c_parser *parser)
int device_type = 0;
bool indirect = false;
bool only_device_type_or_indirect = true;
+ if (flag_openmp)
+ omp_requires_mask
+ = (enum omp_requires) (omp_requires_mask | OMP_REQUIRES_TARGET_USED);
if (c_parser_next_token_is (parser, CPP_NAME)
|| (c_parser_next_token_is (parser, CPP_COMMA)
&& c_parser_peek_2nd_token (parser)->type == CPP_NAME))
@@ -26207,6 +26211,8 @@ c_parser_omp_requires (c_parser *parser)
this_req = OMP_REQUIRES_UNIFIED_ADDRESS;
else if (!strcmp (p, "unified_shared_memory"))
this_req = OMP_REQUIRES_UNIFIED_SHARED_MEMORY;
+ else if (!strcmp (p, "self_maps"))
+ this_req = OMP_REQUIRES_SELF_MAPS;
else if (!strcmp (p, "dynamic_allocators"))
this_req = OMP_REQUIRES_DYNAMIC_ALLOCATORS;
else if (!strcmp (p, "reverse_offload"))
@@ -26273,6 +26279,7 @@ c_parser_omp_requires (c_parser *parser)
{
error_at (cloc, "expected %<unified_address%>, "
"%<unified_shared_memory%>, "
+ "%<self_maps%>, "
"%<dynamic_allocators%>, "
"%<reverse_offload%> "
"or %<atomic_default_mem_order%> clause");
diff --git a/gcc/c/c-tree.h b/gcc/c/c-tree.h
index 3dc6338..b3e7bb0 100644
--- a/gcc/c/c-tree.h
+++ b/gcc/c/c-tree.h
@@ -680,7 +680,7 @@ extern tree c_builtin_function (tree);
extern tree c_builtin_function_ext_scope (tree);
extern tree c_simulate_builtin_function_decl (tree);
extern void c_warn_unused_attributes (tree);
-extern tree c_warn_type_attributes (tree);
+extern tree c_warn_type_attributes (tree, tree);
extern void shadow_tag (const struct c_declspecs *);
extern void shadow_tag_warned (const struct c_declspecs *, int);
extern tree start_enum (location_t, struct c_enum_contents *, tree, tree,
@@ -899,13 +899,13 @@ extern void c_bind (location_t, tree, bool);
extern bool tag_exists_p (enum tree_code, tree);
/* In c-errors.cc */
-extern bool pedwarn_c90 (location_t, int opt, const char *, ...)
+extern bool pedwarn_c90 (location_t, diagnostic_option_id, const char *, ...)
ATTRIBUTE_GCC_DIAG(3,4);
-extern bool pedwarn_c99 (location_t, int opt, const char *, ...)
+extern bool pedwarn_c99 (location_t, diagnostic_option_id, const char *, ...)
ATTRIBUTE_GCC_DIAG(3,4);
-extern bool pedwarn_c11 (location_t, int opt, const char *, ...)
+extern bool pedwarn_c11 (location_t, diagnostic_option_id, const char *, ...)
ATTRIBUTE_GCC_DIAG(3,4);
-extern bool pedwarn_c23 (location_t, int opt, const char *, ...)
+extern bool pedwarn_c23 (location_t, diagnostic_option_id, const char *, ...)
ATTRIBUTE_GCC_DIAG(3,4);
extern void
diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc
index 094e41f..ba6d96d 100644
--- a/gcc/c/c-typeck.cc
+++ b/gcc/c/c-typeck.cc
@@ -1686,8 +1686,11 @@ tagged_types_tu_compatible_p (const_tree t1, const_tree t2,
data->anon_field = !DECL_NAME (s1);
data->pointedto = false;
+ const struct tagged_tu_seen_cache *cache = data->cache;
data->cache = &entry;
- if (!comptypes_internal (TREE_TYPE (s1), TREE_TYPE (s2), data))
+ bool ret = comptypes_internal (TREE_TYPE (s1), TREE_TYPE (s2), data);
+ data->cache = cache;
+ if (!ret)
return false;
tree st1 = TYPE_SIZE (TREE_TYPE (s1));
@@ -11672,7 +11675,7 @@ build_asm_expr (location_t loc, tree string, tree outputs, tree inputs,
/* asm statements without outputs, including simple ones, are treated
as volatile. */
- ASM_INPUT_P (args) = simple;
+ ASM_BASIC_P (args) = simple;
ASM_VOLATILE_P (args) = (noutputs == 0);
ASM_INLINE_P (args) = is_inline;