Commit Graph

165060 Commits

Author SHA1 Message Date
Richard Biener
ef0519fd4f re PR tree-optimization/87917 (ICE in initialize_matrix_A at gcc/tree-data-ref.c:3150)
2018-11-15  Richard Biener  <rguenther@suse.de>

	PR middle-end/87917
	* tree-data-ref.c (analyze_miv_subscript): Guard calls to
	analyze_subscript_affine_affine properly.

	* gcc.dg/tree-ssa/pr87917.c: New testcase.

From-SVN: r266173
2018-11-15 08:16:22 +00:00
Xianmiao Qu
2820937241 csky-linux-elf.h (LINUX_DYNAMIC_LINKER): Remove.
2018-11-15  Xianmiao Qu  <xianmiao_qu@c-sky.com>

	gcc/
	* config/csky/csky-linux-elf.h (LINUX_DYNAMIC_LINKER): Remove.
	(GLIBC_DYNAMIC_LINKER): Define.
	(LINUX_TARGET_LINK_SPEC): Update the dynamic linker's name.

	libgcc/
	* config/csky/linux-unwind.h: Fix coding style.

From-SVN: r266172
2018-11-15 06:01:09 +00:00
Bin Cheng
a81e2c6240 re PR tree-optimization/84648 (Missed optimization : loop not removed.)
PR tree-optimization/84648
	* tree-ssa-loop-niter.c (adjust_cond_for_loop_until_wrap): New.
	(number_of_iterations_cond): Adjust exit cond for loop-until-wrap case
	by calling adjust_cond_for_loop_until_wrap.

	gcc/testsuite
	* gcc.dg/tree-ssa/pr84648.c: New test.
	* gcc.dg/pr68317.c: Add warning check on overflow.

From-SVN: r266171
2018-11-15 03:44:49 +00:00
Sandra Loosemore
d8fdf280ab re PR other/56334 (__attribute__((aligned)) documentation is misleading)
2018-11-15  Sandra Loosemore  <sandra@codesourcery.com>

	PR other/56334

	gcc/
	* doc/extend.texi (Common Function Attributes): Clarify linker
	restrictions on "aligned" attribute.
	(Common Variable Attributes): Likewise.  Mention that linker
	restrictions don't apply to stack-allocated variables.

From-SVN: r266170
2018-11-14 21:55:26 -05:00
Joern Rennecke
4822d9cb75 gensupport.c (add_predicate_code): Properly handle ZERO_EXTRACT as an lvalue.
* gensupport.c (add_predicate_code): Properly handle ZERO_EXTRACT
        as an lvalue.

From-SVN: r266169
2018-11-15 01:02:09 +00:00
Sandra Loosemore
ef0336dc69 re PR lto/55102 (The options -flto and -On do not behave as described in GCC docs)
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
2018-11-14 19:41:10 -05:00
GCC Administrator
97eb702c67 Daily bump.
From-SVN: r266167
2018-11-15 00:16:20 +00:00
Jonathan Wakely
a15032ee7b Optimize pool resource allocation
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-15 00:04:19 +00:00
Jonathan Wakely
aeb2b1f7fb Fix test that does undefined shifts greater than width of size_t
* testsuite/20_util/unsynchronized_pool_resource/allocate.cc: Fix
	test for 32-bit targets. Test additional allocation sizes.

From-SVN: r266163
2018-11-15 00:04:12 +00:00
Sandra Loosemore
ded7b411a8 re PR middle-end/59658 (Document -f* flags enabled by -Og)
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
2018-11-14 15:05:13 -05:00
Uros Bizjak
281d448d0c i386.c (ix86_print_operand_address_as): Simplify printing of the names of segment registers.
* config/i386/i386.c (ix86_print_operand_address_as): Simplify
	printing of the names of segment registers.

From-SVN: r266161
2018-11-14 20:47:28 +01:00
Nathan Sidwell
89d9bf4496 [debug/88006] -fdebug-types-section gives undefined ref
https://gcc.gnu.org/ml/gcc-patches/2018-11/msg01280.html
	PR debug/88006
	PR debug/87462
	* dwarf2out.c (dwarf2out_finish): Apply resolve_addr to comdat
	type list.

	* g++.dg/debug/dwarf2/pr87462.C: New.
	* g++.dg/debug/dwarf2/pr88006.C: New.

From-SVN: r266158
2018-11-14 19:30:47 +00:00
David Malcolm
1ded030b85 Add missing ZLIBINC to CFLAGS-optinfo-emit-json.o
gcc/ChangeLog:
	* Makefile.in (CFLAGS-optinfo-emit-json.o): Add $(ZLIBINC).

