[ 
https://issues.apache.org/jira/browse/TS-837?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13065973#comment-13065973
 ] 

Alan M. Carroll commented on TS-837:
------------------------------------

I spent over a day working on this when I ran it to it and the problem is much 
larger than just this one place. I found no end to similar issues and in at 
least one case (casting between sockaddr types in ink_inet.h) no reasonable 
solution[1]. I think it is insolvable without changes to the compiler or the 
language specification[2]. The best that can be done is the work around of 
using -fno-strict-aliasing as a gcc option.

I do have a solution to this specific issue which I will check in because 
(IMHO) it's cleaner, better code, and another couple fixes on this same theme. 
Those are just a drop in the bucket of the underlying issue, however (see 
I_ProxyAllocator.h for another nasty instance).

[1] It does seem possible to work around if you declare a local uint64_t and 
assign in to and out of it. The variable is required, just casting through 
uint64_t doesn't suffice. The Unix paradigm for network address handling is 
critically dependent on exactly that type of type punning which makes a work 
around challenging at best.

[2] My suggestion would be a monad like "volatile" which means "this pointer is 
potentially aliasing  / aliased by another pointer" and prevents optimizations, 
just like volatile does.

> ATS fails to compile with gcc 4.6.1 with --enable-debug
> -------------------------------------------------------
>
>                 Key: TS-837
>                 URL: https://issues.apache.org/jira/browse/TS-837
>             Project: Traffic Server
>          Issue Type: Bug
>    Affects Versions: 3.1.0, 3.0.0
>         Environment: Linux, Debian, Amd64 + GCC 4.6.1
>            Reporter: Igor Galić
>             Fix For: 3.1.0
>
>
> {noformat}
> In file included from ../../proxy/ControlMatcher.h:104:0,
>                  from ../../proxy/ParentSelection.h:37,
>                  from P_Socks.h:30,
>                  from P_Net.h:106,
>                  from Connection.cc:34:
> ../../proxy/hdrs/HTTP.h: In member function 'INK_MD5 
> HTTPInfo::object_key_get()':
> ../../proxy/hdrs/HTTP.h:1375:24: error: dereferencing type-punned pointer 
> will break strict-aliasing rules [-Werror=strict-aliasing]
> ../../proxy/hdrs/HTTP.h: In member function 'int64_t 
> HTTPInfo::object_size_get()':
> ../../proxy/hdrs/HTTP.h:1405:24: error: dereferencing type-punned pointer 
> will break strict-aliasing rules [-Werror=strict-aliasing]
> ../../proxy/hdrs/HTTP.h: In member function 'void 
> HTTPInfo::object_size_set(int64_t)':
> ../../proxy/hdrs/HTTP.h:1422:51: error: dereferencing type-punned pointer 
> will break strict-aliasing rules [-Werror=strict-aliasing]
> cc1plus: all warnings being treated as errors
> *** [Connection.o] Error 1
> make[2]: Leaving directory `/netsrc/trafficserver-3.0.0/iocore/net'
> make[1]: *** [all-recursive] Error 1
> make[1]: Leaving directory `/netsrc/trafficserver-3.0.0/iocore'
> make: *** [all-recursive] Error 1
> {noformat}

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira


Reply via email to