diff options
author | Pranil Dey <mkdeyp@gmail.com> | 2024-09-30 19:03:42 +0530 |
---|---|---|
committer | Pranil Dey <mkdeyp@gmail.com> | 2024-09-30 19:03:42 +0530 |
commit | b602de4ed9f872aa2a07e8cf74d5b3c8446de221 (patch) | |
tree | 0d1fa6e4793d0a240fee8b958764cb93fc837aab /gcc/c | |
parent | c16d4a0ae162abc00d97bb73e598ca00d16cf555 (diff) | |
parent | 87905f63a6521eef1f38082e2368e18c637ef092 (diff) | |
download | gcc-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/ChangeLog | 75 | ||||
-rw-r--r-- | gcc/c/c-decl.cc | 75 | ||||
-rw-r--r-- | gcc/c/c-errors.cc | 38 | ||||
-rw-r--r-- | gcc/c/c-objc-common.cc | 12 | ||||
-rw-r--r-- | gcc/c/c-objc-common.h | 1 | ||||
-rw-r--r-- | gcc/c/c-parser.cc | 11 | ||||
-rw-r--r-- | gcc/c/c-tree.h | 10 | ||||
-rw-r--r-- | gcc/c/c-typeck.cc | 7 |
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; |