https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71585

--- Comment #4 from Martin Liška <marxin at gcc dot gnu.org> ---
Hello

The problem can be seen on both GCC 6.x and current trunk, where we show
following warning message:

pr71585.c:2:9: warning: bad option ‘-fno-stack-protector’ to pragma ‘optimize’
[-Wpragmas]
 #pragma GCC optimize ("-fno-stack-protector")
         ^~~
pr71585.c:7:1: warning: bad option ‘-fno-stack-protector’ to attribute
‘optimize’ [-Wattributes]
 {
 ^

The problem is that '-fstack-protect' is not marked as Optimize option.

Following patch fixed that:

diff --git a/gcc/common.opt b/gcc/common.opt
index 5d90385..a7c5125 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -2221,19 +2221,19 @@ Common RejectNegative Joined
Var(common_deferred_options) Defer
 -fstack-limit-symbol=<name>    Trap if the stack goes past symbol <name>.

 fstack-protector
-Common Report Var(flag_stack_protect, 1) Init(-1)
+Common Report Var(flag_stack_protect, 1) Init(-1) Optimization
 Use propolice as a stack protection method.

 fstack-protector-all
-Common Report RejectNegative Var(flag_stack_protect, 2) Init(-1)
+Common Report RejectNegative Var(flag_stack_protect, 2) Init(-1) Optimization
 Use a stack protection method for every function.

 fstack-protector-strong
-Common Report RejectNegative Var(flag_stack_protect, 3) Init(-1)
+Common Report RejectNegative Var(flag_stack_protect, 3) Init(-1) Optimization
 Use a smart stack protection method for certain functions.

 fstack-protector-explicit
-Common Report RejectNegative Var(flag_stack_protect, 4)
+Common Report RejectNegative Var(flag_stack_protect, 4) Optimization
 Use stack protection method only for functions with the stack_protect
attribute.

The only question is whether we can add the flag to optimize flags? If so, I'll
send the patch to mailing list.
Btw. I've come to a misleading hint related to the option: PR69265 and
accidentally I hit also this: PR71652.

Another possible problem I can see is that some i386 target attributes are not
handled,
for instance:

pr71585.c:3:9: error: attribute(target("stack-protector-guard=tls")) is unknown
 #pragma GCC target ("stack-protector-guard=tls")
         ^~~

Following hunk is necessary to enable the parsing:

diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index f7944f9..73f2149 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -6458,6 +6458,7 @@ ix86_valid_target_attribute_inner_p (tree args, char
*p_strings[],

     /* enum options */
     IX86_ATTR_ENUM ("fpmath=", OPT_mfpmath_),
+    IX86_ATTR_ENUM ("stack-protector-guard=", OPT_mstack_protector_guard_),

     /* string options */
     IX86_ATTR_STR ("arch=",    IX86_FUNCTION_SPECIFIC_ARCH),

I'll write a test-case for that.

Martin

Reply via email to