Commit Graph

184860 Commits

Author SHA1 Message Date
GCC Administrator 99e8df7a4c Daily bump. 2021-05-05 00:16:54 +00:00
Jonathan Wakely 058d6acefe libstdc++: Fix null dereferences in std::promise
This fixes some ubsan errors in std::promise:

future:1153:34: runtime error: member call on null pointer of type 'struct element_type'
future:1153:34: runtime error: member access within null pointer of type 'struct element_type'

The problem is that the check for a null pointer is done inside the
_State::__Setter function, which is only evaluated after evaluating the
_M_future->_M_set_result postfix-expression.

This change adds a new promise::_M_state() helper for accessing
_M_future, and moves the check for no shared state into there, instead
of inside the __setter functions. The __setter functions are made
always_inline, to avoid the situation where the linker selects the old
version of set_value (without the _S_check call) and the new version of
__setter (without the _S_check call) and so there is no check. With the
always_inline attribute the old version of set_value will either inline
the old __setter or call an extern definition of it, and the new
set_value will do the check itself, so both versions do the check.

libstdc++-v3/ChangeLog:

	* include/std/future (promise::set_value): Check for existence
	of shared state before dereferncing it.
	(promise::set_exception, promise::set_value_at_thread_exit)
	(promise::set_exception_at_thread_exit): Likewise.
	(promise<R&>::set_value, promise<R&>::set_exception)
	(promise<R&>::set_value_at_thread_exit)
	(promise<R&>::set_exception_at_thread_exit): Likewise.
	(promise<void>::set_value, promise<void>::set_exception)
	(promise<void>::set_value_at_thread_exit)
	(promise<void>::set_exception_at_thread_exit): Likewise.
	* testsuite/30_threads/promise/members/at_thread_exit2.cc:
	Remove unused variable.
2021-05-04 22:46:24 +01:00
Jonathan Wakely 789c57bc5f libstdc++: Fix undefined behaviour in std::string
This fixes a ubsan error when constructing a string with a null pointer:

bits/basic_string.h:534:21: runtime error: applying non-zero offset 18446744073709551615 to null pointer

The _M_construct function only cares whether the second pointer is
non-null, so create a non-null value without undefined arithmetic.

We can also pass the random_access_iterator_tag directly to the
_M_construct function, to avoid going via the tag dispatching
_M_construct_aux, because we know we have pointers not integers here.

libstdc++-v3/ChangeLog:

	* include/bits/basic_string.h (basic_string(const CharT*, const A&)):
	Do not do arithmetic on null pointer.
2021-05-04 22:45:02 +01:00
Jonathan Wakely ca871701c2 libstdc++: Fix null dereference in pb_ds containers
This fixes ubsan errors:

ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp:533:15: runtime error: member access within null pointer of type 'struct entry'

libstdc++-v3/ChangeLog:

	* include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp
	(find_key_pointer(key_const_reference, false_type))
	(find_key_pointer(key_const_reference, true_type)): Do not
	dereference null pointer.
2021-05-04 22:34:20 +01:00
Jonathan Wakely 6fb8b67089 libstdc++ Fix undefined behaviour in testsuite
Fix some test bugs found by ubsan.

libstdc++-v3/ChangeLog:

	* testsuite/20_util/from_chars/3.cc: Use unsigned type to avoid
	overflow.
	* testsuite/24_iterators/reverse_iterator/2.cc: Do not add
	non-zero value to null pointer.
	* testsuite/25_algorithms/copy_backward/move_iterators/69478.cc:
	Use past-the-end iterator for result.
	* testsuite/25_algorithms/move_backward/69478.cc: Likewise.
	* testsuite/25_algorithms/move_backward/93872.cc: Likewise.
2021-05-04 22:34:20 +01:00
David Edelsohn 8b5b814d51 aix: encode function section
AIX XCOFF symbols can be labels or qualnames (names with an appended
mapping class).  CSECTs must be declared with a mapping class.
Within an assembler file, the symbol names with and without the mapping
class are unique.  An object file symbol table only presents the symbol
name without the mapping class, but the section of the symbol depends on
the mapping class.

The AIX XCOFF assembly language does not support first class aliases.
GCC implements symbol aliases by emitting additional labels for the function
or object.  When GCC encodes sections for a DECL, it must distinguish
between the primary definition and the aliases, which don't have a
mapping class encoding.

	.globl foo[DS]
	.globl .foo
	.globl foo1
	.globl .foo1
	.csect foo[DS]
