public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [Ada] Enforce matching of extra formals
@ 2022-09-06  7:15 Marc Poulhiès
  0 siblings, 0 replies; only message in thread
From: Marc Poulhiès @ 2022-09-06  7:15 UTC (permalink / raw)
  To: gcc-patches; +Cc: Javier Miranda

[-- Attachment #1: Type: text/plain, Size: 4099 bytes --]

This patch enforces matching of extra formals in overridden subprograms,
subprogram renamings, and subprograms to which attributes 'Access,
'Unchecked_Access, or 'Unrestricted_Access is applied (for these access
cases the subprogram is checked against its corresponding subprogram
type).

Tested on x86_64-pc-linux-gnu, committed on trunk

gcc/ada/

	* debug.adb
	(Debug_Flag_Underscore_X): Switch added temporarily to allow
	disabling extra formal checks.

	* exp_attr.adb
	(Expand_N_Attribute_Reference [access types]): Add extra formals
	to the subprogram referenced in the prefix of 'Unchecked_Access,
	'Unrestricted_Access or 'Access; required to check that its extra
	formals match the extra formals of the corresponding subprogram
	type.

	* exp_ch3.adb
	(Stream_Operation_OK): Declaration moved to the public part of the
	package.
	(Validate_Tagged_Type_Extra_Formals): New subprogram.
	(Expand_Freeze_Record_Type): Improve the code that takes care of
	adding the extra formals of dispatching primitives; extended to
	add also the extra formals to renamings of dispatching primitives.

	* exp_ch3.ads
	(Stream_Operation_OK): Declaration moved from the package body.

	* exp_ch6.adb
	(Has_BIP_Extra_Formal): Subprogram declaration moved to the public
	part of the package. In addition, a parameter has been added to
	disable an assertion that requires its use with frozen entities.
	(Expand_Call_Helper): Enforce assertion checking extra formals on
	thunks.
	(Is_Build_In_Place_Function): Return False for entities with
	foreign convention.
	(Make_Build_In_Place_Call_In_Object_Declaration): Occurrences of
	Is_Return_Object replaced by the local variable
	Is_OK_Return_Object that evaluates to False for scopes with
	foreign convention.
	(Might_Have_Tasks): Fix check of class-wide limited record types.
	(Needs_BIP_Task_Actuals): Remove assertion to allow calling this
	function in more contexts; in addition it returns False for
	functions returning objects with foreign convention.
	(Needs_BIP_Finalization_Master): Likewise.
	(Needs_BIP_Alloc_Form): Likewise.

	* exp_ch6.ads
	(Stream_Operation_OK): Declaration moved from the package body. In
	addition, a parameter has been added to disable assertion that
	requires its use with frozen entities.

	* freeze.adb
	(Check_Itype): Add extra formals to anonymous access subprogram
	itypes.
	(Freeze_Expression): Improve code that disables the addition of
	extra formals to functions with foreign convention.
	(Check_Extra_Formals): Moved to package Sem_Ch6 as
	Extra_Formals_OK.
	(Freeze_Subprogram): Add extra formals to non-dispatching
	subprograms.

	* sem_ch3.adb
	(Access_Subprogram_Declaration): Defer the addition of extra
	formals to the freezing point so that we know the convention.
	(Check_Anonymous_Access_Component): Likewise.
	(Derive_Subprogram): Fix documentation.

	* sem_ch6.adb
	(Check_Anonymous_Return): Fix check of access to class-wide
	limited record types.
	(Check_Untagged_Equality): Placed in alphabetical order.
	(Extra_Formals_OK): Subprogram moved from freeze.adb.
	(Extra_Formals_Match_OK): New subprogram.
	(Has_BIP_Formals): New subprogram.
	(Has_Extra_Formals): New subprograms.
	(Needs_Accessibility_Check_Extra): New subprogram.
	(Needs_Constrained_Extra): New subprogram.
	(Parent_Subprogram): New subprogram.
	(Add_Extra_Formal): Minor code cleanup.
	(Create_Extra_Formals): Enforce matching extra formals on
	overridden and aliased entities.
	(Has_Reliable_Extra_Formals): New subprogram.

	* sem_ch6.ads
	(Extra_Formals_OK): Subprogram moved from freeze.adb.
	(Extra_Formals_Match_OK): New subprogram.

	* sem_eval.adb
	(Compile_Time_Known_Value): Improve predicate to avoid assertion
	failure; found working on this ticket; this change does not affect
	the behavior of the compiler because this subprogram has an
	exception handler that returns False when the assertion fails.

	* sem_util.adb
	(Needs_Result_Accessibility_Level): Do not return False for
	dispatching operations compiled with Ada_Version < 2012 since they
	they may be overridden by primitives compiled with Ada_Version >=
	Ada_2012.

[-- Attachment #2: patch.diff.gz --]
[-- Type: application/gzip, Size: 18520 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-09-06  7:15 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-06  7:15 [Ada] Enforce matching of extra formals Marc Poulhiès

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).