public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-6018] pragma: respect pragma in lambda functions
@ 2021-12-16 16:52 Martin Liska
  0 siblings, 0 replies; only message in thread
From: Martin Liska @ 2021-12-16 16:52 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:5b8f5a50a93c5fd44fa1ecb6f431fee1df267571

commit r12-6018-g5b8f5a50a93c5fd44fa1ecb6f431fee1df267571
Author: Martin Liska <mliska@suse.cz>
Date:   Wed Dec 15 17:27:56 2021 +0100

    pragma: respect pragma in lambda functions
    
    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.
    
            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.

Diff:
---
 gcc/attribs.c                            |  3 ++-
 gcc/testsuite/g++.target/i386/pr103696.C | 25 +++++++++++++++++++++++++
 2 files changed, 27 insertions(+), 1 deletion(-)

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" } } */


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-12-16 16:52 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-16 16:52 [gcc r12-6018] pragma: respect pragma in lambda functions Martin Liska

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).