foo:
foo1:
	.long .foo, TOC[tc0] 0
	.csect .foo[PR]
.foo:
.foo1:

The CSECT foo[DS] and label foo are distinct.  foo1 is another label (alias)
for foo, and .foo1 is another label (alias) for .foo.  foo is the function
descriptor and .foo is the code.

This patch adds the [DS] mapping class to the encoding of FUNCTION_DECL
but ensures that mapping class is not added to function aliases.

rs6000_output_mi_thunk is updated to emit the function name that matches
the behavior of GCC final.c for normal functions: get_fnname_from_decl based
on the RTL name, not the DECL name.

	* config/rs6000/rs6000-call.c (rs6000_output_mi_thunk): Use
	get_fnname_from_decl for name of thunk.
	* config/rs6000/rs6000.c (rs6000_declare_alias): Use assemble_name
	and ASM_OUTPUT_LABEL.
	(rs6000_xcoff_declare_function_name): Use assemble_name and
	ASM_OUTPUT_LABEL.
	(rs6000_xcoff_declare_object_name): Use ASM_OUTPUT_LABEL.
	(rs6000_xcoff_encode_section_info): Don't add mapping class
	for aliases.  Always add [DS] mapping class to primary
	FUNCTION_DECL.
	(rs6000_asm_weaken_decl): Don't explicitly add [DS].
2021-05-04 16:14:14 -04:00
Martin Sebor 158cdc7bd9 PR middle-end/100307 - spurious -Wplacement-new with negative pointer offset
gcc/ChangeLog:

	PR middle-end/100307
	* builtins.c (compute_objsize_r): Clear base0 for pointers.

gcc/testsuite/ChangeLog:

	PR middle-end/100307
	* g++.dg/warn/Wplacement-new-size-9.C: New test.
	* gcc.dg/tree-ssa/builtin-sprintf-warn-26.c: New test.
2021-05-04 13:50:58 -06:00
Martin Sebor 78624756f7 Adjust strings in dg-warning directives (PR testsuite/100412).
gcc/testsuite/ChangeLog:
	* gcc.dg/Wvla-parameter-3.c: Use unique strings in directive names.
2021-05-04 11:10:40 -06:00
Martin Sebor 141cce5c2c Adjust strings in dg-warning directives (PR testsuite/100412).
gcc/testsuite/ChangeLog:
	* gcc.dg/Wvla-parameter-2.c: Use unique strings in directive names.
2021-05-04 10:21:20 -06:00
Jeff Law b50ccaf6dd Make bfin-elf build again
gcc/
	* config/bfin/bfin.h (NOTICE_UPDATE_CC): Remove.
2021-05-04 08:56:28 -06:00
Robin Dapp e4c707d2a4 s390/testsuite: Fix oscbreak-1.c.
Checking for an osc break is somewhat brittle especially with many
passes potentially introducing new insns and moving them around.
Therefore, only compile the test with -O1 -fschedule-insns in order
to limit the influence of other passes.

gcc/testsuite/ChangeLog:

	* gcc.target/s390/oscbreak-1.c: Compile with -O1
	-fschedule-insns
2021-05-04 16:25:57 +02:00
Segher Boessenkool bd1cd0d0e0 Remove CC0
This removes CC0 and all directly related infrastructure.

CC_STATUS, CC_STATUS_MDEP, CC_STATUS_MDEP_INIT, and NOTICE_UPDATE_CC
are deleted and poisoned.  CC0 is only deleted (some targets use that
name for something else).  HAVE_cc0 is automatically generated, and we
no longer will do that after this patch.

CC_STATUS_INIT is suggested in final.c to also be useful for ports that
are not CC0, and at least arm seems to use it for something.  So I am
leaving that alone, but most targets that have it could remove it.

