Go to file
Steve Baird 4c5e9870f2 [Ada] Implement AI12-0280 Making 'Old more flexible
gcc/ada/

	* sem_util.ads: Declare a new package, Old_Attr_Util, which in
	turn declares two more packages, Conditional_Evaluation and
	Indirect_Temps. Conditional_Evaluation provides a predicate for
	deciding whether a given 'Old attribute reference is eligible
	for conditional evaluation and, in the case where it is
	eligible, a function that constructs the Boolean-valued
	condition that is to be evaluated at run time in deciding
	whether to evaluate the attribute prefix.  Indirect_Temps
	provides support for declaring a temporary which is only
	initialized conditionally; more specifically, an access type and
	a variable of that type are declared (unconditionally) and then
	the variable is (conditionally) initialized with an allocator.
	The existence of the access type and the pointer variable is
	hidden from clients, except that a predicate,
	Is_Access_Type_For_Indirect_Temp, is provided for identifying
	such access types. This is needed because we want such an access
	type to be treated like a "normal" access type (specifically
	with respect to finalization of allocated objects). Other parts
	of the compiler treat access types differently if
	Comes_From_Source is False, or if the secondary stack storage
	pool is used; this predicate is used to disable this special
	treatment.
	* sem_attr.adb (Uneval_Old_Msg): Improve message text to reflect
	Ada202x changes.
	(Analyze_Attribute): A previously-illegal 'Old attribute
	reference is accepted in Ada2020 if it is eligible for
	conditional evaluation.
	* sem_res.adb (Valid_Conversion): Do not treat a rewritten 'Old
	attribute like other rewrite substitutions. This makes a
	difference, for example, in the case where we are generating the
	expansion of a membership test of the form "Saooaaat'Old in
	Named_Access_Type"; in this case Valid_Conversion needs to
	return True (otherwise the expansion will be False - see the
	call site in exp_ch4.adb).
	* exp_attr.adb (Expand_N_Attribute_Reference): When expanding a
	'Old attribute reference, test for the case where the reference
	is eligible for conditional evaluation. In that case, use the
	new "indirect temporary" mechanism provided by Sem_Util.
	* exp_prag.adb
	(Expand_Attributes_In_Consequence.Expand_Attributes): If
	Sem_Util.Indirect_Temp_Needed indicates that there could be
	correctness problems associated with the old expansion scheme
	for dealing with 'Old attributes in contract cases consequences,
	then we use the new "indirect temporary" mechanism provided by
	Sem_Util instead. We do not want to do this unconditionally.
	* sem_util.adb: Provide a body for the new Old_Attr_Util
	package. Further work is needed in several areas for
	correctness:
	- The function Is_Repeatedly_Evaluated does not deal with
	container aggregates yet.
	- The function Is_Known_On_Entry does not deal with interactions
	with the Global aspect.
	Each area where more work is needed is indicated with a "???"
	comment in the code; a more detailed description can be found
	there. Some optimization opportunties are similarly indicated
	with a "???" comment.
	* exp_ch3.adb (Freeze_Type): In deciding whether to generate
	expansion for the list controller of an access type, take the
	predicate Is_Access_Type_For_Indirect_Temp into account. If the
	predicate yields True, then generate the expansion.
	* exp_util.adb (Build_Allocate_Deallocate_Proc): We don't
	normally finalize allocated objects that are allocated on the
	secondary stack. Add an exception to this rule if the predicate
	Is_Access_Type_For_Indirect_Temp yields True.  As a result of
	this exception, we have to deal with the fact that gigi expects
	a different parameter profile if we are using the secondary
	stack pool; the Pool and Alignment parameters must be omitted in
	this case.
2020-10-20 03:21:48 -04:00
config
contrib
fixincludes
gcc [Ada] Implement AI12-0280 Making 'Old more flexible 2020-10-20 03:21:48 -04:00
gnattools
gotools
include
INSTALL
intl
libada
libatomic Daily bump. 2020-10-12 00:16:25 +00:00
libbacktrace
libcc1 Daily bump. 2020-10-15 00:16:34 +00:00
libcpp Daily bump. 2020-10-20 00:16:29 +00:00
libdecnumber
libffi
libgcc Daily bump. 2020-10-17 00:16:29 +00:00
libgfortran Daily bump. 2020-10-19 00:16:22 +00:00
libgo runtime: use correct types in __go_ptrace shim 2020-10-15 13:36:08 -07:00
libgomp Daily bump. 2020-10-16 00:16:29 +00:00
libhsail-rt
libiberty
libitm
libobjc Daily bump. 2020-10-12 00:16:25 +00:00
liboffloadmic
libphobos Daily bump. 2020-10-13 00:16:26 +00:00
libquadmath
libsanitizer Daily bump. 2020-10-20 00:16:29 +00:00
libssp
libstdc++-v3 Daily bump. 2020-10-20 00:16:29 +00:00
libvtv
lto-plugin
maintainer-scripts
zlib
.dir-locals.el
.gitattributes
.gitignore
ABOUT-NLS
ar-lib
ChangeLog
ChangeLog.jit
ChangeLog.tree-ssa
compile
config-ml.in
config.guess
config.rpath
config.sub
configure
configure.ac
COPYING
COPYING3
COPYING3.LIB
COPYING.LIB
COPYING.RUNTIME
depcomp
install-sh
libtool-ldflags
libtool.m4
lt~obsolete.m4
ltgcc.m4
ltmain.sh
ltoptions.m4
ltsugar.m4
ltversion.m4
MAINTAINERS
Makefile.def
Makefile.in
Makefile.tpl
missing
mkdep
mkinstalldirs
move-if-change
multilib.am
README
symlink-tree
test-driver
ylwrap

This directory contains the GNU Compiler Collection (GCC).

The GNU Compiler Collection is free software.  See the files whose
names start with COPYING for copying permission.  The manuals, and
some of the runtime libraries, are under different terms; see the
individual source files for details.

The directory INSTALL contains copies of the installation information
as HTML and plain text.  The source of this information is
gcc/doc/install.texi.  The installation information includes details
of what is included in the GCC sources and what files GCC installs.

See the file gcc/doc/gcc.texi (together with other files that it
includes) for usage and porting information.  An online readable
version of the manual is in the files gcc/doc/gcc.info*.

See http://gcc.gnu.org/bugs/ for how to report bugs usefully.

Copyright years on GCC source files may be listed using range
notation, e.g., 1987-2012, indicating that every year in the range,
inclusive, is a copyrightable year that could otherwise be listed
individually.