===================================================================
@@ -8204,12 +8204,6 @@
Applies := True;
return;
- -- Ignore if all inlining is suppressed
-
- elsif Suppress_All_Inlining then
- Applies := True;
- return;
-
-- If inlining is not possible, for now do not treat as an error
elsif Status /= Suppressed
===================================================================
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
+-- Copyright (C) 1992-2015, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -609,13 +609,9 @@
Back_End_Inlining :=
- -- No back end inlining if inlining is suppressed
-
- not Suppress_All_Inlining
-
-- No back end inlining available for VM targets
- and then VM_Target = No_VM
+ VM_Target = No_VM
-- No back end inlining available on AAMP
===================================================================
@@ -3739,8 +3739,11 @@
-- Legacy implementation (relying on frontend inlining)
if not Back_End_Inlining then
- if Has_Pragma_Inline_Always (Spec_Id)
- or else (Has_Pragma_Inline (Spec_Id) and Front_End_Inlining)
+ if (Has_Pragma_Inline_Always (Spec_Id)
+ and then not Opt.Disable_FE_Inline_Always)
+ or else
+ (Has_Pragma_Inline (Spec_Id) and then Front_End_Inlining
+ and then not Opt.Disable_FE_Inline)
then
Build_Body_To_Inline (N, Spec_Id);
end if;
===================================================================
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
+-- Copyright (C) 1992-2015, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -23,6 +23,8 @@
-- --
------------------------------------------------------------------------------
+-- This is the version of the Back_End package for GCC back ends
+
with Atree; use Atree;
with Debug; use Debug;
with Elists; use Elists;
@@ -251,11 +253,12 @@
else
Store_Compilation_Switch (Switch_Chars);
- -- Back end switch -fno-inline also sets the Suppress_All_Inlining
- -- front end flag to entirely inhibit all inlining.
+ -- For gcc back ends, -fno-inline disables Inline pragmas only,
+ -- not Inline_Always to remain consistent with the always_inline
+ -- attribute behavior.
if Switch_Chars (First .. Last) = "fno-inline" then
- Opt.Suppress_All_Inlining := True;
+ Opt.Disable_FE_Inline := True;
-- Back end switch -fpreserve-control-flow also sets the front end
-- flag that inhibits improper control flow transformations.
===================================================================
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
+-- Copyright (C) 1992-2015, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -24,6 +24,7 @@
------------------------------------------------------------------------------
-- Call the back end with all the information needed
+
-- Note: there are multiple bodies/variants of this package, so do not
-- modify this spec without coordination.
@@ -65,7 +66,8 @@
-- This routine is expected to set the following to True if necessary (the
-- default for all of these in Opt is False).
--
- -- Opt.Suppress_All_Inlining
+ -- Opt.Disable_FE_Inline
+ -- Opt.Disable_FE_Inline_Always
-- Opt.Suppress_Control_Float_Optimizations
-- Opt.Generate_SCO
-- Opt.Generate_SCO_Instance_Table
===================================================================
@@ -1370,10 +1370,14 @@
-- with'ed indirectly. It is set True by use of either the -gnatg or
-- -gnaty switches, but not by use of the Style_Checks pragma.
- Suppress_All_Inlining : Boolean := False;
+ Disable_FE_Inline : Boolean := False;
+ Disable_FE_Inline_Always : Boolean := False;
-- GNAT
- -- Set by -fno-inline. Suppresses all inlining, both front end and back end
- -- regardless of any other switches that are set.
+ -- Request to disable front end inlining from pragma Inline or pragma
+ -- Inline_Always out of the presence of the -fno-inline back end flag
+ -- on the command line, regardless of any other switches that are set.
+ -- It remains the back end's reponsibility to honor -fno-inline at the
+ -- back end level.
Suppress_Control_Flow_Optimizations : Boolean := False;
-- GNAT
===================================================================
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
+-- Copyright (C) 2001-2015, AdaCore --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -178,12 +178,13 @@
return;
-- Special check, the back end switch -fno-inline also sets the
- -- front end flag to entirely inhibit all inlining. So we store it
- -- and set the appropriate flag.
+ -- front end flags to entirely inhibit all inlining. So we store it
+ -- and set the appropriate flags.
elsif Switch_Chars (First .. Last) = "fno-inline" then
Lib.Store_Compilation_Switch (Switch_Chars);
- Opt.Suppress_All_Inlining := True;
+ Opt.Disable_FE_Inline := True;
+ Opt.Disable_FE_Inline_Always := True;
return;
-- Similar processing for -fpreserve-control-flow