mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-21 18:15:06 +08:00
[multiple changes]
2011-12-21 Yannick Moy <moy@adacore.com> * sem_ch13.adb (Analyze_Attribute_Definition_Clause): Do not ignore representation attributes in Alfa mode, since formal verification backend does not depend on actual physical representation, but code may still refer to attribute values. 2011-12-21 Yannick Moy <moy@adacore.com> * par-ch13.adb (P_Aspect_Specifications): Recognize the cases where a comma between two aspects is missing, or erroneously replaced by a semicolon, issue an error and proceed with next aspect. * par.adb, sinfo.ads: Fix typos. 2011-12-21 Ed Schonberg <schonberg@adacore.com> * sem_util.adb (Mark_Coextensions): A coextension for an object that is part of the expression in a return statement, or part of the return object in an extended return statement, must be allocated dynamically. From-SVN: r182585
This commit is contained in:
parent
5ebfaacfb5
commit
1c1631789d
@ -1,3 +1,25 @@
|
||||
2011-12-21 Yannick Moy <moy@adacore.com>
|
||||
|
||||
* sem_ch13.adb (Analyze_Attribute_Definition_Clause): Do not
|
||||
ignore representation attributes in Alfa mode, since formal
|
||||
verification backend does not depend on actual physical
|
||||
representation, but code may still refer to attribute values.
|
||||
|
||||
2011-12-21 Yannick Moy <moy@adacore.com>
|
||||
|
||||
* par-ch13.adb (P_Aspect_Specifications): Recognize the cases
|
||||
where a comma between two aspects is missing, or erroneously
|
||||
replaced by a semicolon, issue an error and proceed with next
|
||||
aspect.
|
||||
* par.adb, sinfo.ads: Fix typos.
|
||||
|
||||
2011-12-21 Ed Schonberg <schonberg@adacore.com>
|
||||
|
||||
* sem_util.adb (Mark_Coextensions): A coextension for an
|
||||
object that is part of the expression in a return statement,
|
||||
or part of the return object in an extended return statement,
|
||||
must be allocated dynamically.
|
||||
|
||||
2011-12-21 Matthew Heaney <heaney@adacore.com>
|
||||
|
||||
* a-crbtgk.adb (Generic_Conditional_Insert): Fixed incorrect comment.
|
||||
|
@ -376,7 +376,7 @@ package body Ch13 is
|
||||
--------------------------------
|
||||
|
||||
-- ASPECT_SPECIFICATION ::=
|
||||
-- with ASPECT_MARK [=> ASPECT_DEFINITION] {.
|
||||
-- with ASPECT_MARK [=> ASPECT_DEFINITION] {,
|
||||
-- ASPECT_MARK [=> ASPECT_DEFINITION] }
|
||||
|
||||
-- ASPECT_MARK ::= aspect_IDENTIFIER['Class]
|
||||
@ -411,7 +411,7 @@ package body Ch13 is
|
||||
Ptr := Token_Ptr;
|
||||
Scan; -- past WITH
|
||||
|
||||
-- Here we have an aspect specification to scan, note that we don;t
|
||||
-- Here we have an aspect specification to scan, note that we don't
|
||||
-- set the flag till later, because it may turn out that we have no
|
||||
-- valid aspects in the list.
|
||||
|
||||
@ -547,16 +547,76 @@ package body Ch13 is
|
||||
|
||||
if Token = Tok_Comma then
|
||||
Scan; -- past comma
|
||||
goto Continue;
|
||||
|
||||
-- Recognize the case where a comma is missing between two
|
||||
-- aspects, issue an error and proceed with next aspect.
|
||||
|
||||
elsif Token = Tok_Identifier
|
||||
and then Get_Aspect_Id (Token_Name) /= No_Aspect
|
||||
then
|
||||
declare
|
||||
Scan_State : Saved_Scan_State;
|
||||
|
||||
begin
|
||||
Save_Scan_State (Scan_State);
|
||||
Scan; -- past identifier
|
||||
|
||||
if Token = Tok_Arrow then
|
||||
Restore_Scan_State (Scan_State);
|
||||
Error_Msg_AP -- CODEFIX
|
||||
("|missing "",""");
|
||||
goto Continue;
|
||||
|
||||
else
|
||||
Restore_Scan_State (Scan_State);
|
||||
end if;
|
||||
end;
|
||||
|
||||
-- Recognize the case where a semicolon was mistyped for a comma
|
||||
-- between two aspects, issue an error and proceed with next
|
||||
-- aspect.
|
||||
|
||||
elsif Token = Tok_Semicolon then
|
||||
declare
|
||||
Scan_State : Saved_Scan_State;
|
||||
|
||||
begin
|
||||
Save_Scan_State (Scan_State);
|
||||
Scan; -- past semicolon
|
||||
|
||||
if Token = Tok_Identifier
|
||||
and then Get_Aspect_Id (Token_Name) /= No_Aspect
|
||||
then
|
||||
Scan; -- past identifier
|
||||
|
||||
if Token = Tok_Arrow then
|
||||
Restore_Scan_State (Scan_State);
|
||||
Error_Msg_SC -- CODEFIX
|
||||
("|"";"" should be "",""");
|
||||
Scan; -- past semicolon
|
||||
goto Continue;
|
||||
|
||||
else
|
||||
Restore_Scan_State (Scan_State);
|
||||
end if;
|
||||
|
||||
else
|
||||
Restore_Scan_State (Scan_State);
|
||||
end if;
|
||||
end;
|
||||
end if;
|
||||
|
||||
-- Must be terminator character
|
||||
|
||||
else
|
||||
if Semicolon then
|
||||
T_Semicolon;
|
||||
end if;
|
||||
|
||||
exit;
|
||||
if Semicolon then
|
||||
T_Semicolon;
|
||||
end if;
|
||||
|
||||
exit;
|
||||
|
||||
<<Continue>>
|
||||
null;
|
||||
end if;
|
||||
end loop;
|
||||
|
||||
|
@ -884,7 +884,7 @@ function Par (Configuration_Pragmas : Boolean) return List_Id is
|
||||
-- argument is False, the scan pointer is left pointing past the aspects
|
||||
-- and the caller must check for a proper terminator.
|
||||
--
|
||||
-- P_Aspect_Specification is called with the current token pointing to
|
||||
-- P_Aspect_Specifications is called with the current token pointing to
|
||||
-- either a WITH keyword starting an aspect specification, or an
|
||||
-- instance of the terminator token. In the former case, the aspect
|
||||
-- specifications are scanned out including the terminator token if it
|
||||
|
@ -2126,10 +2126,9 @@ package body Sem_Ch13 is
|
||||
end case;
|
||||
end if;
|
||||
|
||||
-- Process Ignore_Rep_Clauses option (we also ignore rep clauses in
|
||||
-- Alfa mode, since they are not relevant in this context).
|
||||
-- Process Ignore_Rep_Clauses option
|
||||
|
||||
if Ignore_Rep_Clauses or Alfa_Mode then
|
||||
if Ignore_Rep_Clauses then
|
||||
case Id is
|
||||
|
||||
-- The following should be ignored. They do not affect legality
|
||||
@ -2149,11 +2148,7 @@ package body Sem_Ch13 is
|
||||
Rewrite (N, Make_Null_Statement (Sloc (N)));
|
||||
return;
|
||||
|
||||
-- We do not want too ignore 'Small in CodePeer_Mode or Alfa_Mode,
|
||||
-- since it has an impact on the exact computations performed.
|
||||
|
||||
-- Perhaps 'Small should also not be ignored by
|
||||
-- Ignore_Rep_Clauses ???
|
||||
-- Perhaps 'Small should not be ignored by Ignore_Rep_Clauses ???
|
||||
|
||||
when Attribute_Small =>
|
||||
if Ignore_Rep_Clauses then
|
||||
|
@ -9331,7 +9331,6 @@ package body Sem_Util is
|
||||
and then Nkind (Expression (Expression (N))) = N_Op_Concat
|
||||
then
|
||||
Set_Is_Dynamic_Coextension (N);
|
||||
|
||||
else
|
||||
Set_Is_Static_Coextension (N);
|
||||
end if;
|
||||
@ -9346,12 +9345,33 @@ package body Sem_Util is
|
||||
|
||||
begin
|
||||
case Nkind (Context_Nod) is
|
||||
when N_Assignment_Statement |
|
||||
N_Simple_Return_Statement =>
|
||||
|
||||
-- Comment here ???
|
||||
|
||||
when N_Assignment_Statement =>
|
||||
Is_Dynamic := Nkind (Expression (Context_Nod)) = N_Allocator;
|
||||
|
||||
-- An allocator that is a component of a returned aggregate
|
||||
-- must be dynamic.
|
||||
|
||||
when N_Simple_Return_Statement =>
|
||||
declare
|
||||
Expr : constant Node_Id := Expression (Context_Nod);
|
||||
begin
|
||||
Is_Dynamic :=
|
||||
Nkind (Expr) = N_Allocator
|
||||
or else
|
||||
(Nkind (Expr) = N_Qualified_Expression
|
||||
and then Nkind (Expression (Expr)) = N_Aggregate);
|
||||
end;
|
||||
|
||||
-- An alloctor within an object declaration in an extended return
|
||||
-- statement is of necessity dynamic.
|
||||
|
||||
when N_Object_Declaration =>
|
||||
Is_Dynamic := Nkind (Root_Nod) = N_Allocator;
|
||||
Is_Dynamic := Nkind (Root_Nod) = N_Allocator
|
||||
or else
|
||||
Nkind (Parent (Context_Nod)) = N_Extended_Return_Statement;
|
||||
|
||||
-- This routine should not be called for constructs which may not
|
||||
-- contain coextensions.
|
||||
@ -9371,9 +9391,9 @@ package body Sem_Util is
|
||||
Formal : Entity_Id;
|
||||
|
||||
begin
|
||||
if Ada_Version >= Ada_2005
|
||||
and then Present (First_Formal (E))
|
||||
then
|
||||
-- Ada 2005 or later, and formals present
|
||||
|
||||
if Ada_Version >= Ada_2005 and then Present (First_Formal (E)) then
|
||||
Formal := Next_Formal (First_Formal (E));
|
||||
while Present (Formal) loop
|
||||
if No (Default_Value (Formal)) then
|
||||
@ -9385,6 +9405,8 @@ package body Sem_Util is
|
||||
|
||||
return True;
|
||||
|
||||
-- Ada 83/95 or no formals
|
||||
|
||||
else
|
||||
return False;
|
||||
end if;
|
||||
|
@ -6571,7 +6571,7 @@ package Sinfo is
|
||||
-- We modify the RM grammar here, the RM grammar is:
|
||||
|
||||
-- ASPECT_SPECIFICATION ::=
|
||||
-- with ASPECT_MARK [=> ASPECT_DEFINITION] {.
|
||||
-- with ASPECT_MARK [=> ASPECT_DEFINITION] {,
|
||||
-- ASPECT_MARK [=> ASPECT_DEFINITION] }
|
||||
|
||||
-- ASPECT_MARK ::= aspect_IDENTIFIER['Class]
|
||||
|
Loading…
Reference in New Issue
Block a user