From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!news.eternal-september.org!feeder.eternal-september.org!news.unit0.net!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Niklas Holsti Newsgroups: comp.lang.ada Subject: Re: Strict aliasing, is it OK? Date: Tue, 4 Jul 2017 21:15:52 +0300 Organization: Tidorum Ltd Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Trace: individual.net Dtw92iZuUU5MM4P+TXtL2Q7dV77GanXm5h7r/zcGP5fambZXhS Cancel-Lock: sha1:T5I1FcDoZ4pbPvsOg+nXRxVp7sU= User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 In-Reply-To: Xref: news.eternal-september.org comp.lang.ada:47283 Date: 2017-07-04T21:15:52+03:00 List-Id: On 17-07-04 20:49 , Victor Porton wrote: > I've started an ambitious open source project: > https://en.wikiversity.org/wiki/Automatic_transformation_of_XML_namespaces > > I am going to implement it in Ada. > > Note the file > > https://github.com/vporton/redland-bindings/blob/ada2012/ada/src/rdf-raptor-parser.adb > > Here is an extract from my code: > > type My_Dummy_Access is access constant RDF.Auxiliary.Dummy_Record; > > function C_Raptor_Parser_Get_Description (Parser: Handle_Type) return My_Dummy_Access > with Import, Convention=>C, External_Name=>"raptor_parser_get_description"; > > function Get_Description (Parser: Parser_Type) return RDF.Raptor.Syntaxes.Syntax_Description_Type is > function Conv is new Ada.Unchecked_Conversion(My_Dummy_Access, RDF.Raptor.Syntaxes.Syntax_Description_Type); > begin > return Conv( C_Raptor_Parser_Get_Description(Get_Handle(Parser)) ); > end; > > > When I compile this: > > $ (cd src && gnatgcc -gnatf -c -fPIC -g -O2 -gnat2012 rdf-raptor-parser.adb) > rdf-raptor-parser.adb:132:07: warning: possible aliasing problem for type "Syntax_Description_Type" > rdf-raptor-parser.adb:132:07: warning: use -fno-strict-aliasing switch for references > rdf-raptor-parser.adb:132:07: warning: or use "pragma No_Strict_Aliasing (Syntax_Description_Type);" > > I am not sure if it is OK to insert pragma No_Strict_Aliasing into my code. > > GNAT Users Guide is cryptic. To me the GNAT UG (https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gnat_ugn.pdf#f3) seems very clear. > The only thing I understood for sure is that sometimes strict > aliasing may cause a trouble. The question is whether your program uses Unchecked_Conversion (or some other unchecked tricks) to make a variable of type "access SomeType" point to an object that is not of the type "SomeType". Your instances of Unchecked_Conversion make GNAT suspect that your program might do such things. GNAT is warning you that your program would then violate the assumptions that underlie some of GNAT's code optimizations when the "strict aliasing" option is on, which means that the optimized code might not behave in the way you expect. The User Guide has an example of such unexpected behaviour. > I am not sure if this is a case > with my code. My code looks quite innocent, so I feel my idea will not be > broken by the compiler, but I am not sure. Please help. Just ask yourself if, in your program, an "access SomeType" always points to "SomeType". If so, you should be ok. If not, or if you are unsure, it is safer to use the pragma or compiler option that GNAT suggests; your program is then more likely to work as you want it to. -- Niklas Holsti Tidorum Ltd niklas holsti tidorum fi . @ .