This removes obsolete code that overwrites a limited view present as the
result type of a function during the tentative analysis of prefixed
views for function calls involving tagged types. The original view is
necessary for the code generator to break the circularity present in
this setup.
The change also adds a couple of guards for the illegal case where the
limited view is the only view available when the function is invoked.
gcc/ada/
* aspects.adb (Find_Value_Of_Aspect): Add guard.
* sem_ch4.adb (Complete_Object_Operation): Remove obsolete code.
* sem_ch5.adb (Has_Sec_Stack_Default_Iterator): Add guard.
The compiler generates wrong code on instantiations of package
Address_To_Access_Conversions when the generic formal is a class-wide
interface type; this causes wrong dispatching calls when the
access-to-class-wide-interface object returned by To_Pointer is used to
dispatch a call.
gcc/ada/
* exp_attr.adb (Expand_N_Attribute_Reference): The expansion of
'Address in a call to an instantiation of the implicit
subprogram To_Pointer with a class-wide interface type target
requires adding an implicit type conversion to force
displacement of the "this" pointer.
The compiler may crash processing the successor or predecessor of a task
type discrete discriminant.
gcc/ada/
* sem_attr.adb (Resolve_Attribute): Ensure that attribute
expressions are resolved at this stage; required for preanalyzed
references to discriminants since their resolution (and
expansion) will take care of updating their Entity attribute to
reference their discriminal.
This patch improves error messages concerning type mismatches by
printing the actual expected type in more cases instead of the expected
type's first subtype.
gcc/ada/
* sem_util.adb (Wrong_Type): Avoid using the first subtype of
the expected type in error messages when the expected type is
not internally generated.
The front-end drops a freeze node on the floor because it puts the node
into the Condition_Actions of an N_Iteration_Scheme of a FOR loop.
gcc/ada/
* exp_util.adb (Insert_Actions) <N_Iteration_Scheme>: Check that
it is a WHILE iteration scheme before using Condition_Actions.
Similar to a recent removal of obsolete uses of Unchecked_Deallocation.
In Ada 83 the Unchecked_Conversion was a top-level unit; since Ada 95 it
is an obsolete renaming of Ada.Unchecked_Conversion. GNAT doesn't warn
yet about uses of these obsolete renamings, but it still seems better to
avoid them.
gcc/ada/
* atree.adb, gen_il-gen.adb, osint.adb, set_targ.adb,
sinput.adb, table.adb, treepr.adb, types.ads: Replace uses of
Unchecked_Conversion in the compiler itself.
* libgnarl/a-reatim.adb, libgnarl/s-osinte__gnu.ads,
libgnarl/s-osinte__kfreebsd-gnu.ads, libgnat/a-coboho.adb,
libgnat/a-stuten.ads, libgnat/s-putima.adb: Likewise in the
runtime.
* doc/gnat_ugn/gnat_and_program_execution.rst: Likewise in
documentation.
* gnat_ugn.texi: Regenerate.
In Ada 83 the Unchecked_Deallocation was a top-level unit; since Ada 95
it is an obsolete renaming of Ada.Unchecked_Deallocation. GNAT doesn't
yet warn about uses of these obsolete renamings, but it still seems
better to avoid them.
Cleanup before adding a new instance of Unchecked_Deallocation.
Offending occurrences found with grep.
gcc/ada/
* butil.adb, sem.adb, sinput.adb, types.ads, xref_lib.adb:
Replace uses of Unchecked_Deallocation with
Ada.Unchecked_Deallocation.
* doc/gnat_ugn/gnat_and_program_execution.rst: Likewise for the
documentation; fix casing of GNAT.IO.
* gnat_ugn.texi: Regenerate.
Fix the error message pointing to the Ada reference section on mixed
iterated component association being forbidden. Remove useless loop.
gcc/ada/
* sem_aggr.adb (Resolve_Array_Aggregate): Fix ARM reference.
Remove useless loop.
This patch fixes an issue in the compiler whereby incorrect
accessibility checks were generated in functions returning types with
unconstrained access discriminants when the value supplied for the
discriminant is a formal parameter.
More specifically, accessibility checks for return statements featuring
a result type having access discriminants were incorrectly being
performed against the level of the function declaration instead of the
level of the master of the call.
gcc/ada/
* sem_ch6.adb (Check_Return_Construct_Accessibility): Modify
generation of run-time accessibility checks to account for cases
where Extra_Accessibility_Of_Result should be used versus the
level of the enclosing subprogram. Use original node to avoid
checking against expanded code. Disable check generation for
tagged type case.
(Is_Formal_Of_Current_Function): Added to encompass a predicate
used within Check_Return_Construct_Accessibility to test if an
associated expression is related to a relevant formal.
* sem_util.adb, sem_util.ads (Enclosing_Subprogram): Modified to
accept Node_Or_Entity_Id.
(Innermost_Master_Scope_Depth): Calculate level based on the
subprogram of a return statement instead of the one returned by
Current_Subprogram.
(Needs_Result_Accessibility_Level): Remove
Disable_Coextension_Cases constant, and disable the tagged type
case for performance reasons.
In SPARK we forbid names that are effectively volatile for reading if
they occur in actual subprogram parameters. We wrongly rejected
references to components, which are not names in Ada.
gcc/ada/
* sem_res.adb (Flag_Effectively_Volatile_Objects): Ignore
component and discriminant identifiers.
When flagging names of volatile objects occurring in actual parameters
we guard against identifiers without entity. This is redundant, because
earlier in the resolution of actual parameters we already guard against
actuals with Any_Type.
Code cleanup related to handling of volatile components; behaviour is
unaffected.
gcc/ada/
* sem_res.adb (Flag_Effectively_Volatile_Objects): Remove
redundant guard.
This patch corrects an error in the compiler whereby the presence of a
generic instance featuring a use type clause at library level may cause
a crash at compile time when warnings for ineffective use clauses are
enabled and the type in question is already use visible.
gcc/ada/
* sem_ch8.adb (Determine_Package_Scope): Created to centralize
the calculation of which package a given use clause belongs to.
(Most_Descendant_Use_Clause): Modified to call
Determine_Package_Scope.
* sem_util.adb, sem_util.ads (Enclosing_Package): Modified to
handle both entity and node ids.
This test is executed in both C and C++ modes, lines 98 and 100 pass
in C++ and are xfail in C.
This results in similar lines in gcc.sum and g++.sum, differing by the
PASS or XFAIL prefix, which confuses compare_test: it reports these
tests twice, as "now fail, but worked before" and "now work, but
didn't before". To make the diagnostic different betweek C and C++, I
use $tool in the dg-error comment field.
2022-05-13 Christophe Lyon <christophe.lyon@arm.com>
gcc/testsuite/
* gcc.target/aarch64/sve/acle/general/attributes_7.c: Make
diagnostic unique.
The following makes the main gimple_build API take a
gimple_stmt_iterator, whether to insert before or after and
an iterator update argument to make it more convenient to use
in certain situations (see the tree-vect-generic.cc hunks for
an example). It also makes the case we insert into the IL
somewhat distinct from inserting into a standalone sequence in
that it simplifies built expressions the same way as inserting
and calling fold_stmt (..., follow_all_ssa_edges) would. When
inserting into a standalone sequence we restrict simplification
to defs within the currently building sequence.
The patch only amends the tree_code gimple_build API, I will
followup with converting the rest as well. The patch got larger
than intended because the template forwarders now use gsi_last
which introduces a dependency on gimple-iterator.h requiring
mass #include re-org across the tree. There are two frontend
specific files including gimple-fold.h just for some padding
clearing stuff - I've removed the include and instead moved
the declarations to fold-const.h (but not the implementations).
Otherwise I'd have to include half of the middle-end headers in
those files which I didn't much like.
2022-05-12 Richard Biener <rguenther@suse.de>
gcc/cp/
* constexpr.cc: Remove gimple-fold.h include.
gcc/c-family/
* c-omp.cc: Remove gimple-fold.h include.
gcc/analyzer/
* supergraph.cc: Re-order gimple-fold.h include.
gcc/
* gimple-fold.cc (gimple_build): Adjust for new
main API.
* gimple-fold.h (gimple_build): New main APIs with
iterator, insert direction and iterator update.
(gimple_build): New forwarder template.
(clear_padding_type_may_have_padding_p): Remove.
(clear_type_padding_in_mask): Likewise.
(arith_overflowed_p): Likewise.
* fold-const.h (clear_padding_type_may_have_padding_p): Declare.
(clear_type_padding_in_mask): Likewise.
(arith_overflowed_p): Likewise.
* tree-vect-generic.cc (gimplify_build3): Use main gimple_build API.
(gimplify_build2): Likewise.
(gimplify_build1): Likewise.
* ubsan.cc (ubsan_expand_ptr_ifn): Likewise, avoid extra
compare stmt.
* gengtype.cc (open_base_files): Re-order includes.
* builtins.cc: Re-order gimple-fold.h include.
* calls.cc: Likewise.
* cgraphbuild.cc: Likewise.
* cgraphunit.cc: Likewise.
* config/rs6000/rs6000-builtin.cc: Likewise.
* config/rs6000/rs6000-call.cc: Likewise.
* config/rs6000/rs6000.cc: Likewise.
* config/s390/s390.cc: Likewise.
* expr.cc: Likewise.
* fold-const.cc: Likewise.
* function-tests.cc: Likewise.
* gimple-match-head.cc: Likewise.
* gimple-range-fold.cc: Likewise.
* gimple-ssa-evrp-analyze.cc: Likewise.
* gimple-ssa-evrp.cc: Likewise.
* gimple-ssa-sprintf.cc: Likewise.
* gimple-ssa-warn-access.cc: Likewise.
* gimplify.cc: Likewise.
* graphite-isl-ast-to-gimple.cc: Likewise.
* ipa-cp.cc: Likewise.
* ipa-devirt.cc: Likewise.
* ipa-prop.cc: Likewise.
* omp-low.cc: Likewise.
* pointer-query.cc: Likewise.
* range-op.cc: Likewise.
* tree-cfg.cc: Likewise.
* tree-if-conv.cc: Likewise.
* tree-inline.cc: Likewise.
* tree-object-size.cc: Likewise.
* tree-ssa-ccp.cc: Likewise.
* tree-ssa-dom.cc: Likewise.
* tree-ssa-forwprop.cc: Likewise.
* tree-ssa-ifcombine.cc: Likewise.
* tree-ssa-loop-ivcanon.cc: Likewise.
* tree-ssa-math-opts.cc: Likewise.
* tree-ssa-pre.cc: Likewise.
* tree-ssa-propagate.cc: Likewise.
* tree-ssa-reassoc.cc: Likewise.
* tree-ssa-sccvn.cc: Likewise.
* tree-ssa-strlen.cc: Likewise.
* tree-ssa.cc: Likewise.
* value-pointer-equiv.cc: Likewise.
* vr-values.cc: Likewise.
gcc/testsuite/
* gcc.dg/plugin/diagnostic_group_plugin.c: Reorder or remove
gimple-fold.h include.
* gcc.dg/plugin/diagnostic_plugin_show_trees.c:
Likewise.
* gcc.dg/plugin/diagnostic_plugin_test_inlining.c:
Likewise.
* gcc.dg/plugin/diagnostic_plugin_test_metadata.c:
Likewise.
* gcc.dg/plugin/diagnostic_plugin_test_paths.c:
Likewise.
* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c:
Likewise.
* gcc.dg/plugin/diagnostic_plugin_test_string_literals.c: Likewise.
* gcc.dg/plugin/diagnostic_plugin_test_tree_expression_range.c:
Likewise.
* gcc.dg/plugin/finish_unit_plugin.c: Likewise.
* gcc.dg/plugin/ggcplug.c: Likewise.
* gcc.dg/plugin/must_tail_call_plugin.c: Likewise.
* gcc.dg/plugin/one_time_plugin.c: Likewise.
* gcc.dg/plugin/selfassign.c: Likewise.
* gcc.dg/plugin/start_unit_plugin.c: Likewise.
* g++.dg/plugin/selfassign.c: Likewise.
When turning unconditional edges into conditional, as in
gimple-harden-conditionals.cc:insert_check_and_trap, the newly-created
edge's probability comes out uninitialized, while the previously
unconditional edge's probability is presumably
profile_probability::always.
Mixing initialized and uninitialized probabilities before expand
breaks predict.cc:force_edge_cold: the initialized probability may end
up copied to a REG_BR_PROB note in a conditional branch insn, but if
force_edge_cold is called on that edge, it will find another edge with
uninitialized probability and assume the note is absent. Later on,
rtl_verify_edges complains that the note does not match the
probability modified by force_edge_cold in the edge.
This patch sets probabilities for edges affected by hardening of
conditionals, both the newly-created edges to trap blocks and the
previously-unconditional edges, so that the former are considered
never taken, while the latter are confirmed as always taken.
for gcc/ChangeLog
PR rtl-optimization/105455
* gimple-harden-conditionals.cc (insert_check_and_trap): Set
probabilities for newly-conditional edges.
for gcc/testsuite/ChangeLog
PR rtl-optimization/105455
* gcc.dg/pr105455.c: New.
This patch makes TMPL_ARGS_LEVEL verify the level argument is valid when
the one-dimensional vector case. Doing so uncovered a couple of latent
issues: in try_class_unification, we weren't correctly copying targs
when it's two-dimensional, and in unify_pack_expansion it seems an
inequality test needs to be reversed. This patch fixes both issues, and
in passing makes the former function free the temporary copy of targs.
gcc/cp/ChangeLog:
* cp-tree.h (TMPL_ARGS_LEVEL): Assert LEVEL is 1 when
TMPL_ARGS_HAVE_MULTIPLE_LEVELS is false.
* pt.cc (try_class_unification): Correctly copy multidimensional
targs. Free the copy of targs.
(unify_pack_expansion): Fix level comparison.
pr101168.C uses __vector double, which requires VSX, not just Altivec.
This patch invokes the testcase with the -mvsx option.
* g++.target/powerpc/pr101168.C: Require VSX.
These are harmless, but also unnecessary and inconsistent (and their
removal was requested by PR libstdc++/17632).
libstdc++-v3/ChangeLog:
* config/locale/dragonfly/numeric_members.cc: Remove whitespace.
* config/locale/gnu/numeric_members.cc: Likewise.
* include/bits/locale_facets_nonio.h: Likewise.
* libsupc++/typeinfo: Likewise.
When one of the first two stages of DSE removes a throwing stmt
we have to purge dead EH edges before the DF re-analyze fires off
a fast DCE since that cannot cope with the situation.
2022-05-12 Richard Biener <rguenther@suse.de>
PR rtl-optimization/105577
* dse.cc (rest_of_handle_dse): Make sure to purge dead EH
edges before running fast DCE via df_analyze.
If there are compilation errors then gigi doesn't backannotate the AST
with sizes, alignment, etc. The postponed compilation validation checks
can then easily crash or give spurious errors. We now just skip them.
gcc/ada/
* gnat1drv.adb (Gnat1drv): Skip postponed checks when there are
errors.
A previous change in "Make debug printouts more robust" accidentally
removed double quotes around identifiers in debug printouts. This patch
restores those. So for example, we have:
Prev_Entity = Node #10 N_Defining_Identifier "foo" (Entity_Id=795)
and not:
Prev_Entity = Node #10 N_Defining_Identifier foo (Entity_Id=795)
This affects the output of -gnatdt, and certain calls normally done from
gdb.
gcc/ada/
* namet.ads, namet.adb (Write_Name_For_Debug): Add Quote
parameter to allow conditional addition of quotes. Note that
some calls to Write_Name_For_Debug, for example for file names,
shouldn't have quotes, as in some_package.adb:123:45.
* treepr.adb (Print_Name): Add double quotes around the name
using the above Quote parameters.
Function Is_Selector_Name was added in 1995 while experimenting with
default expressions in record declarations. This experiment was
abandoned after one day and this routine was never used since then.
gcc/ada/
* sem_util.ads (Is_Selector_Name): Remove spec.
* sem_util.adb (Is_Selector_Name): Remove body.
To sync the names used in CodePeer (and SPARK) when filtering out
warnings on e.g. unused variables.
gcc/ada/
* sem_warn.adb (Has_Junk_Name): Add more dummy names.
For warnings about unreferenced entities and unused WITH clauses we
typically exclude references outside of the extended main source unit.
However, we include references to variables of formal private types to
warn in the instance if the corresponding type is not a fully
initialized type.
This special case was unnecessarily applied to references to other
entities of formal private types. In particular, we applied it to the
references to generic functions, where the full initialization of the
formal private type doesn't matter.
As an extreme example, this special case was unnecessarily applied to
"pragma Pure (Unchecked_Conversion)" in the runtime unit.
gcc/ada/
* lib-xref.adb (Generate_Reference): Fix comment and implement
it precisely.
The compiler should warn when a generic subprogram unit is withed but
not instantiated by the current main unit. This warning relies on flag
Is_Instantiated, which was wrongly set when the generic unit was also
withed and instantiated by some other unit.
This change merely reverts a fix done 20 years ago, which worked around
some spurious warning emitted with inlining enabled. Now the
Is_Instantiated flag is set similarly for generic subprograms and
generic packages.
gcc/ada/
* atree.adb, atree.ads: Move WITH clause from spec to body; to
prevent new warnings stopping the bootstrap.
* fmap.adb, fname-sf.adb, libgnat/a-direct.adb,
libgnat/s-bignum.adb: Remove unnecessary WITH clauses; to
prevent new warnings stopping the bootstrap.
* sem_ch12.adb (Analyze_Subprogram_Instantiation): Only set
Is_Instantiated flag when the instance is in the extended main
source unit.
GNAT does not issue a warning anymore on a postcondition of True (used
here to prevent inining inside GNATprove for proof).
gcc/ada/
* libgnat/s-valuei.ads: Remove pragma Warnings Off.
* libgnat/s-valueu.ads: Same.
* libgnat/s-valuti.ads: Same.
Do not issue a warning about the postcondition of a function not
mentioning its result when this postcondition is statically True or
False, as this is a specification of non-termination (for value False)
or a hint to SPARK prover for not inlining an expression function (for
value True). In any case, the warning brings no value here.
gcc/ada/
* sem_util.adb (Check_Result_And_Post_State): Exempt trivial
post.
This patch improves some debug printouts so that they avoid crashing on
invalid data.
In addition, the relevant code uses Global_Name_Buffer all over the
place. This patch cleans up some of those uses, in particular ones in
the same code as the robustness changes, and code called by that code.
gcc/ada/
* namet.ads, namet.adb (Write_Name_For_Debug): New more-robust
version of Write_Name.
(Destroy_Global_Name_Buffer): New procedure to help detect bugs
related to use of Global_Name_Buffer. Misc cleanup and comment
improvements. E.g. we don't need to document every detail of
debugging printouts, especially since they can change.
* uname.ads, uname.adb (Write_Unit_Name_For_Debug): New
more-robust version of Write_Unit_Name.
(Get_Unit_Name_String): Pass buffer in, instead of using the
global variable. Misc cleanup. Remove the "special fudge", which
is apparently not needed, and anyway the comment "the %s or %b
has already been eliminated" seems wrong.
(Write_Unit_Name): Call the new version of Get_Unit_Name_String.
* errout.adb (Set_Msg_Insertion_Unit_Name): Call the new version
of Get_Unit_Name_String. We pass the global variable here,
because it's too much trouble to disentangle such uses in
Errout.
* sem_util.ads, sem_util.adb, sem_dist.adb
(Get_Library_Unit_Name): New version of
Get_Library_Unit_Name_String that avoids usage of the global
variable.
* casing.ads, casing.adb, exp_prag.adb, exp_util.adb
(Set_All_Upper_Case): Remove. There is no need for a wrapper
here -- code is clearer without it.
* treepr.adb (Print_Name): Call Write_Name_For_Debug, which
deals with No_Name (etc), rather than duplicating that here.
Note that the call to Get_Name_String was superfluous.
(Tree_Dump): Call Write_Unit_Name_For_Debug instead of
Write_Unit_Name, which crashes if not Is_Valid_Name.
* erroutc.ads: Improve comments.
* erroutc.adb (Set_Msg_Name_Buffer): Call
Destroy_Global_Name_Buffer to detect potential bugs where it
incorrectly looks at the global variable.
* sinput.adb (Write_Location): Call Write_Name_For_Debug instead
of Write_Name, so it won't blow up on invalid data.
* sinput.ads: Improve comments; remove some verbosity.
* libgnat/s-imagef.adb: Fix typo in comment.
Proof of generic units for Long_Long_Long_Unsigned instantiations is
harder for provers, as they have to deal with larger values. Add ghost
code to make the proof easier.
gcc/ada/
* libgnat/s-imageu.adb (Set_Image_Unsigned): Add lemma.
* libgnat/s-valueu.adb (Scan_Raw_Unsigned): Add assertion.
The spec of runtime units that may be loaded by the compiler should not
contain use-clauses, for visibility to be correctly handled. Remove
use-clauses that were introduced for the ghost big integers unit as part
of the proof of runtime units.
gcc/ada/
* libgnat/s-aridou.ads: Remove use-clause, add renames and
subtypes.
* libgnat/s-exponn.ads: Same.
* libgnat/s-expont.ads: Same.
* libgnat/s-widthu.ads: Same.
In ISO-8859-15, code for "lower y with diaeresis" is used for the upper
case. In IBM CP 850, upper and lower o with stroke were missing.
gcc/ada/
* csets.adb (Fold_Latin_9): Fix y with diaeresis.
(Fold_IBM_PC_850): Fix o with stroke.
A sequence of checks for a valid Boolean argument fails when applied to
Any_String because its component is not of a Boolean type. The explicit
guard was unnecessary; it was only needed when a First_Index applied to
Any_String would crash, but this was fixed soon after this guard was
added.
Cleanup related to recent fixes for resolution of Boolean operators.
gcc/ada/
* sem_type.adb (Valid_Boolean_Arg): Remove redundant guard.
This patch restores the previous behaviour of a recently rewritten
routine Sem_Ch4.Find_Boolean_Types for boolean operators where one of
the operands is a raise-expression, e.g.:
(raise Program_Error or else (X /= Y))
This change is required for the Entity field of the "or else" operator
to be set. For GNAT it doesn't matter, but GNATprove requires this field
to be set.
The affected call sequence starts at Find_Boolean_Types, goes via
Check_Right_Argument and Check_Boolean_Pair to Valid_Boolean_Arg, which
ultimately guards a call to Add_One_Interp.
gcc/ada/
* sem_type.adb (Valid_Boolean_Arg): Operands of Raise_Type are
valid boolean arguments.
We need to check that the designated subprograms of access-to-subprogram
types are subtype conformant before registering a common interpretation.
gcc/ada/
* sem_ch4.adb (Possible_Type_For_Conditional_Expression): Add
test for subtype conformance in the cases of
access-to-subprogram types.
New dependencies in s-imagei are causing issues for CodePeer analysis
of GNAT source and libs. Updating the setup.
gcc/ada/
* libgnat/s-imagef.adb: Justify false message from CodePeer.
The current implementation is skewed toward the first dependent
expression and does not look into the interpretations of the others if
the first one is not overloaded, which can create spurious ambiguities.
And more precise error messages are now given if the types of the
dependent expressions are not compatible.
gcc/ada/
* sem_ch4.adb (Analyze_Case_Expression): Rewrite.
(Analyze_If_Expression): Likewise.
(Possible_Type_For_Conditional_Expression): New function.
* sem_type.adb (Specific_Type): Retur the base type in more
cases.
Prove System.Image_I, similarly to the proof done for System.Image_U.
The contracts make the connection between the result of Image_Integer,
the available space computed with System.Width_U and the result of
'Value as computed by Value_Integer.
I/O units that now depend on non-pure units are also marked not Pure
anymore.
gcc/ada/
* libgnat/s-imagef.adb: Adapt to new signature of Image_I, by
providing ghost imported subprograms. For now, no contract is
used on these subprograms, as System.Image_F is not proved.
* libgnat/s-imagef.ads: Add modular type Uns as formal
parameter, to use in defining Int_Params for instantiating
Image_I.
* libgnat/s-imagei.adb: Add contracts and ghost code.
* libgnat/s-imagei.ads: Replace Int formal parameter by package
Int_Params, which bundles type Int and Uns with ghost
subprograms. Add contracts.
* libgnat/s-imfi128.ads: Adapt to new formal of Image_F.
* libgnat/s-imfi32.ads: Adapt to new formal of Image_F.
* libgnat/s-imfi64.ads: Adapt to new formal of Image_F.
* libgnat/s-imgint.ads: Adapt to new formals of Image_I.
* libgnat/s-imglli.ads: Adapt to new formals of Image_I.
* libgnat/s-imgllli.ads: Adapt to new formals of Image_I.
* libgnat/s-valint.ads: Adapt to new formals of Value_I.
* libgnat/s-vallli.ads: Adapt to new formals of Value_I.
* libgnat/s-valllli.ads: Adapt to new formals of Value_I.
* libgnat/s-valuei.adb (Prove_Scan_Only_Decimal_Ghost): New
ghost lemma.
* libgnat/s-valuei.ads: New formal parameters to prove the new
lemma.
* libgnat/s-valuti.ads (Int_Params): Define a generic package to
be used as a trait-like formal parameter in Image_I and other
generics that need to instantiate Image_I.
* libgnat/s-widthu.ads (Big_10): Qualify the 10 literal.
Using a straight implementation like the one in Find_Arithmetic_Types.
gcc/ada/
* sem_ch4.adb (Find_Arithmetic_Types): Use local variables.
(Find_Boolean_Types): Rewrite modeled on Find_Arithmetic_Types.
Implement and document hardened booleans, from nonstandard boolean types
with representation clauses to the extra validity checking performed on
boolean types annotated with the "hardbool" Machine_Attribute pragma.
gcc/ada/
* doc/gnat_rm/security_hardening_features.rst (Hardened
Booleans): New.
* exp_util.adb (Adjust_Condition): Perform validity checking on
hardbool-annotated types even with -gnatVT.
* gnat_rm.texi: Regenerate.
* gcc-interface/utils.cc (gnat_internal_attribute_table): Ignore
hardbool.
We expand protected entry body into procedure with a nested block. The
scope of this block is naturally the enclosing procedure. However, the
scope field was wrongly set to the entity of the enclosing procedure
body (i.e. E_Subprogram_Body); now it is set to the entity of the
enclosing procedure spec (i.e. E_Procedure).
In general, the scope field should always points to spec, even for
entities that are syntactically nested within a program unit body. The
scope set to E_Subprogram_Body entity was only accepted because in gigi
we had a protection for that, but this protection is now removed.
This patch fixes a regression in a ravenscar testsuite test (c_rf02_06),
where GNAT was crashing when compiling in configurable runtime mode with
restriction No_Exception_Propagation.
gcc/ada/
* exp_ch9.adb (Build_Protected_Entry): Set scope of the nested
block to spec and not the body of the procedure created for a
protected entry.
The square bracket syntax introduced in Ada 2022 was incorrectly handled
by the style checker and incorrect spacing was enforced. The issue was
in part caused by the wide character syntax (support removed starting
from Ada 2022) that treats the square bracket as a valid identifier
character.
gcc/ada/
* csets.adb (Initialize): Only treat square bracket as valid
identifier character for Ada versions prior to Ada 2022.
* style.ads (Check_Left_Paren): Rename...
(Check_Left_Paren_Square_Bracket): ...to this.
* styleg.adb (Check_Left_Bracket): Rename...
(Check_Left_Paren_Square_Bracket): ...to this.
* styleg.ads (Check_Left_Paren): Rename...
(Check_Left_Paren_Square_Bracket): ...to this.
* scng.adb (Scan): Add check for spacing around left square
bracket and use new name for Check_Left_Paren_Square_Bracket.
* libgnat/a-szmzco.ads (Control_Ranges, Graphic_Ranges)
(Letter_Ranges, Decimal_Digit_Ranges, ISO_646_Ranges)
(Character_Ranges): Fix style (remove extra space).
* libgnat/a-swmwco.ads (Control_Ranges, Graphic_Ranges)
(Letter_Ranges, Decimal_Digit_Ranges, ISO_646_Ranges)
(Character_Ranges): Likewise.
* opt.adb (Set_Config_Switches): Remove [ from Identifier_Char
set.