comp.lang.ada
 help / color / mirror / Atom feed
From: Victor Porton <porton@narod.ru>
Subject: Re: Strict aliasing, is it OK?
Date: Tue, 04 Jul 2017 21:30:38 +0300
Date: 2017-07-04T21:30:38+03:00	[thread overview]
Message-ID: <ojgmsu$16ou$1@gioia.aioe.org> (raw)
In-Reply-To: es24aoFpb17U1@mid.individual.net

Niklas Holsti wrote:

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

I posted because I need help.

Please you answer the question:

if, in your program, an "access SomeType" always points to "SomeType"?

Well, I do understand an example of wrong behavior in UG, but I don't know 
whether my code is also an example of wrong behavior.

Please help!

-- 
Victor Porton - http://portonvictor.org

  reply	other threads:[~2017-07-04 18:30 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-04 17:49 Strict aliasing, is it OK? Victor Porton
2017-07-04 17:50 ` Victor Porton
2017-07-04 18:06 ` Victor Porton
2017-07-04 18:15 ` Niklas Holsti
2017-07-04 18:30   ` Victor Porton [this message]
2017-07-04 19:29     ` Niklas Holsti
2017-07-04 20:11       ` Victor Porton
2017-07-04 20:13         ` Victor Porton
2017-07-04 21:41 ` Simon Wright
2017-07-04 23:39   ` Victor Porton
2017-07-05  9:49     ` Simon Wright
2017-07-08 17:29     ` Robert Eachus
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox