2018-11-14 Sandra Loosemore <sandra@codesourcery.com>
PR lto/55102
PR lto/56700
gcc/
* doc/invoke.texi (Optimize Options): Remove bad example about
interaction between -flto and -O. Replace it with a note that
you need to compile with -O and not just link. Copy-edit -flto
discussion to reduce verbiage and improve flow.
From-SVN: r266168
A recent change caused a performance regression. This restores the
previous performance and adds a performance test.
* scripts/check_performance: Allow tests to choose a -std flag.
* src/c++17/memory_resource.cc (bitset::get_first_unset()): Use local
variables of the right types. Call update_next_word() unconditionally.
* testsuite/20_util/unsynchronized_pool_resource/cons.cc: New test.
* testsuite/performance/20_util/memory_resource/pools.cc: New test.
* testsuite/util/testsuite_performance.h (time_counter): Allow
timer to be restarted.
From-SVN: r266164
2018-11-14 Sandra Loosemore <sandra@codesourcery.com>
PR middle-end/59658
gcc/
* doc/invoke.texi (Optimize Options): Clarify that -O0 and -Og
also suppress many optimizations. Alphabetize option lists for
-O1, -O2, and -Os. Add list of options disabled with -Og, and
correct documentation for those options to say that.
* opts.c (default_options_table): Sort table by level and option
name, to make it easier to correlate to the manual.
From-SVN: r266162
P1236R1 - Signed integers are two's complement
gcc/cp/
* constexpr.c (cxx_eval_check_shift_p): Disable the signed LSHIFT_EXPR
checks for c++2a.
gcc/c-family/
* c-warn.c (maybe_warn_shift_overflow): Don't warn for c++2a.
* c-ubsan.c (ubsan_instrument_shift): Make signed shifts
with in-range second operand well defined for -std=c++2a.
gcc/
* doc/invoke.texi (Wshift-overflow): Adjust documentation for
c++2a.
gcc/testsuite/
* g++.dg/cpp2a/constexpr-shift1.C: New test.
* g++.dg/warn/permissive-1.C (enum A, enum D): Don't expect
diagnostics here for c++2a.
* g++.dg/cpp0x/constexpr-shift1.C (fn3, i3, fn4, i4): Don't expect
diagnostics here for c++2a.
* g++.dg/cpp0x/constexpr-60049.C (f3, x3, y3): Likewise.
* g++.dg/ubsan/cxx11-shift-1.C (main): Add some further tests.
* g++.dg/ubsan/cxx11-shift-2.C (main): Likewise.
* g++.dg/ubsan/cxx2a-shift-1.C: New test.
* g++.dg/ubsan/cxx2a-shift-2.C: New test.
From-SVN: r266153
PR bootstrap/86739
* hash-map.h (hash_map::iterator::reference_pair): New class.
(hash_map::iterator::operator*): Return it rather than std::pair.
From-SVN: r266152
* optabs.c (expand_binop): Pass INT_MODE to operand_subword_force
iff the operand is a constant.
* gcc.c-torture/compile/20181114.c: New test.
2018-11-14 Ilya Leoshkevich <iii@linux.ibm.com>
From-SVN: r266151
* scripts/create_testsuite_files: Add special_functions to the list
of directories to search. Add comment referring to conformance.exp.
* testsuite/libstdc++-dg/conformance.exp: Add comment referring
to create_testsuite_files.
From-SVN: r266146
mode
The emitted address is .long, not .quad, in that case.
gcc/testsuite/ChangeLog:
2018-11-14 Ilya Leoshkevich <iii@linux.ibm.com>
* gcc.target/s390/mrecord-mcount.c (profileme): Expect .long in
31-bit mode.
From-SVN: r266145
These tests rely on larl->movdi merge, which is not implemented for
31-bit mode.
gcc/testsuite/ChangeLog:
2018-11-14 Ilya Leoshkevich <iii@linux.ibm.com>
* gcc.target/s390/global-array-almost-huge-element.c: Run only
in 64-bit mode.
* gcc.target/s390/global-array-almost-negative-huge-element.c:
Likewise.
* gcc.target/s390/global-array-even-element.c: Likewise.
From-SVN: r266144
This patch implements some of the optimizations discussed in PR71026.
Simplify (C / x >= 0.0) into x >= 0.0 with -funsafe-math-optimizations
(since C / x can underflow to zero if x is huge, it's not safe otherwise).
If C is negative the comparison is reversed.
Simplify (x * C1) > C2 into x > (C2 / C1) with -funsafe-math-optimizations.
If C1 is negative the comparison is reversed.
gcc/
PR 71026/tree-optimization
* match.pd: Simplify floating point comparisons.
gcc/testsuite/
PR 71026/tree-optimization
* gcc.dg/div-cmp-1.c: New test.
* gcc.dg/div-cmp-2.c: New test.
Co-Authored-By: Jackson Woodruff <jackson.woodruff@arm.com>
From-SVN: r266142
PR other/88007
* c-common.c (parse_optimize_options): Allocate option string from
opts_obstack rather than as GC memory. Move the allocation after
warning for invalid option.
* gcc.dg/pr88007.c: New test.
From-SVN: r266141
PR rtl-optimization/87817
* config/i386/i386.c (ix86_fold_builtin): For _bzhi_u{32,64} if
last argument has low 8 bits clear, fold to 0.
* gcc.target/i386/bmi2-bzhi-3.c (main): Add a couple of new tests.
From-SVN: r266140
The testcase for PR62178 has been failing for a while due to the pass
conditions being too tight, resulting in failures with -mcmodel=tiny:
ldr q2, [x0], 124
ld1r {v1.4s}, [x1], 4
cmp x0, x2
mla v0.4s, v2.4s, v1.4s
bne .L7
-mcmodel=small generates the slightly different:
ldr q1, [x0], 124
ldr s2, [x1, 4]!
cmp x0, x2
mla v0.4s, v1.4s, v2.s[0]
bne .L7
This is due to Combine merging a DUP instruction with either a load
or MLA - we can't force it to prefer one over the other. However the
generated vector loop is fast either way since it generates MLA and
merges the DUP either with a load or MLA. So relax the conditions
slightly and check we still generate MLA and there is no DUP or FMOV.
The testcase now passes - committed as obvious.
testsuite/
* gcc.target/aarch64/pr62178.c: Relax scan-assembler checks.
From-SVN: r266139
The XOR operation applied to a boolean array whose component type has
the range True .. True raises constraint error. Previous to this patch,
the expansion of the operation could lead to uplevel references that
were not handled properly when unnesting is in effect.
2018-11-14 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* exp_util.ads, exp_util.adb: Change the profile of
Silly_Boolean_Array_Xor_Test, adding a formal that can be a copy
of the right opersnd. This prevents unnesting anomalies when
that operand contains uplevel references.
* exp_ch4.adb (Expand_Boolean_Operation): Use this new profile.
* exp_pakd.adb (Expand_Packed_Boolean_Operator): Ditto.
From-SVN: r266137
Add the signal SIGSYS and mark the glibc reserved real-time signals
(32-34) as reserved rather than not maskable.
2018-11-14 Patrick Bernardi <bernardi@adacore.com>
gcc/ada/
* libgnarl/a-intnam__linux.ads: Add SIGSYS.
* libgnarl/s-linux__alpha.ads, libgnarl/s-linux__android.ads,
libgnarl/s-linux__hppa.ads, libgnarl/s-linux__mips.ads,
libgnarl/s-linux__riscv.ads, libgnarl/s-linux__sparc.ads,
libgnarl/s-linux__x32.ads: Rename SIGLTHRRES, SIGLTHRCAN and
SIGLTHRDBG to SIG32, SIG33 and SIG34 as their names are
implementation specific.
* libgnarl/s-osinte__linux.ads, libgnarl/s-linux.ads: Add
SIGSYS. Move SIG32, SIG33 and SIG34 from the unmasked list to
the reserved list.
gcc/testsuite/
* gnat.dg/rt_signals.adb: New testcase.
From-SVN: r266136
This change is aimed at fixing a fallout of bumping the default value of
the Max_Others_Replicate parameter of the Convert_To_Positional routine.
This parameter is responsible for taming the duplication of the
expression of an others choice in an array aggregate so that it doesn't
result in a code size explosion.
Unfortunately a fine-grained control based on the analysis of the
expression is not really possible because this analysis has not been
done yet by the time the decision is made in most cases, so the usual
syntactic ambiguities of the language come into play and make the
process a bit cumbersome. For example, it is not possible to
distinguish a simple reference to a static constant declared in another
unit from a call to a parameterless function.
Therefore the change errs on the side of caution and allows the
duplication only if the expression is unambiguously static and
sufficiently simple.
For the following three aggregates, the duplication must be blocked and
the elaboration of the aggregates must be done by means of a loop:
with Q; use Q;
procedure P is
A : Arr := (others => Get_Value);
B : Arr := (others => Get_Other_Value (0));
C : Arr := (others => Q.Get_Other_Value (1));
begin
null;
end;
package Q is
type Arr is array (1 .. 32) of Integer;
function Get_Value return Integer;
function Get_Other_Value (I : integer) return Integer;
end Q;
2018-11-14 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* exp_aggr.adb (Is_Static_Element): New predicate extracted
from...
(Check_Static_Components): ...here. Call Is_Static_Element on
each element of the component association list, if any.
(Flatten): Duplicate the expression of an others choice only if
it is static or is an aggregate which can itself be flattened.
From-SVN: r266135
2018-11-14 Olivier Hainque <hainque@adacore.com>
gcc/ada/
* sigtramp-vxworks-target.inc: Fix stack checking test errors in
ACATS, now that GCC can emit CFI rules referring to sp in
absence of a frame pointer.
From-SVN: r266134
N_Quantified_Expression and N_Iterated_Component_Association are
unrelated nodes that cannot appear in the same context: the former can
appear wherever an expression node is acceptable whereas the latter can
appear only as an element of a component association list. So a test
combining both most likely contains a dead arm and this change removes a
couple of them.
No functional changes.
2018-11-14 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* exp_aggr.adb (Check_Static_Components): Remove dead test.
(Flatten): Likewise. Move comment around.
From-SVN: r266133
This patch modifies the analysis (which is really expansion) of null
procedures to set the Ghost mode of the spec when the null procedure
acts as a completion. This ensures that all nodes and entities
generated by the expansion are marked as Ghost, and provide a proper
context for references to Ghost entities.
2018-11-14 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* sem_ch6.adb (Analyze_Null_Procedure): Capture Ghost and
SPARK-related global state at the start of the routine. Set the
Ghost mode of the completed spec if any. Restore the saved
Ghost and SPARK-related global state on exit from the routine.
gcc/testsuite/
* gnat.dg/ghost1.adb, gnat.dg/ghost1.ads: New testcase.
From-SVN: r266132
This adds a 4th information level for the -gnatR output, where relevant
compiler-generated types are listed in addition to the information
already output by -gnatR3.
For the following package P:
package P is
type Arr0 is array (Positive range <>) of Boolean;
type Rec (D1 : Positive; D2 : Boolean) is record
C1 : Integer;
C2 : Arr0 (1 .. D1);
case D2 is
when False =>
C3 : Character;
when True =>
C4 : String (1 .. 3);
C5 : Float;
end case;
end record;
type Arr1 is array (1 .. 8) of Rec (1, True);
end P;
the output generated by -gnatR4 must be:
Representation information for unit P (spec)
--------------------------------------------
for Arr0'Alignment use 1;
for Arr0'Component_Size use 8;
for Rec'Object_Size use 17179869344;
for Rec'Value_Size use (if (#2 != 0) then ((((#1 + 15) & -4) + 8) * 8)
else ((((#1 + 15) & -4) + 1) * 8) end);
for Rec'Alignment use 4;
for Rec use record
D1 at 0 range 0 .. 31;
D2 at 4 range 0 .. 7;
C1 at 8 range 0 .. 31;
C2 at 12 range 0 .. ((#1 * 8)) - 1;
C3 at ((#1 + 15) & -4) range 0 .. 7;
C4 at ((#1 + 15) & -4) range 0 .. 23;
C5 at (((#1 + 15) & -4) + 4) range 0 .. 31;
end record;
for Arr1'Size use 1536;
for Arr1'Alignment use 4;
for Arr1'Component_Size use 192;
for Tarr1c'Size use 192;
for Tarr1c'Alignment use 4;
for Tarr1c use record
D1 at 0 range 0 .. 31;
D2 at 4 range 0 .. 7;
C1 at 8 range 0 .. 31;
C2 at 12 range 0 .. 7;
C4 at 16 range 0 .. 23;
C5 at 20 range 0 .. 31;
end record;
2018-11-14 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* doc/gnat_ugn/building_executable_programs_with_gnat.rst
(-gnatR): Document new -gnatR4 level.
* gnat_ugn.texi: Regenerate.
* opt.ads (List_Representation_Info): Bump upper bound to 4.
* repinfo.adb: Add with clause for GNAT.HTable.
(Relevant_Entities_Size): New constant.
(Entity_Header_Num): New type.
(Entity_Hash): New function.
(Relevant_Entities): New set implemented with GNAT.HTable.
(List_Entities): Also list compiled-generated entities present
in the Relevant_Entities set. Consider that the Component_Type
of an array type is relevant.
(List_Rep_Info): Reset Relevant_Entities for each unit.
* switch-c.adb (Scan_Front_End_Switches): Add support for -gnatR4.
* switch-m.adb (Normalize_Compiler_Switches): Likewise
* usage.adb (Usage): Likewise.
From-SVN: r266131
The frontend crashes processing a tagged type that implements an
interface which has an equality primitive (that is, "=") and covers such
primitive by means of a renaming declaration.
2018-11-14 Javier Miranda <miranda@adacore.com>
gcc/ada/
* exp_disp.adb (Expand_Interface_Thunk): Extend handling of
renamings of the predefined equality primitive.
(Make_Secondary_DT): When calling Expand_Interface_Thunk() pass
it the primitive, instead of its Ultimate_Alias; required to
allow the called routine to identify renamings of the predefined
equality operation.
gcc/testsuite/
* gnat.dg/equal5.adb, gnat.dg/equal5.ads: New testcase.
From-SVN: r266130
This patch allows for aspect/pragma Suppress_Initialization to be an
acceptable form of missing initialization with respect to the semantics
of pragma Thread_Local_Storage.
------------
-- Source --
------------
-- gnat.adc
pragma Initialize_Scalars;
-- pack.ads
with System;
package Pack is
Addr : System.Address
with Thread_Local_Storage, Suppress_Initialization;
end Pack;
-----------------
-- Compilation --
-----------------
$ gcc -c pack.ads
2018-11-14 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* freeze.adb (Check_Pragma_Thread_Local_Storage): New routine. A
variable with suppressed initialization has no initialization
for purposes of the pragma.
(Freeze_Object_Declaration): Remove variable
Has_Default_Initialization as it is no longer used. Use routine
Check_Pragma_Thread_Local_Storage to verify the semantics of
pragma Thread_Local_Storage.
From-SVN: r266129
If the context of an if-expression is constrained, its dependent
expressions must obey the constraints of the expected type. Prior to
this patch, this check was performed only for scalar types, by means of
an added conversion. This is now enforced on all types by means of a
qualified expression on each dependent expression.
Compiling ce.adb must yield:
ce.adb:33:21: warning: string length wrong for type "T" defined at line 5
ce.adb:33:21: warning: "Constraint_Error" will be raised at run time
ce.adb:37:39: warning: string length wrong for type "T" defined at line 5
ce.adb:37:39: warning: "Constraint_Error" will be raised at run time
ce.adb:38:39: warning: too few elements for type "T" defined at line 5
ce.adb:38:39: warning: "Constraint_Error" will be raised at run time
ce.adb:39:39: warning: too few elements for type "T" defined at line 5
ce.adb:39:39: warning: "Constraint_Error" will be raised at run time
----
with Text_IO;
procedure Ce is
package Aerodrome_Identifier is
subtype T is String (1 .. 4);
end;
package Flight_Identifier is
type T is
record
ADEP : Aerodrome_Identifier.T;
Counter : Positive;
end record;
end;
procedure Assign (X : Flight_Identifier.T) is
begin
Text_IO.Put_Line (X.ADEP); -- outputs the 4 zero bytes
end;
function Env_Aerodrome_Value return String is ("ABCD");
function Void return String is ("What?");
function Void2 return String is
begin
return "who knows";
end;
Here : Aerodrome_Identifier.T;
type Four is range 1 .. 4;
Nothing : String := "";
begin
Assign((ADEP =>
(if (Void'Length = 5)
then "" --!! This value should always raise Constraint_Error !!
else Env_Aerodrome_Value & "!"),
Counter=> 17));
Here := (if (Void'Length = 5) then "" else Env_Aerodrome_Value);
Here := (if (Void'Length = 5) then Nothing else Env_Aerodrome_Value);
Here := (if (Void'Length = 5) then Void2 (1..3) else Void2 & Void);
end;
----
2018-11-14 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_res.adb (Resolve_If_Expression): Verify that the subtypes
of all dependent expressions obey the constraints of the
expected type for the if-expression.
(Analyze_Expression): Only add qualificiation to the dependent
expressions when the context type is constrained. Small
adjustment to previous patch.
From-SVN: r266128
There is no point in validating 'Alignment or 'Size of an entity
declared in a generic unit after the back-end has been run, since such
an entity is not passed to the back-end, and this can even lead to an
assertion failure.
2018-11-14 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* sem_prag.adb (Process_Compile_Time_Warning_Or_Error): Don't
register a compile-time warning or error for 'Alignment or 'Size
of an entity declared in a generic unit.
gcc/testsuite/
* gnat.dg/compile_time_error1.adb,
gnat.dg/compile_time_error1.ads,
gnat.dg/compile_time_error1_pkg.ads: New testcase.
From-SVN: r266127
This patch fixes an issue whereby a complicated set of generic formal
packages in conjunction with use_clauses may cause a crash during
visibility checking due to a homonym being out of scope during the
checking stage.
2018-11-14 Justin Squirek <squirek@adacore.com>
gcc/ada/
* sem_ch8.adb (Use_One_Package): Add test for out-of-scope
homonyms.
gcc/testsuite/
* gnat.dg/generic_pkg.adb: New testcase.
From-SVN: r266126
This patch fixes a compiler abort on an object declaration whose
expression is an aggregate, when the type of the object is limited and
the declaration is followed by an address clause for the declared
object.
2018-11-14 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* exp_ch3.adb: (Expand_N_Object_Declaration): If the expression
is a limited aggregate its resolution is delayed until the
object declaration is expanded.
* sem_ch3.adb: (Analyze_Object_Declaration): If the expression
is a limited aggregate and the declaration has a following
address clause indicate that resolution of the aggregate (which
must be built in place) must be delayed.
gcc/testsuite/
* gnat.dg/limited_aggr.adb, gnat.dg/limited_aggr.ads: New
testcase.
From-SVN: r266125
System'To_Address is supposed to be static when its parameter is static.
This patch fixes a bug in which it is considered nonstatic when used as
the initial value of a variable with the Thread_Local_Storage aspect, so
the compiler incorrectly gives an error when initializing such a
variable with System'To_Address (0).
2018-11-14 Bob Duff <duff@adacore.com>
gcc/ada/
* sem_attr.adb (To_Address): Simplify setting of
Is_Static_Expression. Remove second (unconditional) call to
Set_Is_Static_Expression -- surely it's not static if the
operand is not. Initialize Static on declaration. Do not try
to fold 'To_Address, even though it's static.
* exp_attr.adb (To_Address): Preserve Is_Static_Expression.
* sinfo.ads, sem_eval.ads, sem_eval.adb (Is_Static_Expression,
Is_OK_Static_Expression, Raises_Constraint_Error): Simplify
documentation. There was too much repetition and redundancy.
From-SVN: r266124
This patch recognizes additional object declarations whose defining
identifier is known statically to be valid. This allows additional
optimizations to be performed by the front-end.
Executing:
gcc -c -gnatDG p.ads
On the following sources:
----
with G;
With Q;
package P is
Val : constant Positive := Q.Config_Value ("Size");
package My_G is new G (Val);
end P;
----
generic
Num : Natural := 0;
package G is
Multi : constant Boolean := Num > 0;
type Info is array (True .. Multi) of Integer;
type Arr is array (Natural range <>) of Boolean;
type Rec (D : Natural) is record
C : character;
I : Info;
E : Arr (0 .. D);
end record;
end G;
----
package Q is
function Config_Value (S : String) return Integer;
end Q;
----
Must yield (note that variable Multi has been statically optimized to
true):
----
with g;
with q;
p_E : short_integer := 0;
package p is
p__R2s : constant integer := q.q__config_value ("Size");
[constraint_error when
not (p__R2s >= 1)
"range check failed"]
p__val : constant positive := p__R2s;
package p__my_g is
p__my_g__num : constant natural := p__val;
package p__my_g__g renames p__my_g;
package p__my_g__gGH renames p__my_g__g;
p__my_g__multi : constant boolean := true;
type p__my_g__info is array (true .. p__my_g__multi) of integer;
type p__my_g__arr is array (0 .. 16#7FFF_FFFF# range <>) of
boolean;
type p__my_g__rec (d : natural) is record
c : character;
i : p__my_g__info;
e : p__my_g__arr (0 .. d);
end record;
[type p__my_g__TinfoB is array (true .. p__my_g__multi range <>) of
integer]
freeze p__my_g__TinfoB [
procedure p__my_g__TinfoBIP (_init : in out p__my_g__TinfoB) is
begin
null;
return;
end p__my_g__TinfoBIP;
]
freeze p__my_g__info []
freeze p__my_g__arr [
procedure p__my_g__arrIP (_init : in out p__my_g__arr) is
begin
null;
return;
end p__my_g__arrIP;
]
freeze p__my_g__rec [
procedure p__my_g__recIP (_init : in out p__my_g__rec; d :
natural) is
begin
_init.d := d;
null;
return;
end p__my_g__recIP;
]
end p__my_g;
package my_g is new g (p__val);
end p;
freeze_generic info
[subtype TinfoD1 is boolean range true .. multi]
freeze_generic TinfoD1
[type TinfoB is array (true .. multi range <>) of integer]
freeze_generic TinfoB
freeze_generic arr
freeze_generic rec
----
2018-11-14 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch3.adb (Analyze_Object_Declaration): Use the
Actual_Subtype to preserve information about a constant
initialized with a non-static entity that is known to be valid,
when the type of the entity has a narrower range than that of
the nominal subtype of the constant.
* checks.adb (Determine_Range): If the expression is a constant
entity that is known-valid and has a defined Actual_Subtype, use
it to determine the actual bounds of the value, to enable
additional optimizations.
From-SVN: r266123
The following patch corrects the search for the equality function to
handle cases where the equality could be a renaming of another routine.
No simple reproducer possible because this requires PolyORB.
2018-11-14 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* exp_ch4.adb (Find_Aliased_Equality): New routine.
(Find_Equality): Reimplemented.
(Is_Equality): New routine.
From-SVN: r266121
This patch modifies the way analysis determine whether an assignment is
an ignored Ghost assignment. This is now achieved by preanalyzing a copy
of the left hand side in order to account for potential code generated
by the left hand side itself.
No small reproducer possible.
2018-11-14 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* ghost.adb (Ghost_Entity): New routine.
(Mark_And_Set_Ghost_Assignment): Reimplemented.
* sem_ch5.adb (Analyze_Assignment): Assess whether the target of
the assignment is an ignored Ghost entity before analyzing the
left hand side.
* sem_ch8.adb (Find_Direct_Name): Update the subprogram
signature. Do not generate markers and references when they are
not desired.
(Nvis_Messages): Do not execute when errors are not desired.
(Undefined): Do not emit errors when they are not desired.
* sem_ch8.ads (Find_Direct_Name): Update the subprogram
signature and comment on usage.
* sem_util.adb (Ultimate_Prefix): New routine.
* sem_util.ads (Ultimate_Prefix): New routine.
From-SVN: r266120
This patch fixes an issue whereby the freezing of a nested package
containing an enumerated type declaration would cause visibility errors
on literals of such type when a use_all_type_clause for it appears
within the same declarative region.
2018-11-14 Justin Squirek <squirek@adacore.com>
gcc/ada/
* sem_ch7.adb (Uninstall_Declarations): Add conditional to avoid
uninstalling potential visibility during freezing on enumeration
literals.
gcc/testsuite/
* gnat.dg/enum5.adb: New testcase.
From-SVN: r266119