From-SVN: r266156
2018-11-14 19:02:05 +00:00
Paolo Carlini
03f3f0f21a parser.c (make_id_declarator): Add location_t parameter.
/cp
2018-11-14  Paolo Carlini  <paolo.carlini@oracle.com>

	* parser.c (make_id_declarator): Add location_t parameter.
	(cp_parser_lambda_declarator_opt): Adjust call.
	(cp_parser_decomposition_declaration): Likewise.
	(cp_parser_alias_declaration): Likewise.
	(cp_parser_direct_declarator): Likewise.
	(cp_parser_member_declaration): Likewise.
	(cp_parser_objc_class_ivars): Likewise.
	* decl.c (grokdeclarator): Use declarator->id_loc in two error
	messages.

/testsuite
2018-11-14  Paolo Carlini  <paolo.carlini@oracle.com>

	* g++.dg/cpp0x/nsdmi-union6.C: Test locations too.
	* g++.dg/cpp0x/nsdmi6.C: Likewise.
	* g++.dg/ext/flexary4.C: Likewise.
	* g++.dg/ext/flexary9.C: Likewise.
	* g++.dg/other/incomplete2.C: Likewise.
	* g++.dg/parse/friend12.C: Likewise.

From-SVN: r266155
2018-11-14 17:50:25 +00:00
Rainer Orth
357044d275 Handle libphobos in contrib/gcc_update
* gcc_update (files_and_dependencies): Handle libphobos.

From-SVN: r266154
2018-11-14 17:09:09 +00:00
Jakub Jelinek
8ee099430b P1236R1 - Signed integers are two's complement
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
2018-11-14 17:46:06 +01:00
Jakub Jelinek
12763abc53 re PR bootstrap/86739 (Bootstrap broken with host GCC 4.1.2)
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
2018-11-14 17:43:38 +01:00
Jeff Law
c933b89353 optabs.c (expand_binop): Pass INT_MODE to operand_subword_force iff the operand is a constant.
* 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
2018-11-14 09:36:19 -07:00
Aldy Hernandez
ff361cc65f * gimple-ssa-evrp-analyze.c
(evrp_range_analyzer::record_ranges_from_incoming_edge): Rename
	ignore_equivs_equal_p to equal_p.
	* ipa-cp.c (meet_with_1): Use equal_p instead of
	ignore_equivs_equal_p.
	* ipa-prop.c (ipa_vr_ggc_hash_traits::equal): Same.
	* tree-vrp.c (value_range::ignore_equivs_equal_p): Remove.
	(value_range::operator==): Remove.
	(value_range::operator!=): Remove.
	(vrp_prop::visit_stmt): Use equal_p.
	* tree-vrp.h (value_range): Remove operator==, operator!=,
	ignore_equivs_equal_p.
	* vr-values.c (update_value_range): Use equal_p.

From-SVN: r266150
2018-11-14 16:29:41 +00:00
Michael Matz
62ec3fe8f1 Add comment
From-SVN: r266149
2018-11-14 16:02:03 +00:00
Michael Matz
725891a0a4 re PR middle-end/86575 (-Wimplicit-fallthrough affects code generation)
Fix PR middle-end/86575

	PR middle-end/86575
	* gimplify.c (collect_fallthrough_labels): Add new argument,
	return location via that, don't modify statements.
	(warn_implicit_fallthrough_r): Adjust call, don't use
	statement location directly.

From-SVN: r266148
2018-11-14 15:43:54 +00:00
Richard Biener
e81d464caf re PR tree-optimization/87985 (Compile-time and memory hog w/ -O1 -ftree-slp-vectorize)
2018-11-14  Richard Biener  <rguenther@suse.de>

	PR middle-end/87985
	* tree-data-ref.c (split_constant_offset): Add wrapper
	allocating a cache hash-map.
	(split_constant_offset_1): Cache results of expanding
	expressions from SSA def stmts.

	* gcc.dg/pr87985.c: New testcase.

From-SVN: r266147
2018-11-14 14:33:44 +00:00
Jonathan Wakely
78ef03b7c3 Add missing dir to create_testsuite_files script
* 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
2018-11-14 14:25:00 +00:00
Ilya Leoshkevich
487a4df632 [PATCH 2/2] S/390: Fix expectation in mrecord-mcount test for 31-bit
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
2018-11-14 13:08:03 +00:00
Ilya Leoshkevich
867a1e2818 [PATCH 1/2] S/390: Disable 3 global-array-* tests for 31-bit mode
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
2018-11-14 13:07:13 +00:00
Richard Biener
9449a01ede re PR testsuite/88021 (aarch64 Busy hang running testcase pr60183.c since revision 265914)
2018-11-14  Richard Biener  <rguenther@suse.de>

	PR middle-end/88021
	* tree-data-ref.c (lambda_matrix_row_add): Change const1 argument
	to lambda_int.
	(lambda_vector_mult_const): Likewise.
	(lambda_matrix_right_hermite): Use lambda_int temporaries.

