diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2014-08-04 12:57:32 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2014-08-04 12:57:32 +0200 |
commit | 3ccedacc889a1eac92eed26a0006b9cc3eeda19b (patch) | |
tree | d6f8f350a66150fb3508f68a68d6944ea0d841ff /gcc/ada | |
parent | f3124d8f6431bcfce76eca31a198ba89ce0d15fe (diff) | |
download | gcc-3ccedacc889a1eac92eed26a0006b9cc3eeda19b.zip gcc-3ccedacc889a1eac92eed26a0006b9cc3eeda19b.tar.gz gcc-3ccedacc889a1eac92eed26a0006b9cc3eeda19b.tar.bz2 |
[multiple changes]
2014-08-04 Robert Dewar <dewar@adacore.com>
* sem_ch6.adb: Minor reformatting.
2014-08-04 Ed Schonberg <schonberg@adacore.com>
* sem_prag.adb (Analyze_Pragma, case Assert and related pragmas):
Before normalizing these pragmas into a pragma Check, preanalyze
the optional Message argument, (which is subsequently copied)
so that it has the proper semantic information for ASIS use.
* sem_case.adb: Initialize flag earlier.
* osint.adb, osint.ads (Find_File): Add parameter Full_Name, used when
the full source path of a configuration file is requested.
(Read_Source_File): Use Full_Name parameter..
From-SVN: r213571
Diffstat (limited to 'gcc/ada')
-rw-r--r-- | gcc/ada/ChangeLog | 15 | ||||
-rw-r--r-- | gcc/ada/osint.adb | 41 | ||||
-rw-r--r-- | gcc/ada/osint.ads | 8 | ||||
-rw-r--r-- | gcc/ada/sem_case.adb | 4 | ||||
-rw-r--r-- | gcc/ada/sem_ch6.adb | 109 | ||||
-rw-r--r-- | gcc/ada/sem_prag.adb | 11 |
6 files changed, 110 insertions, 78 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 8bed012..4737fc7 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,18 @@ +2014-08-04 Robert Dewar <dewar@adacore.com> + + * sem_ch6.adb: Minor reformatting. + +2014-08-04 Ed Schonberg <schonberg@adacore.com> + + * sem_prag.adb (Analyze_Pragma, case Assert and related pragmas): + Before normalizing these pragmas into a pragma Check, preanalyze + the optional Message argument, (which is subsequently copied) + so that it has the proper semantic information for ASIS use. + * sem_case.adb: Initialize flag earlier. + * osint.adb, osint.ads (Find_File): Add parameter Full_Name, used when + the full source path of a configuration file is requested. + (Read_Source_File): Use Full_Name parameter.. + 2014-08-04 Hristian Kirtchev <kirtchev@adacore.com> * opt.ads Alphabetize various global flags. New flag diff --git a/gcc/ada/osint.adb b/gcc/ada/osint.adb index 93e2550..3fd796c 100644 --- a/gcc/ada/osint.adb +++ b/gcc/ada/osint.adb @@ -119,10 +119,11 @@ package body Osint is -- failure procedure Find_File - (N : File_Name_Type; - T : File_Type; - Found : out File_Name_Type; - Attr : access File_Attributes); + (N : File_Name_Type; + T : File_Type; + Found : out File_Name_Type; + Attr : access File_Attributes; + Full_Name : Boolean := False); -- A version of Find_File that also returns a cache of the file attributes -- for later reuse @@ -1153,13 +1154,14 @@ package body Osint is --------------- function Find_File - (N : File_Name_Type; - T : File_Type) return File_Name_Type + (N : File_Name_Type; + T : File_Type; + Full_Name : Boolean := False) return File_Name_Type is Attr : aliased File_Attributes; Found : File_Name_Type; begin - Find_File (N, T, Found, Attr'Access); + Find_File (N, T, Found, Attr'Access, Full_Name); return Found; end Find_File; @@ -1168,10 +1170,11 @@ package body Osint is --------------- procedure Find_File - (N : File_Name_Type; - T : File_Type; - Found : out File_Name_Type; - Attr : access File_Attributes) is + (N : File_Name_Type; + T : File_Type; + Found : out File_Name_Type; + Attr : access File_Attributes; + Full_Name : Boolean := False) is begin Get_Name_String (N); @@ -1193,6 +1196,20 @@ package body Osint is then Found := N; Attr.all := Unknown_Attributes; + + if T = Config and then Full_Name then + declare + Full_Path : constant String := + Normalize_Pathname (Get_Name_String (N)); + Full_Size : constant Natural := Full_Path'Length; + + begin + Name_Buffer (1 .. Full_Size) := Full_Path; + Name_Len := Full_Size; + Found := Name_Find; + end; + end if; + return; -- If we are trying to find the current main file just look in the @@ -2591,7 +2608,7 @@ package body Osint is -- For the call to Close begin - Current_Full_Source_Name := Find_File (N, T); + Current_Full_Source_Name := Find_File (N, T, Full_Name => True); Current_Full_Source_Stamp := File_Stamp (Current_Full_Source_Name); if Current_Full_Source_Name = No_File then diff --git a/gcc/ada/osint.ads b/gcc/ada/osint.ads index e281c6a..caddf66 100644 --- a/gcc/ada/osint.ads +++ b/gcc/ada/osint.ads @@ -63,8 +63,9 @@ package Osint is type File_Type is (Source, Library, Config, Definition, Preprocessing_Data); function Find_File - (N : File_Name_Type; - T : File_Type) return File_Name_Type; + (N : File_Name_Type; + T : File_Type; + Full_Name : Boolean := False) return File_Name_Type; -- Finds a source, library or config file depending on the value of T -- following the directory search order rules unless N is the name of the -- file just read with Next_Main_File and already contains directory @@ -76,6 +77,9 @@ package Osint is -- set and the file name ends in ".dg", in which case we look for the -- generated file only in the current directory, since that is where it is -- always built. + -- In the case of configuration files, full path names are needed for some + -- ASIS queries. The flag Full_Name indicates that the name of the file + -- should be normalized to include a full path. function Get_File_Names_Case_Sensitive return Int; pragma Import (C, Get_File_Names_Case_Sensitive, diff --git a/gcc/ada/sem_case.adb b/gcc/ada/sem_case.adb index 005bd95..201855b 100644 --- a/gcc/ada/sem_case.adb +++ b/gcc/ada/sem_case.adb @@ -735,6 +735,8 @@ package body Sem_Case is return; end if; + Predicate_Error := False; + -- Choice_Table must start at 0 which is an unused location used by the -- sorting algorithm. However the first valid position for a discrete -- choice is 1. @@ -762,8 +764,6 @@ package body Sem_Case is -- expression is static, independently of whether the aspect mentions -- Static explicitly. - Predicate_Error := False; - if Has_Predicate then Pred := First (Static_Discrete_Predicate (Bounds_Type)); Prev_Lo := Uint_Minus_1; diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb index a6014b1..f7b7375 100644 --- a/gcc/ada/sem_ch6.adb +++ b/gcc/ada/sem_ch6.adb @@ -632,8 +632,8 @@ package body Sem_Ch6 is and then not GNAT_Mode then Error_Msg_N - ("(Ada 2005) cannot copy object of a limited type " & - "(RM-2005 6.5(5.5/2))", Expr); + ("(Ada 2005) cannot copy object of a limited type " + & "(RM-2005 6.5(5.5/2))", Expr); if Is_Limited_View (R_Type) then Error_Msg_N @@ -723,7 +723,7 @@ package body Sem_Ch6 is if not Predicates_Match (R_Stm_Type, R_Type) then Error_Msg_Node_2 := R_Type; Error_Msg_NE - ("\predicate of & does not match predicate of &", + ("\predicate of& does not match predicate of&", N, R_Stm_Type); end if; end Error_No_Match; @@ -774,8 +774,8 @@ package body Sem_Ch6 is elsif R_Stm_Type_Is_Anon_Access and then not R_Type_Is_Anon_Access then - Error_Msg_N ("anonymous access not allowed for function with " & - "named access result", Subtype_Ind); + Error_Msg_N ("anonymous access not allowed for function with " + & "named access result", Subtype_Ind); -- Subtype indication case: check that the return object's type is -- covered by the result type, and that the subtypes statically match @@ -942,8 +942,8 @@ package body Sem_Ch6 is & "in Ada 2012??", N); elsif not Is_Limited_View (R_Type) then - Error_Msg_N ("aliased only allowed for limited" - & " return objects", N); + Error_Msg_N + ("aliased only allowed for limited return objects", N); end if; end if; end; @@ -1013,8 +1013,8 @@ package body Sem_Ch6 is Subprogram_Access_Level (Scope_Id) then Error_Msg_N - ("level of return expression type is deeper than " & - "class-wide function!", Expr); + ("level of return expression type is deeper than " + & "class-wide function!", Expr); end if; end if; @@ -1807,8 +1807,8 @@ package body Sem_Ch6 is else Error_Msg_N - ("return nested in extended return statement cannot return " & - "value (use `RETURN;`)", N); + ("return nested in extended return statement cannot return " + & "value (use `RETURN;`)", N); end if; end if; @@ -2128,7 +2128,7 @@ package body Sem_Ch6 is and then Contains_Refined_State (Prag) then Error_Msg_NE - ("body of subprogram & requires global refinement", + ("body of subprogram& requires global refinement", Body_Decl, Spec_Id); end if; end if; @@ -2151,7 +2151,7 @@ package body Sem_Ch6 is and then Contains_Refined_State (Prag) then Error_Msg_NE - ("body of subprogram & requires dependance refinement", + ("body of subprogram& requires dependance refinement", Body_Decl, Spec_Id); end if; end if; @@ -2952,7 +2952,7 @@ package body Sem_Ch6 is and then Operator_Matches_Spec (Spec_Id, Spec_Id) then Error_Msg_NE - ("subprogram & overrides predefined operator ", + ("subprogram& overrides predefined operator ", Body_Spec, Spec_Id); -- Overriding indicators aren't allowed for protected subprogram @@ -2963,18 +2963,16 @@ package body Sem_Ch6 is Error_Msg_Warn := Error_To_Warning; Error_Msg_N - ("<<overriding indicator not allowed " & - "for protected subprogram body", - Body_Spec); + ("<<overriding indicator not allowed " + & "for protected subprogram body", Body_Spec); -- If this is not a primitive operation, then the overriding -- indicator is altogether illegal. elsif not Is_Primitive (Spec_Id) then Error_Msg_N - ("overriding indicator only allowed " & - "if subprogram is primitive", - Body_Spec); + ("overriding indicator only allowed " + & "if subprogram is primitive", Body_Spec); end if; -- If checking the style rule and the operation overrides, then @@ -3764,7 +3762,7 @@ package body Sem_Ch6 is else Error_Msg_Sloc := Sloc (SPARK_Pragma (Body_Id)); - Error_Msg_N ("incorrect application of SPARK_Mode#", N); + Error_Msg_N ("incorrect application of SPARK_Mode #", N); Error_Msg_Sloc := Sloc (Spec_Id); Error_Msg_NE ("\no value was set for SPARK_Mode on & #", N, Spec_Id); @@ -4746,7 +4744,7 @@ package body Sem_Ch6 is -- this before checking that the types of the formals match. if Chars (Old_Formal) /= Chars (New_Formal) then - Conformance_Error ("\name & does not match!", New_Formal); + Conformance_Error ("\name& does not match!", New_Formal); -- Set error posted flag on new formal as well to stop -- junk cascaded messages in some cases. @@ -4769,7 +4767,7 @@ package body Sem_Ch6 is Comes_From_Source (New_Formal) then Conformance_Error - ("\null exclusion for & does not match", New_Formal); + ("\null exclusion for& does not match", New_Formal); -- Mark error posted on the new formal to avoid duplicated -- complaint about types not matching. @@ -4905,8 +4903,7 @@ package body Sem_Ch6 is declare T : constant Entity_Id := Find_Dispatching_Type (New_Id); begin - if Is_Protected_Type - (Corresponding_Concurrent_Type (T)) + if Is_Protected_Type (Corresponding_Concurrent_Type (T)) then Error_Msg_PT (T, New_Id); else @@ -4979,9 +4976,9 @@ package body Sem_Ch6 is if Is_Controlling_Formal (New_Formal) then Error_Msg_Node_2 := Scope (New_Formal); Conformance_Error - ("\controlling formal& of& excludes null, " - & "declaration must exclude null as well", - New_Formal); + ("\controlling formal & of & excludes null, " + & "declaration must exclude null as well", + New_Formal); -- Normal case (couldn't we give more detail here???) @@ -5175,23 +5172,21 @@ package body Sem_Ch6 is Error_Msg_N ("\\primitive % defined #", Typ); else Error_Msg_N - ("\\overriding operation % with " & - "convention % defined #", Typ); + ("\\overriding operation % with " + & "convention % defined #", Typ); end if; else pragma Assert (Present (Alias (Op))); Error_Msg_Sloc := Sloc (Alias (Op)); - Error_Msg_N - ("\\inherited operation % with " & - "convention % defined #", Typ); + Error_Msg_N ("\\inherited operation % with " + & "convention % defined #", Typ); end if; Error_Msg_Name_1 := Chars (Op); Error_Msg_Name_2 := Get_Convention_Name (Iface_Conv); Error_Msg_Sloc := Sloc (Iface_Prim); - Error_Msg_N - ("\\overridden operation % with " & - "convention % defined #", Typ); + Error_Msg_N ("\\overridden operation % with " + & "convention % defined #", Typ); -- Avoid cascading errors @@ -5722,9 +5717,8 @@ package body Sem_Ch6 is if not Is_Primitive and then Ekind (Scope (Subp)) /= E_Protected_Type then - Error_Msg_N - ("overriding indicator only allowed " - & "if subprogram is primitive", Subp); + Error_Msg_N ("overriding indicator only allowed " + & "if subprogram is primitive", Subp); elsif Can_Override_Operator (Subp) then Error_Msg_NE @@ -7085,7 +7079,7 @@ package body Sem_Ch6 is then if Scope (E) /= Standard_Standard then Error_Msg_Sloc := Sloc (E); - Error_Msg_N ("declaration of & hides one#?h?", S); + Error_Msg_N ("declaration of & hides one #?h?", S); elsif Nkind (S) = N_Defining_Operator_Symbol and then @@ -7159,7 +7153,7 @@ package body Sem_Ch6 is else if Ada_Version >= Ada_2012 then Error_Msg_NE - ("equality operator must be declared before type& is " + ("equality operator must be declared before type & is " & "frozen (RM 4.5.2 (9.8)) (Ada 2012)<<", Eq_Op, Typ); -- In Ada 2012 mode with error turned to warning, output one @@ -8395,8 +8389,8 @@ package body Sem_Ch6 is then Error_Msg_Node_2 := F_Typ; Error_Msg_NE - ("private operation& in generic unit does not override " & - "any primitive operation of& (RM 12.3 (18))??", + ("private operation& in generic unit does not override " + & "any primitive operation of& (RM 12.3 (18))??", New_E, New_E); end if; @@ -8429,13 +8423,11 @@ package body Sem_Ch6 is if Class_Present (P) and then not Split_PPC (P) then if Pragma_Name (P) = Name_Precondition then - Error_Msg_N - ("info: & inherits `Pre''Class` aspect from #?L?", - E); + Error_Msg_N ("info: & inherits `Pre''Class` aspect " + & "from #?L?", E); else - Error_Msg_N - ("info: & inherits `Post''Class` aspect from #?L?", - E); + Error_Msg_N ("info: & inherits `Post''Class` aspect " + & "from #?L?", E); end if; end if; @@ -8663,18 +8655,15 @@ package body Sem_Ch6 is and then (not Is_Overriding or else not Is_Abstract_Subprogram (E)) then - Error_Msg_N - ("abstract subprograms must be visible " - & "(RM 3.9.3(10))!", S); + Error_Msg_N ("abstract subprograms must be visible " + & "(RM 3.9.3(10))!", S); elsif Ekind (S) = E_Function and then not Is_Overriding then if Is_Tagged_Type (T) and then T = Base_Type (Etype (S)) then - Error_Msg_N - ("private function with tagged result must" - & " override visible-part function", S); - Error_Msg_N - ("\move subprogram to the visible part" - & " (RM 3.9.3(10))", S); + Error_Msg_N ("private function with tagged result must" + & " override visible-part function", S); + Error_Msg_N ("\move subprogram to the visible part" + & " (RM 3.9.3(10))", S); -- AI05-0073: extend this test to the case of a function -- with a controlling access result. @@ -8687,10 +8676,10 @@ package body Sem_Ch6 is then Error_Msg_N ("private function with controlling access result " - & "must override visible-part function", S); + & "must override visible-part function", S); Error_Msg_N ("\move subprogram to the visible part" - & " (RM 3.9.3(10))", S); + & " (RM 3.9.3(10))", S); end if; end if; end if; diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index d6de6a7..ad51ce3 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -11010,6 +11010,11 @@ package body Sem_Prag is if Arg_Count > 1 then Check_Optional_Identifier (Arg2, Name_Message); + + -- Provide semantic annnotations for optional argument, for + -- ASIS use, before rewriting. + + Preanalyze_And_Resolve (Expression (Arg2), Standard_String); Append_To (Newa, New_Copy_Tree (Arg2)); end if; @@ -19319,7 +19324,6 @@ package body Sem_Prag is else Spec_Id := Defining_Entity (Unit (Context)); - Inst_Id := Related_Instance (Spec_Id); Check_Library_Level_Entity (Spec_Id); Check_Pragma_Conformance (Context_Pragma => SPARK_Mode_Pragma, @@ -19329,7 +19333,10 @@ package body Sem_Prag is Set_SPARK_Pragma (Spec_Id, N); Set_SPARK_Pragma_Inherited (Spec_Id, False); - if Present (Inst_Id) then + if Ekind (Spec_Id) = E_Package + and then Present (Related_Instance (Spec_Id)) + then + Inst_Id := Related_Instance (Spec_Id); Set_SPARK_Pragma (Inst_Id, N); Set_SPARK_Pragma_Inherited (Inst_Id, False); end if; |