This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug ada/42239] New: Pragma Inline_Always removes function calls with side effects


The following program (to be run through gnatchop) is supposed
to exit with status 17.  It exits with status 0 instead.  Inspecting
the generated machine code reveals that the call to Close is
not emitted:

0000000000000000 <_ada_u>:
   0:   55                      push   %rbp
   1:   48 89 e5                mov    %rsp,%rbp
   4:   c9                      leaveq
   5:   c3                      retq

(This is at -O0, -O2 is similar.  Sorry for the misnomer; the test suite
which caught this had an actual close call there; I've changed it to exit
here for easier testing.)

This bug has also been observed with GCC 4.3.4.

with Interfaces.C; use Interfaces.C;

package POSIX_Base is
   function C_Close (FD : int) return int;
   pragma Import (C, C_Close, "exit");
end POSIX_Base;

with Interfaces.C; use Interfaces.C;

package POSIX is
   procedure Close (FD : int);

private
   pragma Inline_Always (Close);
end POSIX;

with POSIX_Base; use POSIX_Base;

package body POSIX is
   procedure Close (FD : int) is
      Status : constant int := C_Close (FD);
      pragma Unreferenced (Status);
   begin
      null;
   end;
end POSIX;

with POSIX; use POSIX;

procedure U is
begin
   Close (17);
end;


-- 
           Summary: Pragma Inline_Always removes function calls with side
                    effects
           Product: gcc
           Version: 4.4.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: ada
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: fweimer at bfk dot de
 GCC build triplet: x86_64-pc-linux-gnu
  GCC host triplet: x86_64-pc-linux-gnu
GCC target triplet: x86_64-pc-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42239


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]