]> gcc.gnu.org Git - gcc.git/blobdiff - gcc/ada/sem_ch2.adb
[Ada] Minor reformattings
[gcc.git] / gcc / ada / sem_ch2.adb
index 7015fbd2096eabcc0c50e15d54814d50f9e1f060..3ba68c4df7063412bbc17f3ac2ec81358545f8c1 100644 (file)
@@ -6,32 +6,36 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2021, 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- --
--- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
 -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
 -- for  more details.  You should have  received  a copy of the GNU General --
--- Public License  distributed with GNAT;  see file COPYING.  If not, write --
--- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
--- MA 02111-1307, USA.                                                      --
+-- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
+-- http://www.gnu.org/licenses for a complete copy of the license.          --
 --                                                                          --
 -- GNAT was originally developed  by the GNAT team at  New York University. --
 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
 --                                                                          --
 ------------------------------------------------------------------------------
 
-with Atree;    use Atree;
-with Errout;   use Errout;
-with Opt;      use Opt;
-with Restrict; use Restrict;
-with Rident;   use Rident;
-with Sem_Ch8;  use Sem_Ch8;
-with Sinfo;    use Sinfo;
-with Stand;    use Stand;
+with Atree;          use Atree;
+with Einfo;          use Einfo;
+with Einfo.Utils;    use Einfo.Utils;
+with Namet;          use Namet;
+with Opt;            use Opt;
+with Restrict;       use Restrict;
+with Rident;         use Rident;
+with Sem_Ch8;        use Sem_Ch8;
+with Sem_Dim;        use Sem_Dim;
+with Sinfo;          use Sinfo;
+with Sinfo.Nodes;    use Sinfo.Nodes;
+with Stand;          use Stand;
+with Uintp;          use Uintp;
 
 package body Sem_Ch2 is
 
@@ -51,7 +55,7 @@ package body Sem_Ch2 is
       Set_Is_Static_Expression (N);
 
       if Comes_From_Source (N)
-        and then not In_Character_Range (Char_Literal_Value (N))
+        and then not In_Character_Range (UI_To_CC (Char_Literal_Value (N)))
       then
          Check_Restriction (No_Wide_Characters, N);
       end if;
@@ -67,13 +71,13 @@ package body Sem_Ch2 is
       --  this is the result of some kind of previous error generating a
       --  junk identifier.
 
-      if Chars (N) in Error_Name_Or_No_Name
-        and then Total_Errors_Detected /= 0
-      then
+      if not Is_Valid_Name (Chars (N)) and then Total_Errors_Detected /= 0 then
          return;
       else
          Find_Direct_Name (N);
       end if;
+
+      Analyze_Dimension (N);
    end Analyze_Identifier;
 
    -----------------------------
@@ -82,7 +86,22 @@ package body Sem_Ch2 is
 
    procedure Analyze_Integer_Literal (N : Node_Id) is
    begin
-      Set_Etype (N, Universal_Integer);
+      --  As a lexical element, an integer literal has type Universal_Integer,
+      --  i.e., is compatible with any integer type. This is semantically
+      --  consistent and simplifies type checking and subsequent constant
+      --  folding when needed. An exception is caused by 64-bit modular types,
+      --  whose upper bound is not representable in a nonstatic context that
+      --  will use 64-bit integers at run time. For such cases, we need to
+      --  preserve the information that the analyzed literal has that modular
+      --  type. For simplicity, we preserve the information for all integer
+      --  literals that result from a modular operation. This happens after
+      --  prior analysis (or construction) of the literal, and after type
+      --  checking and resolution.
+
+      if No (Etype (N)) or else not Is_Modular_Integer_Type (Etype (N)) then
+         Set_Etype (N, Universal_Integer);
+      end if;
+
       Set_Is_Static_Expression (N);
    end Analyze_Integer_Literal;
 
This page took 0.037824 seconds and 5 git commands to generate.