Hi,
    After applied a patch to GCC to make it warn about strict aliasing
    violating, like this: 
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index b6ecaa4..95e745c 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -2913,6 +2913,10 @@ setup_one_parameter (copy_body_data *id, tree p, tree 
value, tree fn,
        }
     }
 
+  if (warn_strict_aliasing > 2)
+    if (strict_aliasing_warning (TREE_TYPE (rhs), TREE_TYPE(p), rhs))
+      warning (OPT_Wstrict_aliasing, "during inlining function %s into 
function %s", fndecl_name(fn), function_name(cfun));
+
    Compiling gcc/testsuite/g++.dg/opt/pmf1.C triggers that warning:

gcc/testsuite/g++.dg/opt/pmf1.C: In function 'int main()':
gcc/testsuite/g++.dg/opt/pmf1.C:72:42: warning: dereferencing type-punned 
pointer will break strict-aliasing rules. With expression: &t, type of 
expresssion: struct Container *, type to cast: struct WorldObject * const. 
[-Wstrict-aliasing]
     t.forward(itemfunptr, &Item::fred, 1);
                                          ^
gcc/testsuite/g++.dg/opt/pmf1.C:72:42: warning: during inlining function void 
WorldObject<Derived>::forward(memfunT, arg1T, arg2T) [with memfunT = void 
(Container::*)(void (Item::*)(int), int); arg1T = void (Item::*)(int); arg2T = 
int; Derived = Container] into function int main() [-Wstrict-aliasing]
    
    It that a problem here? We try to case type Container to its base
    type WorldObject, and that violating the strict aliasing? Let's take
    a look at this.

--
Lin Zuojian 

Reply via email to