2021-05-04  Segher Boessenkool  <segher@kernel.crashing.org>

	* caller-save.c: Remove CC0.
	* cfgcleanup.c: Remove CC0.
	* cfgrtl.c: Remove CC0.
	* combine.c: Remove CC0.
	* compare-elim.c: Remove CC0.
	* conditions.h: Remove CC0.
	* config/h8300/h8300.h: Remove CC0.
	* config/h8300/h8300-protos.h: Remove CC0.
	* config/h8300/peepholes.md: Remove CC0.
	* config/i386/x86-tune-sched.c: Remove CC0.
	* config/m68k/m68k.c: Remove CC0.
	* config/rl78/rl78.c: Remove CC0.
	* config/sparc/sparc.c: Remove CC0.
	* config/xtensa/xtensa.c: Remove CC0.
	(gen_conditional_move):  Use pc_rtx instead of cc0_rtx in a piece of
	RTL where that is used as a placeholder only.
	* cprop.c: Remove CC0.
	* cse.c: Remove CC0.
	* cselib.c: Remove CC0.
	* df-problems.c: Remove CC0.
	* df-scan.c: Remove CC0.
	* doc/md.texi: Remove CC0.  Adjust an example.
	* doc/rtl.texi: Remove CC0.  Adjust an example.
	* doc/tm.texi: Regenerate.
	* doc/tm.texi.in: Remove CC0.
	* emit-rtl.c: Remove CC0.
	* final.c: Remove CC0.
	* fwprop.c: Remove CC0.
	* gcse-common.c: Remove CC0.
	* gcse.c: Remove CC0.
	* genattrtab.c: Remove CC0.
	* genconfig.c: Remove CC0.
	* genemit.c: Remove CC0.
	* genextract.c: Remove CC0.
	* gengenrtl.c: Remove CC0.
	* genrecog.c: Remove CC0.
	* haifa-sched.c: Remove CC0.
	* ifcvt.c: Remove CC0.
	* ira-costs.c: Remove CC0.
	* ira.c: Remove CC0.
	* jump.c: Remove CC0.
	* loop-invariant.c: Remove CC0.
	* lra-constraints.c: Remove CC0.
	* lra-eliminations.c: Remove CC0.
	* optabs.c: Remove CC0.
	* postreload-gcse.c: Remove CC0.
	* postreload.c: Remove CC0.
	* print-rtl.c: Remove CC0.
	* read-rtl-function.c: Remove CC0.
	* reg-notes.def: Remove CC0.
	* reg-stack.c: Remove CC0.
	* reginfo.c: Remove CC0.
	* regrename.c: Remove CC0.
	* reload.c: Remove CC0.
	* reload1.c: Remove CC0.
	* reorg.c: Remove CC0.
	* resource.c: Remove CC0.
	* rtl.c: Remove CC0.
	* rtl.def: Remove CC0.
	* rtl.h: Remove CC0.
	* rtlanal.c: Remove CC0.
	* sched-deps.c: Remove CC0.
	* sched-rgn.c: Remove CC0.
	* shrink-wrap.c: Remove CC0.
	* simplify-rtx.c: Remove CC0.
	* system.h: Remove CC0.  Poison NOTICE_UPDATE_CC, CC_STATUS_MDEP_INIT,
	CC_STATUS_MDEP, and CC_STATUS.
	* target.def: Remove CC0.
	* valtrack.c: Remove CC0.
	* var-tracking.c: Remove CC0.
2021-05-04 13:53:50 +00:00
Richard Biener 7a38976611 tree-optimization/100414 - compute dominance info in phiopt
phiopt now has dominator queries but fails to compute dominance
info.

2021-05-04  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/100414
	* tree-ssa-phiopt.c (get_non_trapping): Do not compute dominance
	info here.
	(tree_ssa_phiopt_worker): But unconditionally here.

	* gcc.dg/pr100414.c: New testcase.
2021-05-04 15:51:05 +02:00
Tobias Burnus 1580fc7644 OpenMP: Support complex/float in && and || reduction
C/C++ permit logical AND and logical OR also with floating-point or complex
arguments by doing an unequal zero comparison; the result is an 'int' with
value one or zero.  Hence, those are also permitted as reduction variable,
even though it is not the most sensible thing to do.

gcc/c/ChangeLog:

	* c-typeck.c (c_finish_omp_clauses): Accept float + complex
	for || and && reductions.

gcc/cp/ChangeLog:

	* semantics.c (finish_omp_reduction_clause): Accept float + complex
	for || and && reductions.

gcc/ChangeLog:

	* omp-low.c (lower_rec_input_clauses, lower_reduction_clauses): Handle
	&& and || with floating-point and complex arguments.

gcc/testsuite/ChangeLog:

	* gcc.dg/gomp/clause-1.c: Use 'reduction(&:..)' instead of '...(&&:..)'.

libgomp/ChangeLog:

	* testsuite/libgomp.c-c++-common/reduction-1.c: New test.
	* testsuite/libgomp.c-c++-common/reduction-2.c: New test.
	* testsuite/libgomp.c-c++-common/reduction-3.c: New test.