From-SVN: r266143
2018-11-14 13:07:03 +00:00
Wilco Dijkstra
5e21d7651e Simplify floating point comparisons
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
2018-11-14 12:45:29 +00:00
Jakub Jelinek
8cca0163fb re PR other/88007 (ICE in gt_ggc_m_S, at ggc-page.c:1474)
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
2018-11-14 13:38:20 +01:00
Jakub Jelinek
5bfba2b58d re PR rtl-optimization/87817 (gcc.target/i386/bmi2-bzhi-2.c execution test)
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
2018-11-14 13:36:59 +01:00
Wilco Dijkstra
ff4d848040 [AArch64] Fix PR62178 testcase failures
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
2018-11-14 12:35:36 +00:00
Iain Sandoe
b258173580 fix Darwin bootstrap.
gcc/

	* tree-vect-data-refs.c (vect_can_force_dr_alignment_p): Cast
	MAX_OFILE_ALIGNMENT as needed.

From-SVN: r266138
2018-11-14 12:34:27 +00:00
Ed Schonberg
076bbec1c8 [Ada] Problem with boundary case of XOR operation and unnesting
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
2018-11-14 11:42:49 +00:00
Patrick Bernardi
9989a43983 [Ada] Update signal constants for GNU/Linux
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
2018-11-14 11:42:43 +00:00
Eric Botcazou
f1e2bf6571 [Ada] Fix small regression with others choice in array aggregate
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 11:42:37 +00:00
Olivier Hainque
934d473689 [Ada] sigtramp-vxworks: Add a rule for sp (DWARF r31) on AArch64
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
2018-11-14 11:42:32 +00:00
Eric Botcazou
64a87aa5db [Ada] Remove couple of recently added dead tests
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
2018-11-14 11:42:26 +00:00
Hristian Kirtchev
a2c54c9514 [Ada] Spurious error on Ghost null procedure
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
2018-11-14 11:42:21 +00:00
Eric Botcazou
b5f581cdbb [Ada] More complete information level for -gnatR output
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
2018-11-14 11:42:16 +00:00
Javier Miranda
4faf522bac [Ada] Crash on interface equality covered by a renaming declaration
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
2018-11-14 11:42:10 +00:00
Hristian Kirtchev
b6eb7548cf [Ada] Use of Suppress_Initialization with pragma Thread_Local_Storage
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
2018-11-14 11:42:05 +00:00
Ed Schonberg
1fc75ecf62 [Ada] Missing constraint check on if-expression returning a string
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
2018-11-14 11:41:58 +00:00
Eric Botcazou
bfb1147ca8 [Ada] Fix assertion failure on pragma Compile_Time_Error in generic unit
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
2018-11-14 11:41:53 +00:00
Justin Squirek
b7c34dff67 [Ada] Crash on use of generic formal package
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
2018-11-14 11:41:46 +00:00
Ed Schonberg
41a59f6b14 [Ada] Compiler crash on decl. with limited aggregate and address clause
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
2018-11-14 11:41:41 +00:00
Bob Duff
1e3c434fa0 [Ada] System'To_Address not always static
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
2018-11-14 11:41:36 +00:00
Ed Schonberg
43018f5892 [Ada] Enhance constraints propagation to ease the work of optimizers
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
2018-11-14 11:41:30 +00:00
Hristian Kirtchev
c786216724 [Ada] Minor reformatting
2018-11-14  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

	* back_end.adb, checks.adb, exp_ch3.adb, exp_ch4.adb,
	exp_ch7.adb, exp_disp.adb, exp_unst.adb, exp_util.adb,
	freeze.adb, sem_ch13.adb, sem_ch6.adb, sem_ch7.adb,
	sem_prag.adb, sem_spark.adb, sem_util.adb: Minor reformatting.

From-SVN: r266122
2018-11-14 11:41:25 +00:00
Hristian Kirtchev
0715a2a8d2 [Ada] Renamed equality leads to spurious errors
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
2018-11-14 11:41:20 +00:00
Hristian Kirtchev
b3b3ada9a0 [Ada] Crash on ignored Ghost assignment
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
2018-11-14 11:41:14 +00:00
Justin Squirek
7f0f5de190 [Ada] Visibility error on used enumerated type
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
2018-11-14 11:41:09 +00:00