gcc/c-family/ChangeLog:
PR other/100759
* c-attribs.c (handle_optimize_attribute): Limit sanity check
to a situation where we are not in processing of an optimize
pragma.
* c-pragma.c (handle_pragma_pop_options): Restore target
options.
/* If we previously had some optimization options, use them as the
default. */
gcc_options *saved_global_options = NULL;
- if (flag_checking)
+
+ /* When #pragma GCC optimize pragma is used, it modifies global_options
+ without calling targetm.override_options_after_change. That can leave
+ target flags inconsistent for comparison. */
+ if (flag_checking && optimization_current_node == optimization_default_node)
{
saved_global_options = XNEW (gcc_options);
*saved_global_options = global_options;
* overwritten by invoke_set_current_function_hook. */
cl_optimization_restore (&global_options, &global_options_set,
TREE_OPTIMIZATION (p->optimize_binary));
+ cl_target_option_restore (&global_options, &global_options_set,
+ TREE_TARGET_OPTION (p->target_binary));
if (p->optimize_binary != optimization_current_node)
{