2021-05-04 14:42:26 +02:00
Nick Clifton 9174343256 Replace AC_PROG_CC with AC_PROG_CC_C99 in top level configure file.
2021-05-04  Nick Clifton  <nickc@redhat.com>

	* configure.ac (AC_PROG_CC): Replace with AC_PROG_CC_C99.
	* configure: Regenerate.
2021-05-04 13:39:04 +01:00
Jonathan Wakely af5b2b911d libstdc++: Do not use deduced return type for std::visit [PR 100384]
This avoids errors outside the immediate context when std::visit is an
overload candidate because of ADL, but not actually viable.

The solution is to give std::visit a non-deduced return type. New
helpers are introduced for that, and existing ones refactored slightly.

libstdc++-v3/ChangeLog:

	PR libstdc++/100384
	* include/std/variant (__get_t): New alias template yielding the
	return type of std::get<N> on a variant.
	(__visit_result_t): New alias template yielding the result of
	std::visit.
	(__same_types): Move into namespace __detail::__variant.
	(__check_visitor_results): Likewise. Use __invoke_result_t and
	__get_t.
	(__check_visitor_result): Remove.
	(visit): Use __visit_result_t for return type.
	* testsuite/20_util/variant/100384.cc: New test.
2021-05-04 12:16:46 +01:00
Jonathan Wakely ad0a3be4df libstdc++: Remove _GLIBCXX_USE_INT128 autoconf macro
We don't need to decide whether to use __int128 when running configure,
we can do so at compilation time by seeing if __SIZEOF_INT128__ is
defined and if it's greater than __SIZEOF_LONG_LONG__.

This removes another unnecessary architecture-specific config macro in
<bits/c++config.h>, so the same header can work for 32-bit or 64-bit
compilation on AIX.

libstdc++-v3/ChangeLog:

	* acinclude.m4 (GLIBCXX_ENABLE_INT128_FLOAT128): Remove
	checks for __int128 and rename to GLIBCXX_ENABLE_FLOAT128.
	* config.h.in: Regenerate.
	* configure: Regenerate.
	* configure.ac: Adjust to use GLIBCXX_ENABLE_FLOAT128.
	* include/bits/random.h (_Select_uint_least_t<s, 1>):
	Use __SIZEOF_INT128__ to decide whether to use __int128.
	* include/std/charconv (__to_chars_unsigned_type): Likewise.
