-- --
-- B o d y --
-- --
--- Copyright (C) 2001-2012, Free Software Foundation, Inc. --
+-- Copyright (C) 2001-2016, 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- --
with Lib; use Lib;
with Osint; use Osint;
with Opt; use Opt;
-with Validsw; use Validsw;
with Stylesw; use Stylesw;
+with Targparm; use Targparm;
with Ttypes; use Ttypes;
+with Validsw; use Validsw;
with Warnsw; use Warnsw;
with Ada.Unchecked_Deallocation;
+
with System.WCh_Con; use System.WCh_Con;
+with System.OS_Lib;
package body Switch.C is
First_Char : Positive;
-- Marks start of switch to be stored
+ First_Ptr : Positive;
+ -- Save position of first character after -gnatd (for checking that
+ -- debug flags that must come first are first, in particular -gnatd.b),
+
begin
Ptr := Switch_Chars'First;
or else Switch_Chars (Ptr + 3) /= '='
then
Osint.Fail ("missing path for --RTS");
- else
- -- Check that this is the first time --RTS is specified or if
- -- it is not the first time, the same path has been specified.
- if RTS_Specified = null then
- RTS_Specified := new String'(Switch_Chars (Ptr + 4 .. Max));
+ else
+ declare
+ Runtime_Dir : String_Access;
+ begin
+ if System.OS_Lib.Is_Absolute_Path
+ (Switch_Chars (Ptr + 4 .. Max))
+ then
+ Runtime_Dir :=
+ new String'(System.OS_Lib.Normalize_Pathname
+ (Switch_Chars (Ptr + 4 .. Max)));
+ else
+ Runtime_Dir :=
+ new String'(Switch_Chars (Ptr + 4 .. Max));
+ end if;
- elsif
- RTS_Specified.all /= Switch_Chars (Ptr + 4 .. Max)
- then
- Osint.Fail ("--RTS cannot be specified multiple times");
- end if;
+ -- Valid --RTS switch
- -- Valid --RTS switch
+ Opt.No_Stdinc := True;
+ Opt.RTS_Switch := True;
- Opt.No_Stdinc := True;
- Opt.RTS_Switch := True;
+ RTS_Src_Path_Name :=
+ Get_RTS_Search_Dir (Runtime_Dir.all, Include);
- RTS_Src_Path_Name :=
- Get_RTS_Search_Dir
- (Switch_Chars (Ptr + 4 .. Max), Include);
+ RTS_Lib_Path_Name :=
+ Get_RTS_Search_Dir (Runtime_Dir.all, Objects);
- RTS_Lib_Path_Name :=
- Get_RTS_Search_Dir
- (Switch_Chars (Ptr + 4 .. Max), Objects);
+ if RTS_Specified /= null then
+ if RTS_Src_Path_Name = null
+ or else RTS_Lib_Path_Name = null
+ or else
+ System.OS_Lib.Normalize_Pathname
+ (RTS_Specified.all) /=
+ System.OS_Lib.Normalize_Pathname
+ (RTS_Lib_Path_Name.all)
+ then
+ Osint.Fail
+ ("--RTS cannot be specified multiple times");
+ end if;
- if RTS_Src_Path_Name /= null
- and then RTS_Lib_Path_Name /= null
- then
- -- Store the -fRTS switch (Note: Store_Compilation_Switch
- -- changes -fRTS back into --RTS for the actual output).
+ elsif RTS_Src_Path_Name /= null
+ and then RTS_Lib_Path_Name /= null
+ then
+ -- Store the -fRTS switch (Note: Store_Compilation_Switch
+ -- changes -fRTS back into --RTS for the actual output).
- Store_Compilation_Switch (Switch_Chars);
+ Store_Compilation_Switch (Switch_Chars);
+ RTS_Specified := new String'(RTS_Lib_Path_Name.all);
- elsif RTS_Src_Path_Name = null
- and then RTS_Lib_Path_Name = null
- then
- Osint.Fail ("RTS path not valid: missing " &
- "adainclude and adalib directories");
+ elsif RTS_Src_Path_Name = null
+ and then RTS_Lib_Path_Name = null
+ then
+ Osint.Fail ("RTS path not valid: missing "
+ & "adainclude and adalib directories");
- elsif RTS_Src_Path_Name = null then
- Osint.Fail ("RTS path not valid: missing " &
- "adainclude directory");
+ elsif RTS_Src_Path_Name = null then
+ Osint.Fail ("RTS path not valid: missing "
+ & "adainclude directory");
- elsif RTS_Lib_Path_Name = null then
- Osint.Fail ("RTS path not valid: missing " &
- "adalib directory");
- end if;
+ elsif RTS_Lib_Path_Name = null then
+ Osint.Fail ("RTS path not valid: missing "
+ & "adalib directory");
+ end if;
+ end;
end if;
-- There are no other switches not starting with -gnat
case C is
+ -- -gnata (assertions enabled)
+
when 'a' =>
Ptr := Ptr + 1;
Assertions_Enabled := True;
- Debug_Pragmas_Enabled := True;
- -- Processing for A switch
+ -- -gnatA (disregard gnat.adc)
when 'A' =>
Ptr := Ptr + 1;
Config_File := False;
- -- Processing for b switch
+ -- -gnatb (brief messages to stderr)
when 'b' =>
Ptr := Ptr + 1;
Brief_Output := True;
- -- Processing for B switch
+ -- -gnatB (assume no invalid values)
when 'B' =>
Ptr := Ptr + 1;
Assume_No_Invalid_Values := True;
- -- Processing for c switch
+ -- -gnatc (check syntax and semantics only)
when 'c' =>
if not First_Switch then
Ptr := Ptr + 1;
Operating_Mode := Check_Semantics;
- -- Processing for C switch
+ -- -gnatC (Generate CodePeer information)
when 'C' =>
Ptr := Ptr + 1;
Warning_Mode := Suppress;
end if;
- -- Processing for d switch
+ -- -gnatd (compiler debug options)
when 'd' =>
Store_Switch := False;
Dot := False;
+ First_Ptr := Ptr + 1;
-- Note: for the debug switch, the remaining characters in this
-- switch field must all be debug flags, since all valid switch
C in 'a' .. 'z' or else
C in 'A' .. 'Z'
then
+ -- Case of dotted flag
+
if Dot then
Set_Dotted_Debug_Flag (C);
Store_Compilation_Switch ("-gnatd." & C);
+
+ -- Special check, -gnatd.b must come first
+
+ if C = 'b'
+ and then (Ptr /= First_Ptr + 1
+ or else not First_Switch)
+ then
+ Osint.Fail
+ ("-gnatd.b must be first if combined "
+ & "with other switches");
+ end if;
+
+ -- Not a dotted flag
+
else
Set_Debug_Flag (C);
Store_Compilation_Switch ("-gnatd" & C);
return;
- -- Processing for D switch
+ -- -gnatD (debug expanded code)
when 'D' =>
Ptr := Ptr + 1;
+ -- Not allowed if previous -gnatR given
+
+ -- The reason for this prohibition is that the rewriting of
+ -- Sloc values causes strange malfunctions in the tests of
+ -- whether units belong to the main source. This is really a
+ -- bug, but too hard to fix for a marginal capability ???
+
+ -- The proper fix is to completely redo -gnatD processing so
+ -- that the tree is not messed with, and instead a separate
+ -- table is built on the side for debug information generation.
+
+ if List_Representation_Info /= 0 then
+ Osint.Fail
+ ("-gnatD not permitted since -gnatR given previously");
+ end if;
+
-- Scan optional integer line limit value
if Nat_Present (Switch_Chars, Max, Ptr) then
-- -gnatea (initial delimiter of explicit switches)
+ -- This is an internal switch
+
-- All switches that come before -gnatea have been added by
-- the GCC driver and are not stored in the ALI file.
-- See also -gnatez below.
return;
- -- -gnateC switch (CodePeer SCIL generation)
+ -- -gnateC switch (generate CodePeer messages)
- -- Not enabled for now, keep it for later???
- -- use -gnatd.I only for now
-
- -- when 'C' =>
- -- Ptr := Ptr + 1;
- -- Generate_SCIL := True;
+ when 'C' =>
+ Ptr := Ptr + 1;
+ Generate_CodePeer_Messages := True;
-- -gnated switch (disable atomic synchronization)
when 'F' =>
Ptr := Ptr + 1;
- Check_Float_Overflow := True;
+ Check_Float_Overflow := not Machine_Overflows_On_Target;
+
+ -- -gnateg (generate C code)
+
+ when 'g' =>
+ -- Special check, -gnateg must occur after -gnatc
+
+ if Operating_Mode /= Check_Semantics then
+ Osint.Fail
+ ("gnateg requires previous occurrence of -gnatc");
+ end if;
+
+ Generate_C_Code := True;
+ Ptr := Ptr + 1;
-- -gnateG (save preprocessor output)
Ptr := Ptr + 1;
Scan_Pos (Switch_Chars, Max, Ptr, Multiple_Unit_Index, C);
+ -- -gnatel
+
+ when 'l' =>
+ Ptr := Ptr + 1;
+ Elab_Info_Messages := True;
+
+ -- -gnateL
+
+ when 'L' =>
+ Ptr := Ptr + 1;
+ Elab_Info_Messages := False;
+
-- -gnatem (mapping file)
when 'm' =>
-- -gnateO= (object path file)
+ -- This is an internal switch
+
when 'O' =>
Store_Switch := False;
Ptr := Ptr + 1;
if Ptr >= Max or else Switch_Chars (Ptr) /= '=' then
Bad_Switch ("-gnateO");
-
else
Object_Path_File_Name :=
new String'(Switch_Chars (Ptr + 1 .. Max));
when 'P' =>
Treat_Categorization_Errors_As_Warnings := True;
+ -- -gnates=file (specify extra file switches for gnat2why)
+
+ -- This is an internal switch
+
+ when 's' =>
+ if not First_Switch then
+ Osint.Fail
+ ("-gnates must not be combined with other switches");
+ end if;
+
+ -- Check for '='
+
+ Ptr := Ptr + 1;
+
+ if Ptr >= Max or else Switch_Chars (Ptr) /= '=' then
+ Bad_Switch ("-gnates");
+ else
+ SPARK_Switches_File_Name :=
+ new String'(Switch_Chars (Ptr + 1 .. Max));
+ end if;
+
+ return;
+
-- -gnateS (generate SCO information)
-- Include Source Coverage Obligation information in ALI
- -- files for the benefit of source coverage analysis tools
- -- (xcov).
+ -- files for use by source coverage analysis tools
+ -- (gnatcov) (equivalent to -fdump-scos, provided for
+ -- backwards compatibility).
when 'S' =>
Generate_SCO := True;
Generate_SCO_Instance_Table := True;
Ptr := Ptr + 1;
- -- -gnatet (generate target dependent information)
+ -- -gnatet (write target dependent information)
when 't' =>
- Generate_Target_Dependent_Info := True;
+ if not First_Switch then
+ Osint.Fail
+ ("-gnatet must not be combined with other switches");
+ end if;
+
+ -- Check for '='
+
+ Ptr := Ptr + 1;
+
+ if Ptr >= Max or else Switch_Chars (Ptr) /= '=' then
+ Bad_Switch ("-gnatet");
+ else
+ Target_Dependent_Info_Write_Name :=
+ new String'(Switch_Chars (Ptr + 1 .. Max));
+ end if;
+
+ return;
+
+ -- -gnateT (read target dependent information)
+
+ when 'T' =>
+ if not First_Switch then
+ Osint.Fail
+ ("-gnateT must not be combined with other switches");
+ end if;
+
+ -- Check for '='
+
+ Ptr := Ptr + 1;
+
+ if Ptr >= Max or else Switch_Chars (Ptr) /= '=' then
+ Bad_Switch ("-gnateT");
+ else
+ -- This parameter was stored by Set_Targ earlier
+
+ pragma Assert
+ (Target_Dependent_Info_Read_Name.all =
+ Switch_Chars (Ptr + 1 .. Max));
+ null;
+ end if;
+
+ return;
+
+ -- -gnateu (unrecognized y,V,w switches)
+
+ when 'u' =>
Ptr := Ptr + 1;
+ Ignore_Unrecognized_VWY_Switches := True;
-- -gnateV (validity checks on parameters)
-- -gnatez (final delimiter of explicit switches)
+ -- This is an internal switch
+
-- All switches that come after -gnatez have been added by
-- the GCC driver and are not stored in the ALI file. See
-- also -gnatea above.
Ptr := Ptr + 1;
All_Errors_Mode := True;
- -- Processing for F switch
+ -- -gnatF (overflow of predefined float types)
when 'F' =>
Ptr := Ptr + 1;
External_Name_Exp_Casing := Uppercase;
External_Name_Imp_Casing := Uppercase;
- -- Processing for g switch
+ -- -gnatg (GNAT implementation mode)
when 'g' =>
Ptr := Ptr + 1;
GNAT_Mode := True;
+ GNAT_Mode_Config := True;
Identifier_Character_Set := 'n';
System_Extend_Unit := Empty;
Warning_Mode := Treat_As_Error;
-
- -- Set Ada 2012 mode explicitly. We don't want to rely on the
- -- implicit setting here, since for example, we want
- -- Preelaborate_05 treated as Preelaborate
-
- Ada_Version := Ada_2012;
- Ada_Version_Explicit := Ada_Version;
+ Style_Check_Main := True;
+ Ada_Version := Ada_2012;
+ Ada_Version_Explicit := Ada_2012;
+ Ada_Version_Pragma := Empty;
-- Set default warnings and style checks for -gnatg
Set_GNAT_Mode_Warnings;
Set_GNAT_Style_Check_Options;
- -- Processing for G switch
+ -- -gnatG (output generated code)
when 'G' =>
Ptr := Ptr + 1;
Sprint_Line_Limit := Nat'Max (Sprint_Line_Limit, 40);
end if;
- -- Processing for h switch
+ -- -gnath (help information)
when 'h' =>
Ptr := Ptr + 1;
Usage_Requested := True;
- -- Processing for i switch
+ -- -gnati (character set)
when 'i' =>
if Ptr = Max then
Bad_Switch ("-gnati" & Switch_Chars (Ptr .. Max));
end if;
- -- Processing for I switch
+ -- -gnatI (ignore representation clauses)
when 'I' =>
Ptr := Ptr + 1;
Ignore_Rep_Clauses := True;
- -- Processing for j switch
+ -- -gnatj (messages in limited length lines)
when 'j' =>
Ptr := Ptr + 1;
Scan_Nat (Switch_Chars, Max, Ptr, Error_Msg_Line_Length, C);
- -- Processing for k switch
+ -- -gnatk (limit file name length)
when 'k' =>
Ptr := Ptr + 1;
Scan_Pos
(Switch_Chars, Max, Ptr, Maximum_File_Name_Length, C);
- -- Processing for l switch
+ -- -gnatl (output full source)
when 'l' =>
Ptr := Ptr + 1;
end if;
end if;
- -- Processing for L switch
+ -- -gnatL (corresponding source text)
when 'L' =>
Ptr := Ptr + 1;
Dump_Source_Text := True;
- -- Processing for m switch
+ -- -gnatm (max number or errors/warnings)
when 'm' =>
Ptr := Ptr + 1;
Scan_Nat (Switch_Chars, Max, Ptr, Maximum_Messages, C);
- -- Processing for n switch
+ -- -gnatn (enable pragma Inline)
when 'n' =>
Ptr := Ptr + 1;
end if;
end if;
- -- Processing for N switch
+ -- -gnatN (obsolescent)
when 'N' =>
Ptr := Ptr + 1;
Inline_Active := True;
Front_End_Inlining := True;
- -- Processing for o switch
+ -- -gnato (overflow checks)
when 'o' =>
Ptr := Ptr + 1;
- Suppress_Options.Suppress (Overflow_Check) := False;
- -- Case of no digits after the -gnato
+ -- Case of -gnato0 (overflow checking turned off)
+
+ if Ptr <= Max and then Switch_Chars (Ptr) = '0' then
+ Ptr := Ptr + 1;
+ Suppress_Options.Suppress (Overflow_Check) := True;
+
+ -- We set strict mode in case overflow checking is turned
+ -- on locally (also records that we had a -gnato switch).
- if Ptr > Max or else Switch_Chars (Ptr) not in '1' .. '3' then
Suppress_Options.Overflow_Mode_General := Strict;
Suppress_Options.Overflow_Mode_Assertions := Strict;
- -- At least one digit after the -gnato
+ -- All cases other than -gnato0 (overflow checking turned on)
else
- -- Handle first digit after -gnato
-
- Suppress_Options.Overflow_Mode_General :=
- Get_Overflow_Mode (Switch_Chars (Ptr));
- Ptr := Ptr + 1;
+ Suppress_Options.Suppress (Overflow_Check) := False;
- -- Only one digit after -gnato, set assertions mode to
- -- be the same as general mode.
+ -- Case of no digits after the -gnato
if Ptr > Max
or else Switch_Chars (Ptr) not in '1' .. '3'
then
- Suppress_Options.Overflow_Mode_Assertions :=
- Suppress_Options.Overflow_Mode_General;
+ Suppress_Options.Overflow_Mode_General := Strict;
+ Suppress_Options.Overflow_Mode_Assertions := Strict;
- -- Process second digit after -gnato
+ -- At least one digit after the -gnato
else
- Suppress_Options.Overflow_Mode_Assertions :=
+ -- Handle first digit after -gnato
+
+ Suppress_Options.Overflow_Mode_General :=
Get_Overflow_Mode (Switch_Chars (Ptr));
Ptr := Ptr + 1;
+
+ -- Only one digit after -gnato, set assertions mode to be
+ -- the same as general mode.
+
+ if Ptr > Max
+ or else Switch_Chars (Ptr) not in '1' .. '3'
+ then
+ Suppress_Options.Overflow_Mode_Assertions :=
+ Suppress_Options.Overflow_Mode_General;
+
+ -- Process second digit after -gnato
+
+ else
+ Suppress_Options.Overflow_Mode_Assertions :=
+ Get_Overflow_Mode (Switch_Chars (Ptr));
+ Ptr := Ptr + 1;
+ end if;
end if;
end if;
- -- Processing for O switch
+ -- -gnatO (specify name of the object file)
+
+ -- This is an internal switch
when 'O' =>
Store_Switch := False;
Ptr := Ptr + 1;
Output_File_Name_Present := True;
- -- Processing for p switch
+ -- -gnatp (suppress all checks)
when 'p' =>
Ptr := Ptr + 1;
Validity_Checks_On := False;
Opt.Suppress_Checks := True;
+
+ -- Set overflow mode checking to strict in case it gets
+ -- turned on locally (also signals that overflow checking
+ -- has been specifically turned off).
+
+ Suppress_Options.Overflow_Mode_General := Strict;
+ Suppress_Options.Overflow_Mode_Assertions := Strict;
end if;
- -- Processing for P switch
+ -- -gnatP (periodic poll)
when 'P' =>
Ptr := Ptr + 1;
Polling_Required := True;
- -- Processing for q switch
+ -- -gnatq (don't quit)
when 'q' =>
Ptr := Ptr + 1;
Try_Semantics := True;
- -- Processing for Q switch
+ -- -gnatQ (always write ALI file)
when 'Q' =>
Ptr := Ptr + 1;
Force_ALI_Tree_File := True;
Try_Semantics := True;
- -- Processing for r switch
+ -- -gnatr (restrictions as warnings)
when 'r' =>
Ptr := Ptr + 1;
Treat_Restrictions_As_Warnings := True;
- -- Processing for R switch
+ -- -gnatR (list rep. info)
when 'R' =>
+
+ -- Not allowed if previous -gnatD given. See more extensive
+ -- comments in the 'D' section for the inverse test.
+
+ if Debug_Generated_Code then
+ Osint.Fail
+ ("-gnatR not permitted since -gnatD given previously");
+ end if;
+
+ -- Set to annotate rep info, and set default -gnatR mode
+
Back_Annotate_Rep_Info := True;
List_Representation_Info := 1;
+ -- Scan possible parameter
+
Ptr := Ptr + 1;
while Ptr <= Max loop
C := Switch_Chars (Ptr);
Ptr := Ptr + 1;
end loop;
- -- Processing for s switch
+ -- -gnats (syntax check only)
when 's' =>
if not First_Switch then
Ptr := Ptr + 1;
Operating_Mode := Check_Syntax;
- -- Processing for S switch
+ -- -gnatS (print package Standard)
when 'S' =>
Print_Standard := True;
Ptr := Ptr + 1;
- -- Processing for t switch
+ -- -gnatt (output tree)
when 't' =>
Ptr := Ptr + 1;
Tree_Output := True;
Back_Annotate_Rep_Info := True;
- -- Processing for T switch
+ -- -gnatT (change start of internal table sizes)
when 'T' =>
Ptr := Ptr + 1;
Scan_Pos (Switch_Chars, Max, Ptr, Table_Factor, C);
- -- Processing for u switch
+ -- -gnatu (list units for compilation)
when 'u' =>
Ptr := Ptr + 1;
List_Units := True;
- -- Processing for U switch
+ -- -gnatU (unique tags)
when 'U' =>
Ptr := Ptr + 1;
Unique_Error_Tag := True;
- -- Processing for v switch
+ -- -gnatv (verbose mode)
when 'v' =>
Ptr := Ptr + 1;
Verbose_Mode := True;
- -- Processing for V switch
+ -- -gnatV (validity checks)
when 'V' =>
Store_Switch := False;
Ptr := Max + 1;
- -- Processing for w switch
+ -- -gnatw (warning modes)
when 'w' =>
Store_Switch := False;
return;
- -- Processing for W switch
+ -- -gnatW (wide character encoding method)
when 'W' =>
Ptr := Ptr + 1;
Ptr := Ptr + 1;
- -- Processing for x switch
+ -- -gnatx (suppress cross-ref information)
when 'x' =>
Ptr := Ptr + 1;
Xref_Active := False;
- -- Processing for X switch
+ -- -gnatX (language extensions)
when 'X' =>
Ptr := Ptr + 1;
Extensions_Allowed := True;
Ada_Version := Ada_Version_Type'Last;
Ada_Version_Explicit := Ada_Version_Type'Last;
+ Ada_Version_Pragma := Empty;
- -- Processing for y switch
+ -- -gnaty (style checks)
when 'y' =>
Ptr := Ptr + 1;
+ Style_Check_Main := True;
if Ptr > Max then
Set_Default_Style_Check_Options;
end;
end if;
- -- Processing for z switch
+ -- -gnatz (stub generation)
when 'z' =>
Osint.Fail ("only one -gnatz* switch allowed");
end if;
- -- Processing for Z switch
+ -- -gnatZ (obsolescent)
when 'Z' =>
Ptr := Ptr + 1;
-- version switch is added, Switch.M.Normalize_Compiler_Switches
-- must be updated.
- -- Processing for 83 switch
+ -- -gnat83
when '8' =>
if Ptr = Max then
Ptr := Ptr + 1;
- if Switch_Chars (Ptr) /= '3' then
+ if Switch_Chars (Ptr) /= '3' or else Latest_Ada_Only then
Bad_Switch ("-gnat8" & Switch_Chars (Ptr .. Max));
else
Ptr := Ptr + 1;
- Ada_Version := Ada_83;
- Ada_Version_Explicit := Ada_Version;
+ Ada_Version := Ada_83;
+ Ada_Version_Explicit := Ada_83;
+ Ada_Version_Pragma := Empty;
end if;
- -- Processing for 95 switch
+ -- -gnat95
when '9' =>
if Ptr = Max then
Ptr := Ptr + 1;
- if Switch_Chars (Ptr) /= '5' then
+ if Switch_Chars (Ptr) /= '5' or else Latest_Ada_Only then
Bad_Switch ("-gnat9" & Switch_Chars (Ptr .. Max));
else
Ptr := Ptr + 1;
- Ada_Version := Ada_95;
- Ada_Version_Explicit := Ada_Version;
+ Ada_Version := Ada_95;
+ Ada_Version_Explicit := Ada_95;
+ Ada_Version_Pragma := Empty;
end if;
- -- Processing for 05 switch
+ -- -gnat05
when '0' =>
if Ptr = Max then
Ptr := Ptr + 1;
- if Switch_Chars (Ptr) /= '5' then
+ if Switch_Chars (Ptr) /= '5' or else Latest_Ada_Only then
Bad_Switch ("-gnat0" & Switch_Chars (Ptr .. Max));
else
Ptr := Ptr + 1;
- Ada_Version := Ada_2005;
- Ada_Version_Explicit := Ada_Version;
+ Ada_Version := Ada_2005;
+ Ada_Version_Explicit := Ada_2005;
+ Ada_Version_Pragma := Empty;
end if;
- -- Processing for 12 switch
+ -- -gnat12
when '1' =>
if Ptr = Max then
Bad_Switch ("-gnat1" & Switch_Chars (Ptr .. Max));
else
Ptr := Ptr + 1;
- Ada_Version := Ada_2012;
- Ada_Version_Explicit := Ada_Version;
+ Ada_Version := Ada_2012;
+ Ada_Version_Explicit := Ada_2012;
+ Ada_Version_Pragma := Empty;
end if;
- -- Processing for 2005 and 2012 switches
+ -- -gnat2005 and -gnat2012
when '2' =>
if Ptr > Max - 3 then
Bad_Switch ("-gnat" & Switch_Chars (Ptr .. Max));
- elsif Switch_Chars (Ptr .. Ptr + 3) = "2005" then
+ elsif Switch_Chars (Ptr .. Ptr + 3) = "2005"
+ and then not Latest_Ada_Only
+ then
Ada_Version := Ada_2005;
elsif Switch_Chars (Ptr .. Ptr + 3) = "2012" then
end if;
Ada_Version_Explicit := Ada_Version;
+ Ada_Version_Pragma := Empty;
Ptr := Ptr + 4;
-- Switch cancellation, currently only -gnat-p is allowed.