aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteve Baird <baird@adacore.com>2024-04-30 13:44:25 -0700
committerMarc Poulhiès <poulhies@adacore.com>2024-06-13 15:30:33 +0200
commitcc960e70b800e6739f16a3e890d27bad48550297 (patch)
treea9f2e0075f3df0408b775f3ec1b8cce0a8d411be /gcc
parent79a35e558e74fd61fa265e0307f2296114ab1b86 (diff)
downloadgcc-cc960e70b800e6739f16a3e890d27bad48550297.zip
gcc-cc960e70b800e6739f16a3e890d27bad48550297.tar.gz
gcc-cc960e70b800e6739f16a3e890d27bad48550297.tar.bz2
ada: Deep copy of an expression sometimes fails to copy entities
An entity can be defined within an expression (the best example is probably a declare expression, but a quantified expression is another; there are others). When making a deep copy of an expression, the Entity nodes for such entities were sometimes not copied, apparently for performance reasons. This caused correctness problems in some cases, so do not perform that "optimization". gcc/ada/ * sem_util.adb (New_Copy_Tree.Visit_Entity): Delete code that prevented copying some entities.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/sem_util.adb21
1 files changed, 0 insertions, 21 deletions
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
index 438dea7..e8120c2 100644
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -23907,27 +23907,6 @@ package body Sem_Util is
elsif EWA_Inner_Scope_Level > 0 then
return;
- -- Nothing to do when the entity does not denote a construct that
- -- may appear within an N_Expression_With_Actions node. Relaxing
- -- this restriction leads to a performance penalty.
-
- -- ??? this list is flaky, and may hide dormant bugs
- -- Should functions be included???
-
- -- Quantified expressions contain an entity declaration that must
- -- always be replaced when the expander is active, even if it has
- -- not been analyzed yet like e.g. in predicates.
-
- elsif Ekind (Id) not in E_Block
- | E_Constant
- | E_Label
- | E_Procedure
- | E_Variable
- and then not Is_Entity_Of_Quantified_Expression (Id)
- and then not Is_Type (Id)
- then
- return;
-
-- Nothing to do when the entity was already visited
elsif NCT_Tables_In_Use