From 4943b75e9f06f0b64ed541430bb7fbccf55fc552 Mon Sep 17 00:00:00 2001
From: Jan Hubicka <jh@suse.cz>
Date: Sat, 9 Apr 2022 21:22:58 +0200
Subject: [PATCH] Update semantic_interposition flag at analysis time

This patch solves problem with FE first finalizing function and then adding
-fno-semantic-interposition flag (by parsing optimization attribute).

gcc/ChangeLog:

2022-04-09  Jan Hubicka  <hubicka@ucw.cz>

	PR ipa/103376
	* cgraphunit.cc (cgraph_node::analyze): update semantic_interposition
	flag.

gcc/testsuite/ChangeLog:

2022-04-09  Jan Hubicka  <hubicka@ucw.cz>

	PR ipa/103376
	* gcc.c-torture/compile/pr103376.c: New test.
---
 gcc/cgraphunit.cc                              | 1 +
 gcc/testsuite/gcc.c-torture/compile/pr103376.c | 9 +++++++++
 2 files changed, 10 insertions(+)
 create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr103376.c

diff --git a/gcc/cgraphunit.cc b/gcc/cgraphunit.cc
index 01f4e28204e6..bc3dc754481f 100644
--- a/gcc/cgraphunit.cc
+++ b/gcc/cgraphunit.cc
@@ -621,6 +621,7 @@ cgraph_node::analyze (void)
   tree decl = this->decl;
   location_t saved_loc = input_location;
   input_location = DECL_SOURCE_LOCATION (decl);
+  semantic_interposition = opt_for_fn (decl, flag_semantic_interposition);
 
   if (thunk)
     {
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr103376.c b/gcc/testsuite/gcc.c-torture/compile/pr103376.c
new file mode 100644
index 000000000000..8c14c3ded38c
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr103376.c
@@ -0,0 +1,9 @@
+/* { dg-additional-options "-Ofast" } */
+__attribute__ ((optimize ("no-associative-math"))) double
+fn3 (double h, double l)
+{
+  return h + l;
+}
+
+double fn3 (double, double) __attribute__ ((optimize ("O2,no-associative-math")));
+
-- 
GitLab