diff options
author | Ed Schonberg <schonberg@adacore.com> | 2017-01-06 11:24:02 +0000 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2017-01-06 12:24:02 +0100 |
commit | 9ca67d3f24e7386cf89c2ce2095677cd0e4c87de (patch) | |
tree | 7f03c7a1cc81cdacb953ca528df650d4eb61fde6 /gcc | |
parent | 5e127570e2871666c51d6c27a05cc3297030a823 (diff) | |
download | gcc-9ca67d3f24e7386cf89c2ce2095677cd0e4c87de.zip gcc-9ca67d3f24e7386cf89c2ce2095677cd0e4c87de.tar.gz gcc-9ca67d3f24e7386cf89c2ce2095677cd0e4c87de.tar.bz2 |
exp_ch6.adb (Expand_Protected_Subprogram_Call): Add guard to better detect call within an entry_wrapper.
2017-01-06 Ed Schonberg <schonberg@adacore.com>
* exp_ch6.adb (Expand_Protected_Subprogram_Call): Add guard to
better detect call within an entry_wrapper.
* sem_res.adb (Resolve_Call): A protected call within an
entity_wrapper is analyzed in the context of the protected
object but corresponds to a pre-analysis and is not an access
before elaboration.
* sem_attr.adb: Minor reformatting.
From-SVN: r244139
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/ada/exp_ch6.adb | 1 | ||||
-rw-r--r-- | gcc/ada/sem_attr.adb | 23 | ||||
-rw-r--r-- | gcc/ada/sem_res.adb | 4 |
4 files changed, 28 insertions, 10 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 71f2ada..5419627 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,13 @@ +2017-01-06 Ed Schonberg <schonberg@adacore.com> + + * exp_ch6.adb (Expand_Protected_Subprogram_Call): Add guard to + better detect call within an entry_wrapper. + * sem_res.adb (Resolve_Call): A protected call within an + entity_wrapper is analyzed in the context of the protected + object but corresponds to a pre-analysis and is not an access + before elaboration. + * sem_attr.adb: Minor reformatting. + 2017-01-06 Justin Squirek <squirek@adacore.com> * sem_attr.adb (Analyze_Attribute): Modify semantic checks for diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb index 2a0dac7..3f201bb 100644 --- a/gcc/ada/exp_ch6.adb +++ b/gcc/ada/exp_ch6.adb @@ -6006,6 +6006,7 @@ package body Exp_Ch6 is -- case this must be handled as an inter-object call. if not In_Open_Scopes (Scop) + or else Is_Entry_Wrapper (Current_Scope) or else not Is_Entity_Name (Name (N)) then if Nkind (Name (N)) = N_Selected_Component then diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 8d88338..91d740a 100644 --- a/gcc/ada/sem_attr.adb +++ b/gcc/ada/sem_attr.adb @@ -3840,24 +3840,29 @@ package body Sem_Attr is when Attribute_Finalization_Size => Check_E0; + -- The prefix denotes an object + if Is_Object_Reference (P) then Analyze_And_Resolve (P); Check_Object_Reference (P); - -- Redundant type verification for accurate error output + -- Check the prefix is a type to avoid an error message stating the + -- prefix must exclusively denote one + + elsif Is_Entity_Name (P) and then Is_Type (Entity (P)) then - elsif not Is_Entity_Name (P) - or else not Is_Type (Entity (P)) - then - Error_Attr_P ("prefix of % attribute must be a definite type or" & - " an object"); - else Check_Type; Check_Not_Incomplete_Type; if Is_Class_Wide_Type (Etype (P)) then - Error_Attr_P ("prefix of % attribute cannot be applied to " & - "a class-wide type"); + Error_Attr_P + ("prefix of % attribute cannot denote a class-wide type"); end if; + + -- The prefix does not denote an object or a type + + else + Error_Attr_P + ("prefix of % attribute must be a definite type or an object"); end if; Set_Etype (N, Universal_Integer); diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index f174ad9..74dc0e1 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -6287,12 +6287,14 @@ package body Sem_Res is -- A protected function cannot be called within the definition of the -- enclosing protected type, unless it is part of a pre/postcondition - -- on another protected operation. + -- on another protected operation. This may appear in the entry + -- wrapper created for an entry with preconditions. if Is_Protected_Type (Scope (Nam)) and then In_Open_Scopes (Scope (Nam)) and then not Has_Completion (Scope (Nam)) and then not In_Spec_Expression + and then not Is_Entry_Wrapper (Current_Scope) then Error_Msg_NE ("& cannot be called before end of protected definition", N, Nam); |