2021-05-04 12:07:09 +01:00
Eric Botcazou 93f8cb4965 Reuse non-gimple_reg variable for inlining
When a call to a function is inlined and takes a parameter whose type is not
gimple_reg, a local variable is created in the caller to hold a copy of the
argument passed in the call with the following comment:

      /* We may produce non-gimple trees by adding NOPs or introduce
         invalid sharing when operand is not really constant.
         It is not big deal to prohibit constant propagation here as
         we will constant propagate in DOM1 pass anyway.  *

Of course the second sentence of the comment does not apply to non-gimple_reg
values, unless they get SRAed later, because we don't do constant propagation
for them.  This for example prevents two identical calls to a pure function
from being merged in the attached Ada testcase.

Therefore the attached patch attempts to reuse a read-only or non-addressable
local DECL of the caller, the hitch being that expand_call_inline needs to be
prevented from creating a CLOBBER for the case where it ends uo being reused.

gcc/
	* tree-inline.c (insert_debug_decl_map): Delete.
	(copy_debug_stmt): Minor tweak.
	(setup_one_parameter): Do not use a variable if the value is either
	a read-only DECL or a non-addressable local variable in the caller.
	In this case, insert the debug-only variable in the map manually.
	(expand_call_inline): Do not generate a CLOBBER for these values.
	* tree-inline.h (debug_map): Minor tweak.
2021-05-04 12:54:13 +02:00
Eric Botcazou f418bc3cd1 Fix libiberty link failures in LTO mode for MinGW
The test for the presence of variables (really symbols) does not work
when you add -Ox -flto to CFLAGS:

  for v in $vars; do
    AC_MSG_CHECKING([for $v])
    AC_CACHE_VAL(libiberty_cv_var_$v,
      [AC_LINK_IFELSE([AC_LANG_PROGRAM([[int *p;]],[[extern int $v [];
                                         p = $v;]])],
                      [eval "libiberty_cv_var_$v=yes"],
                      [eval "libiberty_cv_var_$v=no"])])
    if eval "test \"`echo '$libiberty_cv_var_'$v`\" = yes"; then
      AC_MSG_RESULT(yes)
      AC_DEFINE_UNQUOTED($n)
    else
      AC_MSG_RESULT(no)
    fi
  done

because the assignment to 'p' is optimized away by LTO.  This is visible
on MinGW platforms in the form of a link failure for sys_siglist.

There is another link failures for stpcpy: the symbol is both referenced
by libiberty's pex-win32.c and provided by libiberty's stpcpy.c, so it
needs to have a linkage to be resolved in LTO mode.

libiberty/
	* configure.ac: Make test for variables more robust.
	* configure: Regenerate.
gcc/
	* builtins.c (builtin_with_linkage_p): Return true for stp[n]cpy.
	* symtab.c (symtab_node::output_to_lto_symbol_table_p): Tidy up.
2021-05-04 12:53:21 +02:00
Richard Biener 1b0f570009 Restrict gcc.dg/tree-ssa/ssa-dse-26.c
This restricts the testcase to the target where it exposes the
situation fixed with g:e9d297a15d68121ba5bdd5a76ea71c1916180622
which targets BIT_FIELD_REFs created by fold_truth_andor.

This avoids strange dejagnu limits with overly long target lists
and simplifies the tests.

2021-05-04  Richard Biener  <rguenther@suse.de>

	* gcc.dg/tree-ssa/ssa-dse-26.c: Skip on !lp64 targets,
	simplify dump scanning down to one case.
2021-05-04 12:32:17 +02:00
Richard Biener a310bb73ed tree-optimization/100329 - avoid reassociating asm goto defs
This avoids reassociating asm goto defs because we have no idea
on which outgoing edge to insert defs.

2021-05-04  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/100329
	* tree-ssa-reassoc.c (can_reassociate_p): Do not reassociate
	asm goto defs.
	(insert_stmt_after): Assert we're not running into asm goto.

	* gcc.dg/torture/pr100329.c: New testcase.
2021-05-04 12:31:50 +02:00
Richard Biener 2326627eb1 tree-optimization/100398 - avoid DSE of control flow stmt
The following makes sure to preserve control altering stmts
when removing trivially dead stmts in DSE.

2021-05-04  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/100398
	* tree-ssa-dse.c (pass_dse::execute): Preserve control
	altering stmts.

	* gcc.dg/torture/pr100398.c: New testcase.
2021-05-04 12:31:50 +02:00
Piotr Trojanek 00d8545d70 [Ada] Remove arbitrary and redundant qualification with Sinfo
gcc/ada/

	* pprint.adb: Remove qualification of arbitrary calls to
	Sinfo.Expressions and Sinfo.Parameter_Associations.
2021-05-04 05:17:36 -04:00
Piotr Trojanek 2ae4fcfa87 [Ada] Use function and not procedure UI_Image in pretty-printing
gcc/ada/

	* pprint.adb (Expr_Name): Simplify with functional variant of
	UI_Image.
2021-05-04 05:17:35 -04:00
Piotr Trojanek 8ee1a28114 [Ada] Reuse existing To_Mixed routine in pretty-printer
gcc/ada/

	* pprint.adb (To_Mixed): Removed.
2021-05-04 05:17:35 -04:00
Piotr Trojanek 6c1655399b [Ada] Refine type of a counter variable from Integer to Natural
gcc/ada/

	* pprint.adb (List_Name_Count): Change type from Integer to
	Natural.
2021-05-04 05:17:35 -04:00
Yannick Moy e243bf2349 [Ada] Minor tweak in pretty-printing of expressions
gcc/ada/

	* pprint.adb (Expression_Image): Special case for
	expression-with-actions.
2021-05-04 05:17:35 -04:00
Bob Duff 9b6a2de07d [Ada] Do not "optimize" by converting Positive to Unsigned
gcc/ada/

	* exp_ch4.adb (Expand_Concatenate): Remove the non-optimization.
2021-05-04 05:17:34 -04:00
Piotr Trojanek d20bab53d0 [Ada] Reuse First_Formal for generic subprograms
gcc/ada/

	* lib-xref.adb (Generate_Reference_To_Formals): Remove dedicated
	branch for generic subprograms (they are now handled together
	with non-generic subprograms in the ELSE branch); replace a
	low-level Ekind membership test with a high-level call to
	Is_Access_Subprogram_Type.
2021-05-04 05:17:34 -04:00
Piotr Trojanek 86203b44de [Ada] Fix inconsistent iteration with First_Formal and Next_Entity
gcc/ada/

	* sem_ch12.adb (Check_Abstract_Primitives): Match First_Formal
	with Next_Formal.
	* sem_ch6.adb (Is_Non_Overriding_Operation): Likewise.
2021-05-04 05:17:34 -04:00
Piotr Trojanek 5a3070dff1 [Ada] Simplify iteration over formal parameters for Global/Depends check
gcc/ada/

	* sem_prag.adb (Collect_Global_Item): Iterate directly over
	formals.
2021-05-04 05:17:34 -04:00
Piotr Trojanek 7f9f8889fe [Ada] Fix handling of access-to-variable objects in Global and Depends
gcc/ada/

	* sem_prag.ads (Collect_Subprogram_Inputs_Outputs): Update
	comment; this routine is no longer used by GNATprove.
	* sem_prag.adb (Find_Role): The IN parameter is on output only
	when it belongs to non-function; also, the otherwise constant
	object can only be written by a non-function.
	(Collect_Global_Item): The IN parameter can only be written when
	it belongs to non-function; also, unnest this check to make it
	easier to read.
2021-05-04 05:17:33 -04:00
Arnaud Charlet 7367cd5949 [Ada] Assert_Failure vs Assertion_Error
gcc/ada/

	* libgnat/s-assert.ads (Assert_Failure): Now a renaming of
	Assertion_Error.
	* libgnat/a-assert.ads (Assertion_Error): Now a first class
	citizen.  Remove dependency on System.Assertions.
	* gcc-interface/a-assert.ads, gcc-interface/a-assert.adb: New.
	* gcc-interface/Make-lang.in (GNAT_ADA_OBJS, GNATBIND_OBJS): Add
	a-assert.o from gcc-interface.
2021-05-04 05:17:33 -04:00
Yannick Moy 716e7c15ab [Ada] Move match function for pragma Warnings to public spec
gcc/ada/

	* erroutc.adb (Matches): Move spec...
	* erroutc.ads (Matches): ...here.
2021-05-04 05:17:33 -04:00
Yannick Moy f5a7c656e5 [Ada] Use error marker for messages in GNATprove mode
gcc/ada/

	* gnat1drv.adb (Adjust_Global_Switches): Force error marker in
	GNATprove mode.
2021-05-04 05:17:32 -04:00
Bob Duff 0964be0713 [Ada] Clean up ??? marks
gcc/ada/

	* binde.adb: No need for ??? marks in Binde, because it is
	superseded by Bindo.
	* bindo-writers.adb (Write_Unit_Closure): Verified that -Ra
	works.
	* exp_ch4.adb, sinfo.ads (Expand_N_Type_Conversion): Rules for
	conversions passed to gigi are documented in sinfo.ads.
	(Expand_N_Unchecked_Type_Conversion): Comment is a duplicate of
	one in sinfo.ads.
	(Expand_N_In): Robert already added sufficient comments years
	after the ??? comment was inserted.
	(Expand_Membership_Minimize_Eliminate_Overflow): I don't see any
	reason why Stand should export Long_Long_Integer'Base -- it
	doesn't export any other base types.
	(Size_In_Storage_Elements): We are doing an allocator, so we
	don't care about sizes in bits.
	(Expand_N_Allocator): PolyORB isn't going to be significantly
	improved, so we're not going to mess with remote access to
	class-wide types.
	(Optimize_Return_Stmt): It's not important to optimize return
	statements in predicate functions -- there are many
	more-important optimizations we could do. Keep part of the
	comment without "???", to clarify why the "and then ...".
	(User_Defined_Primitive_Equality_Op): The optimization doesn't
	seem important enough.
	(Expand_N_Unchecked_Type_Conversion): Refactor to use
	Expand_N_Unchecked_Expression.
	(Make_Array_Comparison_Op): This seems like a case of "it it's
	not broken, don't fix it". Too much risk of causing bugs.
	* debug_a.adb: Remove ??? comments asking why Current_Error_Node
	is maintained unconditionally, and add a comment explaining why.
	* errout.adb: These kinds of minor bugs do indeed exist, but
	we're never going to get around to fixing them "properly", so we
	need this code for robustness.
	* gnatchop.adb (Read_File): Document when read can fail.
	* gnatdll.adb (Parse_Command_Line): Nobody is complaining about
	these arbitrary limits, so no need to use Table. Increase the
	limits just in case.  It is clear from the names what they are
	limits on.
	* gnatlink.adb: Add needed comments.
	(Delete): An existing comment makes clear it's intentional, and
	it's been like that since 1996.
	(Process_Args): Improve comments.
	(Search_Library_Path): Refactoring to avoid deep nesting.
	* inline.adb (Build_Body_To_Inline): Probably won't get around
	to doing that optimization.
	(Is_Unit_Subprogram): No, this should not be moved to Sem_Aux,
	because it is too specialized to this context.
	(Do_Reset): No comment is needed here; it's clear from the
	comment on Reset_Dispatching_Calls. Do_Reset is an artificial
	subprogram; if we had proper iterators, it would just be an if
	statement in the loop.
	(Rewrite_Function_Call): Probably won't get around to doing that
	optimization.
	* layout.adb (Layout_Type): The gigi comment doesn't need to be
	a ??? comment, and it's been that way since 2000.  The
	limitation to scalars will likely never be investigated, and
	it's been that way since 2009.
	* lib.adb (Check_Same_Extended_Unit): This doesn't look like
	something that needs fixing; it looks like a permanent
	workaround.
	* lib-load.adb (Change_Main_Unit_To_Spec): It is good enough in
	practice.
	(Load_Unit): Nobody will ever get around to investigating the
	obscure PMES oddity, and the optimization is not worth the
	trouble.
	* live.adb: It's not worth documenting this. It is used only
	with a debug switch. Nobody who has done significant work on it
	is still around, so it would require substantial investigation.
	* mdll.ads: I see no reason for USE.
	* namet.ads: Routines are obsolete, but they're not going
	anywhere anytime soon (too much work, and surprisingly delicate
	because of dependences on global variables).
	* osint.ads: Minor.
	* osint.adb: Improve comments.
	(Full_Lib_File_Name): Use Smart_Find_File.
2021-05-04 05:17:32 -04:00
Piotr Trojanek 86a9605014 [Ada] Reuse Is_Formal_Object where convenient
gcc/ada/

	* exp_prag.adb, sem_prag.adb: Replace low-level Ekind membership
	tests with a high-level call to Is_Formal_Object.
2021-05-04 05:17:32 -04:00
Arnaud Charlet 2d5e5d89ad [Ada] Address some ??? comments
gcc/ada/

	* cstand.adb, sprint.adb, switch-c.adb, xr_tabls.ads,
	xr_tabls.adb, xref_lib.adb: Address ??? comments.
2021-05-04 05:17:32 -04:00
Piotr Trojanek 0a272ac33f [Ada] Reject constants of access-to-variable type as function globals
gcc/ada/

	* sem_prag.adb (Analyze_Global_Item): Take subprogram kind into
	account when accepting or rejecting a constant of an
	access-to-variable type as a global Output/In_Out; do this check
	inside an ELSIF branch to avoid unnecessary evaluation of the
	subsequent condition.
2021-05-04 05:17:31 -04:00
Piotr Trojanek 43758c2cff [Ada] Simplify use of a global name buffer for Global/Depends errors
gcc/ada/

	* sem_prag.adb (Role_Error, Usage_Error): Replace calls to
	Name_Find and Get_Name_String with a call to To_String.
2021-05-04 05:17:31 -04:00
Ed Schonberg 13112239f8 [Ada] Ongoing work for AI12-0212: container aggregates
gcc/ada/

	* exp_aggr.adb (Build_Siz_Exp): new function, subsidiary of
	Expand_Container_Aggregate, to create an expression to be used
	in the dynamic allocation of a container with a single container
	element association.
	(Add_Range): Handle static bounds of ranges over enumerations.
	(Expand_Container_Aggregate): Add declaration for size
	expression when needed, and use it in container object
	declaration for container.
2021-05-04 05:17:31 -04:00
Arnaud Charlet 213c9dc78e [Ada] Missing finalization on generic instantiation
gcc/ada/

	* exp_ch7.adb (Build_Finalizer_Helper.New_Finalizer_Name):
	Unnest so that it can be reused.
	(Build_Finalizer_Helper.Process_Declarations): Call the
	xxx__finalize_body procedure of a package instantiation in case
	it contains finalization statements.  Code clean ups.
	(Build_Finalizer_Helper.Create_Finalizer): Export and set an
	Interface_Name for library level finalizers since these may be
	imported now.
	(Build_Finalizer_Helper): Need to process library level package
	body instantiations which may contain objects requiring
	finalization.
	* libgnat/s-finmas.ads: Fix typo.
2021-05-04 05:17:31 -04:00
Arnaud Charlet 869a06d981 [Ada] Address some ??? comments in checks.adb
gcc/ada/

	* checks.adb (Append_Range_Checks, Apply_Selected_Length_Checks,
	Determine_Range, Insert_Range_Checks,
	Install_Null_Excluding_Check, Selected_Length_Checks,
	Selected_Range_Checks): Address ??? comments and code cleanups.
2021-05-04 05:17:30 -04:00
Piotr Trojanek c356dfdd6f [Ada] Reject formals of mode IN appearing as global outputs
gcc/ada/

	* sem_prag.adb (Check_Mode_Restriction_In_Enclosing_Context):
	Apply the rule even with no explicit Global contract (and remove
	a dead condition for Refined_Global).
2021-05-04 05:17:30 -04:00
Piotr Trojanek 98a54aa504 [Ada] Check entries for formals of mode IN appearing as global outputs
gcc/ada/

	* sem_prag.adb (Check_Mode_Restriction_In_Enclosing_Context):
	Extend check to protected entries.
2021-05-04 05:17:30 -04:00
Piotr Trojanek 6aca8cf819 [Ada] Fix reference to SPARK RM rule in comment
gcc/ada/

	* sem_prag.adb (Check_Mode_Restriction_In_Enclosing_Context):
	Fix reference to SPARK RM rule number.
2021-05-04 05:17:30 -04:00
Eric Botcazou c63bb4f3aa [Ada] Preliminary cleanup in floating-point output implementation
gcc/ada/

	* exp_intr.adb: Remove with/use clauses for Urealp.
	(Expand_Is_Negative): Delete.
	(Expand_Intrinsic_Call): Do not call it.
	* rtsfind.ads (RE_Id): Remove RE_Float_Unsigned.
	(RE_Unit_Table): Remove entry for RE_Float_Unsigned.
	* snames.ads-tmpl (Name_Is_Negative): Delete.
	* libgnat/s-imgrea.ads (Set_Image_Real): Fix mode of S parameter.
	* libgnat/s-imgrea.adb: Add with/use clauses for System.Img_Util.
	(LLU): New subtype.
	(Maxdigs): Use it.
	(Is_Negative): Reimplement.
	(Image_Floating_Point): Simplify.
	(Set_Image_Real): Fix mode of S parameter.  Remove the low-level
	processing on characters.  Flip the sign of the Scale variable.
	Compute the maximum number of digits for the straight notation.
	Call Set_Decimal_Digits at the end to do the final formatting.
	* libgnat/s-imguti.ads (Floating_Invalid_Value): New type.
	(Set_Floating_Invalid_Value): New procedure.
	* libgnat/s-imguti.adb (Set_Floating_Invalid_Value): Implement it
	based on existing code from Set_Image_Real.
	* libgnat/s-unstyp.ads (Float_Unsigned): Delete.
2021-05-04 05:17:29 -04:00
Piotr Trojanek d4b0a29469 [Ada] Fix inconsistent handling of character set control switches
gcc/ada/

	* csets.adb (Initialize): Refactor into CASE statement; raise
	exception on unsupported code of character set (it will be
	gently rejected earlier when scanning command line switches).
	* switch-b.adb (Scan_Binder_Switches): Refactor into a
	membership expression; add missing '9' choice; reorder as
	described by GNAT UG, section 4.3.11.
	* switch-c.adb (Scan_Front_End_Switches): Refactor into a
	membership expression and reorder as above.
	* doc/gnat_ugn/building_executable_programs_with_gnat.rst
	(gnatic): Mention '5' as an allowed value for "c".
	* gnat_ugn.texi: Regenerate.
2021-05-04 05:17:29 -04:00
Piotr Trojanek b65d9aff59 [Ada] Guard against leading and trailing spaces reappearing in errors
gcc/ada/

	* errout.adb (Error_Msg_Internal): Add assertion to prevent
	style mistakes reappearing in the future.
2021-05-04 05:17:29 -04:00
Javier Miranda 6d326562ff [Ada] Wrong membership test computation for interface type
gcc/ada/

	* exp_ch4.adb (Tagged_Membership): Remove wrong condition that
	is not consistent with the documentation of this subprogram.
2021-05-04 05:17:28 -04:00