https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92362
Bug ID: 92362 Summary: Compiler generates 2 function calls in a 'with Address' aspect specification that uses a function Product: gcc Version: 9.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: ada Assignee: unassigned at gcc dot gnu.org Reporter: cthowie at netzero dot net Target Milestone: --- PLATFORM USED: GCC 9.2 toolchain on Windows 10 Intel x64 using MSYS2 (mingw64). Note the GNAT FSF 8.2 compiler does NOT have the bug. ISSUE: Multiple calls to a function that returns an address for use "with Address". Note that if you use the alternative (non-aspect) attribute definition clause, the bug doesn't appear in 9.2, so a statement like: bar : Integer; for bar'Address use Get_Address; is handled properly but: bar : Integer with Address => Get_Address; is compiled defectively. EXAMPLE PROGRAM DEMONSTRATING THE BUG: with Ada.Text_IO; use Ada.Text_IO; with System; procedure Main is foo : Integer := 0; function Get_Address return System.Address is begin Put_Line ("Get_Address called"); return foo'Address; end Get_Address; bar : Integer with Address => Get_Address; -- Get_Address called TWICE = BUG! begin bar := 100; Put_Line ("foo = " & foo'Img); end Main; BUILD INSTRUCTIONS: Save the above example program to e.g., "main.adb" then run: gnatmake main.adb then run the program "main.exe" and you'll see GCC GNAT FSF 9.2 output is incorrect: Get_Address called Get_Address called foo = 100 whereas earlier version GNAT FSF 8.2 produces correct output: Get_Address called foo = 100 and so does current GNAT FSF 9.2 but only if you use the more verbose attribute definition clause shown above.