diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2020-03-03 12:44:18 +0100 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2020-06-09 04:09:06 -0400 |
commit | fd66407104b2133f0e55deb84db787c692a21948 (patch) | |
tree | 628e3735093268193368896af1156e6831f4cb18 /gcc/ada/snames.ads-tmpl | |
parent | 2d6f6e08e69209d3df5b49b738c08ce3e921bf44 (diff) | |
download | gcc-fd66407104b2133f0e55deb84db787c692a21948.zip gcc-fd66407104b2133f0e55deb84db787c692a21948.tar.gz gcc-fd66407104b2133f0e55deb84db787c692a21948.tar.bz2 |
[Ada] Implement AI12-0028: Import of variadic C functions
2020-06-09 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* exp_ch6.adb (Freeze_Subprogram): Deal with convention C_Family.
* freeze.adb (Freeze_Profile): Likewise. Add missing guard.
* sem_mech.adb (Set_Mechanisms): Likewise.
* lib-xref.adb (Output_Import_Export_Info): Ditto for C_Variadic.
* repinfo.adb (List_Subprogram_Info): Likewise.
* sem_prag.adb (Set_Convention_From_Pragma): Move main checks for
Stdcall to...
(Process_Convention): ...here. Add checks for C_Variadic.
* snames.ads-tmpl: Add Name_C_Variadic_0 .. Name_C_Variadic_16.
Use consistent format for subtype declarations.
(Convention_Id): Add Convention_C_Variadic_0 .. C_Variadic_16
and move Convention_CPP up.
(Convention_C_Family): New subtype of Convention_Id.
(Convention_C_Variadic): Likewise.
(Foreign_Convention): Use explicit upper bound.
Add pragma Inline for Is_Configuration_Pragma_Name,
Is_Function_Attribute_Name, Is_Internal_Attribute_Name
and Is_Procedure_Attribute_Name.
* snames.adb-tmpl (Get_Convention_Id): Deal with Name_Variadic_n.
(Get_Convention_Name): Deal with Convention_Variadic_n.
* types.h (Convention_Id): New typedef.
* xsnamest.adb (Name2): New variable.
(Is_Conv): New pattern.
(Get_Subt1): Likewise.
(Get_Subt2): Likewise.
Output subtypes of Convention_Id into the C header file.
Diffstat (limited to 'gcc/ada/snames.ads-tmpl')
-rw-r--r-- | gcc/ada/snames.ads-tmpl | 101 |
1 files changed, 74 insertions, 27 deletions
diff --git a/gcc/ada/snames.ads-tmpl b/gcc/ada/snames.ads-tmpl index b88f861..0f39a97 100644 --- a/gcc/ada/snames.ads-tmpl +++ b/gcc/ada/snames.ads-tmpl @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2017, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2020, 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- -- @@ -705,6 +705,23 @@ package Snames is Name_Ada_Pass_By_Copy : constant Name_Id := N + $; Name_Ada_Pass_By_Reference : constant Name_Id := N + $; Name_Assembler : constant Name_Id := N + $; + Name_C_Variadic_0 : constant Name_Id := N + $; + Name_C_Variadic_1 : constant Name_Id := N + $; + Name_C_Variadic_2 : constant Name_Id := N + $; + Name_C_Variadic_3 : constant Name_Id := N + $; + Name_C_Variadic_4 : constant Name_Id := N + $; + Name_C_Variadic_5 : constant Name_Id := N + $; + Name_C_Variadic_6 : constant Name_Id := N + $; + Name_C_Variadic_7 : constant Name_Id := N + $; + Name_C_Variadic_8 : constant Name_Id := N + $; + Name_C_Variadic_9 : constant Name_Id := N + $; + Name_C_Variadic_10 : constant Name_Id := N + $; + Name_C_Variadic_11 : constant Name_Id := N + $; + Name_C_Variadic_12 : constant Name_Id := N + $; + Name_C_Variadic_13 : constant Name_Id := N + $; + Name_C_Variadic_14 : constant Name_Id := N + $; + Name_C_Variadic_15 : constant Name_Id := N + $; + Name_C_Variadic_16 : constant Name_Id := N + $; Name_COBOL : constant Name_Id := N + $; Name_CPP : constant Name_Id := N + $; Name_Fortran : constant Name_Id := N + $; @@ -713,6 +730,9 @@ package Snames is Name_Stubbed : constant Name_Id := N + $; Last_Convention_Name : constant Name_Id := N + $; + subtype Name_C_Variadic is Name_Id + range Name_C_Variadic_0 .. Name_C_Variadic_16; + -- The following names are preset as synonyms for Assembler Name_Asm : constant Name_Id := N + $; @@ -1166,14 +1186,14 @@ package Snames is Name_Unsigned_32 : constant Name_Id := N + $; -- GNAT Name_Unsigned_64 : constant Name_Id := N + $; -- GNAT - subtype Scalar_Id is Name_Id range - Name_Short_Float .. Name_Unsigned_64; + subtype Scalar_Id is Name_Id + range Name_Short_Float .. Name_Unsigned_64; - subtype Float_Scalar_Id is Name_Id range - Name_Short_Float .. Name_Long_Long_Float; + subtype Float_Scalar_Id is Name_Id + range Name_Short_Float .. Name_Long_Long_Float; - subtype Integer_Scalar_Id is Name_Id range - Name_Signed_8 .. Name_Unsigned_64; + subtype Integer_Scalar_Id is Name_Id + range Name_Signed_8 .. Name_Unsigned_64; -- Names of recognized checks for pragma Suppress @@ -1314,8 +1334,8 @@ package Snames is Name_Tagged : constant Name_Id := N + $; Last_95_Reserved_Word : constant Name_Id := N + $; - subtype Ada_95_Reserved_Words is - Name_Id range First_95_Reserved_Word .. Last_95_Reserved_Word; + subtype Ada_95_Reserved_Words is Name_Id + range First_95_Reserved_Word .. Last_95_Reserved_Word; -- Miscellaneous names used in semantic checking @@ -1526,8 +1546,8 @@ package Snames is Name_Synchronized : constant Name_Id := N + $; Last_2005_Reserved_Word : constant Name_Id := N + $; - subtype Ada_2005_Reserved_Words is - Name_Id range First_2005_Reserved_Word .. Last_2005_Reserved_Word; + subtype Ada_2005_Reserved_Words is Name_Id + range First_2005_Reserved_Word .. Last_2005_Reserved_Word; -- Ada 2012 reserved words @@ -1535,8 +1555,8 @@ package Snames is Name_Some : constant Name_Id := N + $; Last_2012_Reserved_Word : constant Name_Id := N + $; - subtype Ada_2012_Reserved_Words is - Name_Id range First_2012_Reserved_Word .. Last_2012_Reserved_Word; + subtype Ada_2012_Reserved_Words is Name_Id + range First_2012_Reserved_Word .. Last_2012_Reserved_Word; -- Mark last defined name for consistency check in Snames body @@ -1546,11 +1566,11 @@ package Snames is -- Subtypes Defining Name Categories -- --------------------------------------- - subtype Any_Operator_Name is Name_Id range - First_Operator_Name .. Last_Operator_Name; + subtype Any_Operator_Name is Name_Id + range First_Operator_Name .. Last_Operator_Name; - subtype Configuration_Pragma_Names is Name_Id range - First_Pragma_Name .. Last_Configuration_Pragma_Name; + subtype Configuration_Pragma_Names is Name_Id + range First_Pragma_Name .. Last_Configuration_Pragma_Name; ------------------------------ -- Attribute ID Definitions -- @@ -1755,8 +1775,8 @@ package Snames is Attribute_Dispatching_Domain, Attribute_Interrupt_Priority); - subtype Internal_Attribute_Id is Attribute_Id range - Attribute_CPU .. Attribute_Interrupt_Priority; + subtype Internal_Attribute_Id is Attribute_Id + range Attribute_CPU .. Attribute_Interrupt_Priority; type Attribute_Class_Array is array (Attribute_Id) of Boolean; -- Type used to build attribute classification flag arrays @@ -1784,12 +1804,29 @@ package Snames is -- The remaining conventions are foreign language conventions - Convention_Assembler, -- also Asm, Assembly - Convention_C, -- also Default, External - Convention_COBOL, + Convention_Assembler, -- also Asm, Assembly + Convention_C, -- also Default, External + Convention_C_Variadic_0, + Convention_C_Variadic_1, + Convention_C_Variadic_2, + Convention_C_Variadic_3, + Convention_C_Variadic_4, + Convention_C_Variadic_5, + Convention_C_Variadic_6, + Convention_C_Variadic_7, + Convention_C_Variadic_8, + Convention_C_Variadic_9, + Convention_C_Variadic_10, + Convention_C_Variadic_11, + Convention_C_Variadic_12, + Convention_C_Variadic_13, + Convention_C_Variadic_14, + Convention_C_Variadic_15, + Convention_C_Variadic_16, Convention_CPP, + Convention_COBOL, Convention_Fortran, - Convention_Stdcall); -- also DLL, Win32 + Convention_Stdcall); -- also DLL, Win32 -- Note: Convention C_Pass_By_Copy is allowed only for record types -- (where it is treated like C except that the appropriate flag is set @@ -1799,8 +1836,14 @@ package Snames is for Convention_Id'Size use 8; -- Plenty of space for expansion - subtype Foreign_Convention is - Convention_Id range Convention_Assembler .. Convention_Id'Last; + subtype Convention_C_Family is Convention_Id + range Convention_C .. Convention_CPP; + + subtype Convention_C_Variadic is Convention_Id + range Convention_C_Variadic_0 .. Convention_C_Variadic_16; + + subtype Foreign_Convention is Convention_Id + range Convention_Assembler .. Convention_Stdcall; ----------------------------------- -- Locking Policy ID Definitions -- @@ -2226,13 +2269,17 @@ package Snames is private pragma Inline (Is_Attribute_Name); + pragma Inline (Is_Configuration_Pragma_Name); pragma Inline (Is_Entity_Attribute_Name); - pragma Inline (Is_Type_Attribute_Name); + pragma Inline (Is_Function_Attribute_Name); + pragma Inline (Is_Internal_Attribute_Name); pragma Inline (Is_Locking_Policy_Name); pragma Inline (Is_Partition_Elaboration_Policy_Name); pragma Inline (Is_Operator_Symbol_Name); - pragma Inline (Is_Queuing_Policy_Name); pragma Inline (Is_Pragma_Name); + pragma Inline (Is_Procedure_Attribute_Name); + pragma Inline (Is_Queuing_Policy_Name); pragma Inline (Is_Task_Dispatching_Policy_Name); + pragma Inline (Is_Type_Attribute_Name); end Snames; |