public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] pragma: respect pragma in lambda functions
@ 2021-12-16 11:07 Martin Liška
  2021-12-16 16:43 ` Jeff Law
  0 siblings, 1 reply; 2+ messages in thread
From: Martin Liška @ 2021-12-16 11:07 UTC (permalink / raw)
  To: gcc-patches

In g:01ad8c54fdca we started supporting target pragma changes
that are primarily caused by optimization option. The same can happen
in the opposite way and we need to check for changes both
in optimization_current_node and target_option_current_node.

Patch can bootstrap on x86_64-linux-gnu and survives regression tests.

Ready to be installed?
Thanks,
Martin

	PR c++/103696

gcc/ChangeLog:

	* attribs.c (decl_attributes): Check if
	target_option_current_node is changed.

gcc/testsuite/ChangeLog:

	* g++.target/i386/pr103696.C: New test.
---
  gcc/attribs.c                            |  3 ++-
  gcc/testsuite/g++.target/i386/pr103696.C | 25 ++++++++++++++++++++++++
  2 files changed, 27 insertions(+), 1 deletion(-)
  create mode 100644 gcc/testsuite/g++.target/i386/pr103696.C

diff --git a/gcc/attribs.c b/gcc/attribs.c
index 01a9ed66485..29703e75fba 100644
--- a/gcc/attribs.c
+++ b/gcc/attribs.c
@@ -605,7 +605,8 @@ decl_attributes (tree *node, tree attributes, int flags,
      }
  
    if (TREE_CODE (*node) == FUNCTION_DECL
-      && optimization_current_node != optimization_default_node
+      && (optimization_current_node != optimization_default_node
+	  || target_option_current_node != target_option_default_node)
        && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node))
      {
        DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node) = optimization_current_node;
diff --git a/gcc/testsuite/g++.target/i386/pr103696.C b/gcc/testsuite/g++.target/i386/pr103696.C
new file mode 100644
index 00000000000..de7d5c68be9
--- /dev/null
+++ b/gcc/testsuite/g++.target/i386/pr103696.C
@@ -0,0 +1,25 @@
+// PR c++/103696
+// { dg-options "-O2 -std=c++14 -fdump-tree-optimized" }
+
+int global_var;
+
+void fn() {
+}
+
+#pragma GCC optimize("finite-math-only")
+#pragma GCC target("sse3")
+
+void fn2() {
+}
+
+void fn3() {
+}
+
+int solve() {
+    auto nested = []() {
+        return global_var;
+    };
+    return nested();
+}
+
+/* { dg-final { scan-tree-dump-not "lambda" "optimized" } } */
-- 
2.34.1


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] pragma: respect pragma in lambda functions
  2021-12-16 11:07 [PATCH] pragma: respect pragma in lambda functions Martin Liška
@ 2021-12-16 16:43 ` Jeff Law
  0 siblings, 0 replies; 2+ messages in thread
From: Jeff Law @ 2021-12-16 16:43 UTC (permalink / raw)
  To: Martin Liška, gcc-patches



On 12/16/2021 4:07 AM, Martin Liška wrote:
> In g:01ad8c54fdca we started supporting target pragma changes
> that are primarily caused by optimization option. The same can happen
> in the opposite way and we need to check for changes both
> in optimization_current_node and target_option_current_node.
>
> Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
>
> Ready to be installed?
> Thanks,
> Martin
>
>     PR c++/103696
>
> gcc/ChangeLog:
>
>     * attribs.c (decl_attributes): Check if
>     target_option_current_node is changed.
>
> gcc/testsuite/ChangeLog:
>
>     * g++.target/i386/pr103696.C: New test.
OK
jeff


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-12-16 16:43 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-16 11:07 [PATCH] pragma: respect pragma in lambda functions Martin Liška
2021-12-16 16:43 ` Jeff Law

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).