Commit Graph

173644 Commits

Author SHA1 Message Date
Bob Duff
af552cd02f [Ada] Wrong error on hidden must-override primitive
2019-12-18  Bob Duff  <duff@adacore.com>

gcc/ada/

	* sem_ch3.adb (Derive_Subprogram): Do not set the
	Requires_Overriding flag in the above-mentioned case.

From-SVN: r279505
2019-12-18 07:14:13 +00:00
Bob Duff
4f691cb20d [Ada] Bad "already use-visible" warning re: use in private part
2019-12-18  Bob Duff  <duff@adacore.com>

gcc/ada/

	* sem_ch8.adb (Note_Redundant_Use): It was already checking for
	a use clause in the visible part of the child. Add an additional
	check for a use clause in the context clause of the child.

From-SVN: r279504
2019-12-18 07:14:07 +00:00
GCC Administrator
63fdce8543 Daily bump.
From-SVN: r279483
2019-12-18 00:16:49 +00:00
Martin Sebor
e8f1ade269 PR c++/61339 - add warning for mismatch between struct and class
gcc/c-family/ChangeLog:

	PR c++/61339
	* c.opt (-Wmismatched-tags, -Wredundant-tags): New options.

gcc/cp/ChangeLog:

	PR c++/61339
	* parser.c (cp_parser_maybe_warn_enum_key): New function.
	(class_decl_loc_t): New class.
	(cp_parser_elaborated_type_specifier): Call
	cp_parser_maybe_warn_enum_key.
	(cp_parser_class_head): Call cp_parser_check_class_key.
	(cp_parser_check_class_key): Add arguments.  Call class_decl_loc_t::add.
	(c_parse_file): Call class_decl_loc_t::diag_mismatched_tags.

gcc/testsuite/ChangeLog:

	PR c++/61339
	* g++.dg/warn/Wmismatched-tags.C: New test.
	* g++.dg/warn/Wredundant-tags.C: New test.
	* g++.dg/pch/Wmismatched-tags.C: New test.
	* g++.dg/pch/Wmismatched-tags.Hs: New test header.

gcc/ChangeLog:

	PR c++/61339
	* doc/invoke.texi (-Wmismatched-tags, -Wredundant-tags): Document
	new C++ options.

From-SVN: r279480
2019-12-17 16:53:07 -07:00
Michael Meissner
54ba911fd1 Generate PADDI to add large constants if -mcpu=future.
2019-12-12  Michael Meissner  <meissner@linux.ibm.com>

	* config/rs6000/predicates.md (add_operand): Allow eI constants.
	* config/rs6000/rs6000.md (add<mode>3): Add alternative to
	generate PADDI for 34-bit constants if -mcpu=future.

From-SVN: r279476
2019-12-17 22:21:35 +00:00
Michael Meissner
ef759fd121 Use PLI to load up 32-bit SImode constants if -mcpu=future.
2019-12-17  Michael Meissner  <meissner@linux.ibm.com>

	* config/rs6000/rs6000.md (movsi_internal1): Add alternative to
	use PLI to load up 32-bit constants if -mcpu=future.

From-SVN: r279475
2019-12-17 22:16:40 +00:00
Michael Meissner
a50e038893 Use PLI to load up large constants if -mcpu=future.
2019-12-17  Michael Meissner  <meissner@linux.ibm.com>

	* config/rs6000/rs6000.c (num_insns_constant_gpr): Return 1 if the
	constant can be loaded with PLI if -mcpu=future.
	* config/rs6000/rs6000.md (movdi_internal64): Add alternative to
	use PLI to load up 34-bit constants if -mcpu=future.

From-SVN: r279474
2019-12-17 22:11:55 +00:00
Jason Merrill
4f05d85a22 PR c++/79592 - missing explanation of invalid constexpr.
We changed months back to use the pre-generic form for constexpr evaluation,
but explain_invalid_constexpr_fn was still using DECL_SAVED_TREE.  This
mostly works, but misses some issues due to folding.  So with this patch we
save the pre-generic form of constexpr functions even when we know they
can't produce a constant result.

	* constexpr.c (register_constexpr_fundef): Do store the body of a
	template instantiation that is not potentially constant.
	(explain_invalid_constexpr_fn): Look it up.
	(cxx_eval_call_expression): Check fundef->result.

From-SVN: r279473
2019-12-17 16:46:40 -05:00
Jason Merrill
9c7b2b0ba8 PR c++/92576 - redeclaration of variable template.
The variable templates patch way back when forgot to add handling here.  The
simplest answer seems to be recursing to the underlying declaration.

	* decl.c (redeclaration_error_message): Recurse for variable
	templates.

From-SVN: r279472
2019-12-17 16:46:11 -05:00
Jason Merrill
490a091fa7 * name-lookup.c (get_std_name_hint): Add std::byte.
From-SVN: r279471
2019-12-17 16:45:19 -05:00
Jakub Jelinek
775670d792 re PR c++/59655 (incorrect diagnostic on templatized function with lambda parameter)
PR c++/59655
	* pt.c (push_tinst_level_loc): If limit_bad_template_recursion,
	set TREE_NO_WARNING on tldcl.
	* decl2.c (no_linkage_error): Treat templates with TREE_NO_WARNING
	as defined during error recovery.

	* g++.dg/cpp0x/diag3.C: New test.

From-SVN: r279470
2019-12-17 22:40:14 +01:00
Jakub Jelinek
7c32b0d5cc re PR target/92841 (Optimize -fstack-protector-strong code generation a bit)
PR target/92841
	* config/i386/i386.md (@stack_protect_set_1_<mode>,
	@stack_protect_test_1_<mode>): Use output_asm_insn.
	(*stack_protect_set_2_<mode>, *stack_protect_set_3): New define_insns
	and corresponding define_peephole2s.

	* gcc.target/i386/pr92841.c: New test.

From-SVN: r279468
2019-12-17 21:40:01 +01:00
Andrew Stubbs
7ec85098eb Revert "Fix vector testcases for amdgcn."
Apologies everyone. :-(

From-SVN: r279466
2019-12-17 16:46:27 +00:00
Andrew Stubbs
62064ec009 Fix vector testcases for amdgcn.
2019-12-17  Andrew Stubbs  <ams@codesourcery.com>

	gcc/testsuite/
	* gcc.dg/vect/pr65947-8.c: Change pass conditions for amdgcn.
	* gcc.dg/vect/vect-multitypes-11.c: Ensure that main isn't vectorized.
	* gcc.dg/vect/vect-multitypes-12.c: Likewise.

From-SVN: r279465
2019-12-17 16:37:09 +00:00
Jan Hubicka
634c5bcafa symtab.c (symtab_node::get_partitioning_class): Aliases of external symbols are external.
* symtab.c (symtab_node::get_partitioning_class): Aliases of external
	symbols are external.

From-SVN: r279464
2019-12-17 15:57:25 +00:00
Christophe Lyon
e24f6408df [ARM] Add support for -mpure-code in thumb-1 (v6m)
This patch extends support for -mpure-code to all thumb-1 processors,
by removing the need for MOVT.

Symbol addresses are built using upper8_15, upper0_7, lower8_15 and
lower0_7 relocations, and constants are built using sequences of
movs/adds and lsls instructions.

The extension of the *thumb1_movhf pattern uses always the same size
(6) although it can emit a shorter sequence when possible. This is
similar to what *arm32_movhf already does.

CASE_VECTOR_PC_RELATIVE is now false with -mpure-code, to avoid
generating invalid assembly code with differences from symbols from
two different sections (the difference cannot be computed by the
assembler).

Tests pr45701-[12].c needed a small adjustment to avoid matching
upper8_15 when looking for the r8 register.

Test no-literal-pool.c is augmented with __fp16, so it now uses
-mfp16-format=ieee.

Test thumb1-Os-mult.c generates an inline code sequence with
-mpure-code and computes the multiplication by using a sequence of
add/shift rather than using the multiply instruction, so we skip it in
presence of -mpure-code.

With -mcpu=cortex-m0, the pure-code/no-literal-pool.c fails because
code like:
static char *p = "Hello World";
char *
testchar ()
{
  return p + 4;
}

generates 2 indirections (I removed non-essential directives/code)
          .section        .rodata
	  .LC0:
	  .ascii  "Hello World\000"
	  .data
	  p:
	  .word   .LC0
	  .section        .rodata
	  .LC2:
	  .word   p
	  .section .text,"0x20000006",%progbits
	  testchar:
	  push    {r7, lr}
	  add     r7, sp, #0
	  movs    r3, #:upper8_15:#.LC2
	  lsls    r3, #8
	  adds    r3, #:upper0_7:#.LC2
	  lsls    r3, #8
	  adds    r3, #:lower8_15:#.LC2
	  lsls    r3, #8
	  adds    r3, #:lower0_7:#.LC2
	  ldr     r3, [r3]
	  ldr     r3, [r3]
	  adds    r3, r3, #4
	  movs    r0, r3
	  mov     sp, r7
	  @ sp needed
	  pop     {r7, pc}

By contrast, when using -mcpu=cortex-m4, the code looks like:
        .section        .rodata
	.LC0:
	.ascii  "Hello World\000"
	.data
	p:
	.word   .LC0
	testchar:
	push    {r7}
	add     r7, sp, #0
	movw    r3, #:lower16:p
	movt    r3, #:upper16:p
	ldr     r3, [r3]
	adds    r3, r3, #4
	mov     r0, r3
	mov     sp, r7
	pop     {r7}
	bx      lr

I haven't found yet how to make code for cortex-m0 apply upper/lower
relocations to "p" instead of .LC2. The current code looks functional,
but could be improved.

2019-10-18  Christophe Lyon  <christophe.lyon@linaro.org>

	gcc/
	* config/arm/arm-protos.h (thumb1_gen_const_int): Add new prototype.
	* config/arm/arm.c (arm_option_check_internal): Remove restriction
	on MOVT for -mpure-code.
	(thumb1_gen_const_int): New function.
	(thumb1_legitimate_address_p): Support -mpure-code.
	(thumb1_rtx_costs): Likewise.
	(thumb1_size_rtx_costs): Likewise.
	(arm_thumb1_mi_thunk): Likewise.
	* config/arm/arm.h (CASE_VECTOR_PC_RELATIVE): Likewise.
	* config/arm/thumb1.md (thumb1_movsi_symbol_ref): New.
	(*thumb1_movhf): Support -mpure-code.

	gcc/testsuite/
	* gcc.target/arm/pr45701-1.c: Adjust for -mpure-code.
	* gcc.target/arm/pr45701-2.c: Likewise.
	* gcc.target/arm/pure-code/no-literal-pool.c: Add tests for
	__fp16.
	* gcc.target/arm/pure-code/pure-code.exp: Remove thumb2 and movt
	conditions.
	* gcc.target/arm/thumb1-Os-mult.c: Skip if -mpure-code is used.

From-SVN: r279463
2019-12-17 16:43:07 +01:00
Mihail Ionescu
6226f5925f Add myself to write after approval.
2019-12-17  Mihail Ionescu  <mihail.ionescu@arm.com>

	* MAINTAINERS (write_after_approval): Add myself.

From-SVN: r279461
2019-12-17 14:19:22 +00:00
Andrew Stubbs
8354bb0ebe Add pointer to PR92772
2019-12-17  Andrew Stubbs  <ams@codesourcery.com>

	* tree-vect-loop.c (vect_create_epilog_for_reduction): Mention pr92772
	in the comments.

From-SVN: r279460
2019-12-17 13:01:36 +00:00
Andrew Stubbs
b92d1124e1 Add extract_last for amdgcn
2019-12-17  Andrew Stubbs  <ams@codesourcery.com>

	gcc/
	* config/gcn/gcn-valu.md (extract_last_<mode>): New expander.
	(fold_extract_last_<mode>): New expander.

	gcc/testsuite/
	* lib/target-supports.exp
	(check_effective_target_vect_fold_extract_last): Add amdgcn.

From-SVN: r279459
2019-12-17 13:01:25 +00:00
Andrew Stubbs
34bac26458 Add clz and ctz for amdgcn
2019-12-17  Andrew Stubbs  <ams@codesourcery.com>

	gcc/
	* config/gcn/gcn.h (CLZ_DEFINED_VALUE_AT_ZERO): Define.
	(CTZ_DEFINED_VALUE_AT_ZERO): Define.
	* config/gcn/gcn.md (s_mnemonic): Add clz and ctz.
	(expander): Likewise.
	(countzeros): New code iterator.
	(<expander>si2): New insn pattern.
	(<expander>di2): New insn pattern.

From-SVN: r279458
2019-12-17 13:01:16 +00:00
Tobias Burnus
0b8499a480 libgomp/openacc.f90 – clean-up public/private attributes
* config/accel/openacc.f90 (module openacc_kinds): Use 'PUBLIC' to mark
        all symbols as public except for the 'use …, only' imported symbol,
        which is private. 
        (module openacc): Default to 'PRIVATE' to exclude openacc_internal; mark
        all symbols from module openacc_kinds as PUBLIC
        * openacc.f90: Add comment with crossref to that file and openmp_lib.h;
        fix comment typo.
        * openacc_lib.h (acc_device_gcn): Add this PARAMETER.

From-SVN: r279456
2019-12-17 12:19:32 +01:00
Jakub Jelinek
e55cdb1455 re PR target/92962 (Documentation: x86 Options - znver2 missing RDPID and WBNOINVD)
PR target/92962
	* common/config/i386/i386-common.c (processor_alias_table): Formatting
	fixes.
	* doc/invoke.texi (bdver3, bdver4, znver1): Add missing closing paren.
	(znver2): Likewise.  Add RDPID and WBNOINVD, remove spurious comma
	before CLWB.

From-SVN: r279455
2019-12-17 10:23:59 +01:00
Hongyu Wang
da86c5af20 Add abs pattern to handle {si,di} mode abs to avoid pmax/cmove conversion.
2019-12-17  Hongyu Wang  <hongyu.wang@intel.com>

gcc/
	PR target/92651
	* config/i386/i386.h (TARGET_EXPAND_ABS): New macro.
	* config/i386/x86-tune.def (X86_TUNE_EXPAND_ABS): New.
	* config/i386/i386.md (abs<SWI48x>2): New define_expand.

gcc/testsuite
	* gcc.target/i386/pr92651.c: New testcase.

From-SVN: r279452
2019-12-17 01:50:35 +00:00
H.J. Lu
62dd2904f0 Use add for a = a + b and a = b + a when possible.
Since except for Bonnell,

01 fb                   add    %edi,%ebx

is faster and shorter than

8d 1c 1f                lea    (%rdi,%rbx,1),%ebx

we should use add for a = a + b and a = b + a when possible if not
optimizing for Bonnell.

Tested on x86-64.

2019-12-17  H.J. Lu  <hjl.tools@gmail.com>

gcc/

	PR target/92807
	* config/i386/i386.c (ix86_lea_outperforms): Check !TARGET_BONNELL.
	(ix86_avoid_lea_for_addr): When not optimizing for Bonnell, use add
	for a = a + b and a = b + a.

gcc/testsuite/

	PR target/92807
	* gcc.target/i386/pr92807-1.c: New test.

From-SVN: r279451
2019-12-17 01:29:09 +00:00
GCC Administrator
d187dab387 Daily bump.
From-SVN: r279450
2019-12-17 00:16:12 +00:00
Jason Merrill
4953b79025 PR c++/91165 - verify_gimple ICE with cached constexpr.
It seems we need to unshare even non-CONSTRUCTOR expressions that we are
going to stick in the constexpr_call_table, so we don't end up sharing the
same e.g. ADDR_EXPR between two different functions.  I now think I
understand why unsharing CONSTRUCTOR arguments was improving memory
performance: separating the arguments from the caller function allows the
caller function to be GC'd better.  But it occurs to me that we don't need
to unshare until we decide that we're evaluating and caching this call, so
we can avoid the CONSTRUCTOR unshare/free pair for tentative arguments.
Freeing the tentative TREE_VEC still seems worth doing, so free_bindings
isn't going away entirely.

	* constexpr.c (cxx_bind_parameters_in_call): Don't unshare.
	(cxx_eval_call_expression): Unshare all args if we're caching.

From-SVN: r279447
2019-12-16 18:25:08 -05:00
Martin Sebor
126036359a PR middle-end/92952 - gfortran.dg/lto/pr87689 FAILs at -O2
gcc/ChangeLog:
	* builtins.c (compute_objsize): Adjust offset by the array low bound.

From-SVN: r279445
2019-12-16 15:24:15 -07:00
David Malcolm
a326a3dedb Add pp_write_text_as_html_like_dot_to_stream
gcc/ChangeLog:
	* pretty-print.c (pp_write_text_as_html_like_dot_to_stream): New
	function.
	* pretty-print.h (pp_write_text_as_html_like_dot_to_stream): New decl.

From-SVN: r279444
2019-12-16 17:07:45 +00:00
Segher Boessenkool
bb03700c9b rs6000: Use symbolic names for the CR fields in more cases
It turns out we still used hardcoded register numbers for the CR fields
in some cases, and they now use the wrong numbers since we renumbered
most of the registers.  So let's use the symbolic names, instead.


	* config/rs6000/rs6000.md (movsi_to_cr_one): Use CR0_REGNO instead of
	hardcoding the (old, expired) register number.
	(*mtcrfsi): Ditto.

From-SVN: r279443
2019-12-16 17:06:17 +01:00
Jozef Lawrynowicz
e8aa9f55f6 MSP430: Add new msp430-elfbare target
contrib/ChangeLog:

2019-12-16  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	* config-list.mk: Add msp430-elfbare.

gcc/ChangeLog:

2019-12-16  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	* config.gcc: s/msp430*-*-*/msp430-*-*.
	Handle msp430-*-elfbare.
	* config/msp430/msp430-devices.c (TARGET_SUBDIR): Define.
	(_MSPMKSTR): Define.
	(__MSPMKSTR): Define.
	(rest_of_devices_path): Use TARGET_SUBDIR value in string.
	* config/msp430/msp430.c (msp430_option_override): Error if
	-fuse-cxa-atexit is used when it has been disabled at configure time.
	* config/msp430/t-msp430: Define TARGET_SUBDIR when building
	msp430-devices.o.
	* doc/install.texi: Document msp430-*-elf and msp430-*-elfbare.
	* doc/invoke.texi: Update documentation about which path devices.csv is
	searched for.

gcc/testsuite/ChangeLog:

2019-12-16  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	* g++.dg/init/dso_handle1.C: Require cxa_atexit support.
	* g++.dg/init/dso_handle2.C: Likewise.
	* g++.dg/other/cxa-atexit1.C: Likewise.
	* gcc.target/msp430/msp430.exp: Update csv-using-installed.c test to
	handle msp430-elfbare configuration.

libgcc/ChangeLog:

2019-12-16  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	* config.host: s/msp430*-*-elf/msp430-*-elf*.
	Override default "extra_parts" variable.
	* configure: Regenerate.
	* configure.ac: Disable TM clone registry by default for
	msp430-elfbare.

From-SVN: r279442
2019-12-16 11:02:10 +00:00
Bob Duff
1edfb10a5a [Ada] Suppress unused warnings in the presence of errors
2019-12-16  Bob Duff  <duff@adacore.com>

gcc/ada/

	* errout.adb (Handle_Serious_Error): Disable the above-mentioned
	warnings.

From-SVN: r279441
2019-12-16 10:35:31 +00:00
Bob Duff
495cdc79fb [Ada] Minor: improve comments
2019-12-16  Bob Duff  <duff@adacore.com>

gcc/ada/

	* errout.adb, errout.ads: Improve comments.

From-SVN: r279440
2019-12-16 10:35:24 +00:00
Bob Duff
9aaea2cc4b [Ada] Minor comment fix
2019-12-16  Bob Duff  <duff@adacore.com>

gcc/ada/

	* sem_util.ads: Minor comment fix.

From-SVN: r279439
2019-12-16 10:35:17 +00:00
Bob Duff
eb2ff584d5 [Ada] Check for "size for" in Special_Msg_Delete
2019-12-16  Bob Duff  <duff@adacore.com>

gcc/ada/

	* errout.ads, errout.adb (Is_Size_Too_Small_Message): Check for
	"size for" instead of "size for& too small, minimum allowed is
	^".

From-SVN: r279438
2019-12-16 10:35:09 +00:00
Eric Botcazou
1cbd208038 [Ada] Do not set a bogus Esize on subtype built for Component_Size clause
2019-12-16  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_ch13.adb (Analyze_Attribute_Definition_Clause): Set only
	the RM_Size on the subtype built for a Component_Size clause
	when the component type is a biased integer type.

From-SVN: r279437
2019-12-16 10:35:05 +00:00
Arnaud Charlet
08611be254 [Ada] Fix warning on _REENTRANT
2019-12-16  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* socket.c: Shutdown warning.

From-SVN: r279436
2019-12-16 10:35:00 +00:00
Arnaud Charlet
c1c3784bd9 [Ada] Mark Deallocator as Favor_Top_Level
2019-12-16  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* libgnarl/s-tataat.ads (Deallocator): Mark as Favor_Top_Level.

From-SVN: r279435
2019-12-16 10:34:56 +00:00
Arnaud Charlet
019c74bb73 [Ada] AI12-0234/321 atomic operations
2019-12-16  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* libgnat/s-aotase.adb, libgnat/s-aotase.ads,
	libgnat/s-atoope.ads, libgnat/s-atopar.adb,
	libgnat/s-atopar.ads, libgnat/s-atopex.adb,
	libgnat/s-atopex.ads: New files.
	* libgnat/s-atopri.ads: Add new intrinsics.
	* Makefile.rtl: Add new runtime files.
	* impunit.adb: Add new units to Ada 2020 list.

From-SVN: r279434
2019-12-16 10:34:51 +00:00
Eric Botcazou
1dcdd961c5 [Ada] Remove new strict-alignment check added by AI12-0001
2019-12-16  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* freeze.adb (Check_Strict_Alignment): Remove new check on
	Has_Aliased_Components for array types.

From-SVN: r279433
2019-12-16 10:34:47 +00:00
Ed Schonberg
c85dda7236 [Ada] Crash on constrained container in generalized indexing operation
2019-12-16  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_ch4.adb (Try_Container_Indexing): In the case of a derived
	container type, use the base type to look for candidate indexing
	operations, because the object may be a constrained subtype or
	itype with no explicit declaration.  Candidate indexing
	operations are found in the same scope and list of declarations
	as the declaration of the base type.

From-SVN: r279432
2019-12-16 10:34:42 +00:00
Ed Schonberg
3c08de3407 [Ada] Prototype implementastion of Ada2020 Map-reduce construct
2019-12-16  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* scng.adb (Scan): In Ada2020, a left-bracket indicates the
	start of an homogenous aggregate.
	* par-ch4.adb (P_Reduction_Attribute_Reference): New procedure.
	(P_Aggregate): Recognize Ada2020 bracket-delimited aggregates.
	(P_Primary): Ditto.
	* par-util.adb (Comma_Present): Return false on a right bracket
	in Ada2020, indicating the end of an aggregate.
	* snames.ads-tmpl: Introduce Name_Reduce and Attribute Reduce.
	* sinfo.ads, sinfo.adb (Is_Homogeneous_Aggregate): New flag on
	aggregates, to designate an Ada2020 array or container aggregate
	that is bracket-delimited in the source.
	* sem_attr.adb (Analyze_Attribute): For attribute Reduce, verify
	that two arguments are present, and verify that the prefix is a
	stream or an object that is iterable (array or contrainer).
	(Resolve_Attribute): For attribute Reduce, resolve initial value
	with the type of the context. Type-checking of element type of
	prefix is performed after expansion.
	* exp_attr.adb (Expand_N_Attribute_Reference): For attribute
	Reduce, expand into a loop: a) If prefix is an aggregate with a
	single iterated component association, use its iterator
	specification to construct a loop, b) If prefix is a name, build
	a loop using an element iterator loop.
	* scans.ads: Add brackets tokens.

From-SVN: r279431
2019-12-16 10:34:37 +00:00
Eric Botcazou
a517d6c19a [Ada] AI12-0001: Independence and Representation clauses for atomic objects
2019-12-16  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* gcc-interface/decl.c (gnat_to_gnu_entity): Adjust calls to
	validate_size.
	(gnat_to_gnu_component_type): Likewise.
	(gnat_to_gnu_field): Likewise and pass string for error messages.
	(components_need_strict_alignment): Remove test on Is_Aliased and
	add test for the independence of the component.
	(validate_size): Add S1 and S2 string parameters and use them to
	give better error messages for fields.  Tweak a couple of messages.
	* einfo.ads (Has_Independent_Components): Document more cases.
	(Is_Independent): Likewise.
	(Strict_Alignment): Document new semantics.
	* exp_ch9.adb (Install_Private_Data_Declarations): Also set the
	Is_Independent flag along with Is_Aliased on the renaming
	entity.
	* freeze.adb (Size_Known): Remove always-false test and add test
	for the strict-alignment on the record type.  Remove redundant
	tests and add test for the strict-alignment on the component
	type.
	(Check_Strict_Alignment): Set the flag if the type is by-ref and
	remove now redundant conditions.  Set the flag on an array type
	if it has aliased components.  In the record type case, do not
	set type for C_Pass_By_Copy convention.
	(Freeze_Array_Type): Move code checking for conflicts between
	representation aspects and clauses to before specific handling
	of packed array types. Give a warnind instead of an error for a
	conflict with pragma Pack.  Do not test Has_Pragma_Pack for the
	specific handling of packed array types.
	(Freeze_Record_Type): Move error checking of representation
	clause to...
	(Freeze_Entity): ...here after Check_Strict_Alignment is called.
	* sem_aggr.adb (Array_Aggr_Subtype): Also set the Is_Independent
	flag along with Is_Aliased on the Itype.
	* sem_ch13.adb (Check_Record_Representation_Clause): Do not set
	the RM size for a strict-alignment type.
	* sem_ch3.adb (Add_Interface_Tag_Components): Also set the
	Is_Independent flag along with Is_Aliased on the tag.
	(Add_Interface_Tag_Components): Likewise on the offset.
	(Analyze_Component_Declaration): Likewise on the component.
	(Analyze_Object_Declaration): Likewise on the object.
	(Constrain_Array): Likewise on the array.
	(Record_Type_Declaration: Likewise on the tag.
	(Array_Type_Declaration): Also set the
	Has_Independent_Components flag along with
	Has_Aliased_Components on the array.
	(Copy_Array_Base_Type_Attributes): Copy
	Has_Independent_Components.
	(Copy_Array_Subtype_Attributes): Copy Is_Atomic, Is_Independent
	and Is_Volatile_Full_Access.
	(Analyze_Iterator_Specification): Set Is_Independent on the loop
	variable according to Independent_Components on the array.
	* sem_ch5.adb: Likewise.
	* sem_ch6.adb (Process_Formals): Also set the Is_Independent
	flag along with Is_Aliased on the formal.

gcc/testsuite/

	* gnat.dg/specs/clause_on_volatile.ads,
	gnat.dg/specs/size_clause3.ads: Update expected diagnostics.

From-SVN: r279430
2019-12-16 10:34:33 +00:00
Eric Botcazou
2cee58d810 [Ada] Fully propagate representation aspects through renaming
2019-12-16  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_ch8.adb (Analyze_Object_Renaming): Set Atomic, Independent
	and Volatile_Full_Access aspects on the entity of the renaming
	the same way as the Volatile aspect is set.
	* sem_util.ads (Is_Atomic_Object_Entity): Move declaration to...
	(Is_Independent_Object): New function.
	(Is_Volatile_Full_Access_Object): Likewise.
	* sem_util.adb (Is_Atomic_Object_Entity): ...here.
	(Prefix_Has_Atomic_Components): Minor tweak.
	(Is_Atomic_Object): Test Is_Atomic on the Etype uniformly.
	(Is_Atomic_Or_VFA_Object): Call Is_Volatile_Full_Access_Object.
	(Is_Independent_Object): New predicate.
	(Is_Subcomponent_Of_Atomic_Object): Remove redundant test.
	(Is_Volatile_Full_Access_Object): New predicate.
	(Is_Volatile_Prefix): Rename into...
	(Prefix_Has_Volatile_Components): ... and call
	Is_Volatile_Object.
	(Object_Has_Volatile_Components): Delete.
	(Is_Volatile_Object): Simplify.
	* gcc-interface/trans.c (node_is_volatile_full_access): Adjust
	comment.

From-SVN: r279429
2019-12-16 10:34:27 +00:00
Bob Duff
0bba838d7f [Ada] Syntax error on improperly indented imported subprogram
2019-12-16  Bob Duff  <duff@adacore.com>

gcc/ada/

	* par.adb: Add Scopes function to do range checking on the scope
	stack.  Call Scopes all over the parser.  Add
	SIS_Aspect_Import_Seen flag.
	* par-ch6.adb (P_Subprogram): Initialize SIS_Aspect_Import_Seen
	to False at the start, and check it at the end.
	* par-ch13.adb (Get_Aspect_Specifications): Set
	SIS_Aspect_Import_Seen to True when appropriate.
	* par-ch10.adb, par-ch12.adb, par-ch2.adb, par-ch3.adb,
	par-ch5.adb, par-ch7.adb, par-ch9.adb, par-endh.adb,
	par-util.adb: Call Scopes.

From-SVN: r279428
2019-12-16 10:34:22 +00:00
Eric Botcazou
17a98a3dbb [Ada] Fix couple of oversights in the implementation of AI12-0128
2019-12-16  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_prag.adb (Atomic_Components): Remove local variable and
	fix consistency issues.  Call Component_Type on the Etype of E.
	(Independent_Components): Remove local variable.
	* sem_util.adb (Is_Subcomponent_Of_Atomic_Object): Properly deal
	with prefixes that are access values.
	* gcc-interface/trans.c (atomic_acces_t): New enumeral type.
	(node_is_atomic) <N_Indexed_Component>: Test the prefix.
	(node_has_volatile_full_access): Rename into...
	(node_is_volatile_full_access): ...this.
	(node_is_component): New predicare.
	(gnat_strip_type_conversion): Delete.
	(outer_atomic_access_required_p): Likewise.
	(atomic_access_required_p): Rename into...
	(get_atomic_access): ...this.  Implement the 3 different semantics
	of Atomic and Volatile_Full_Access.
	(simple_atomic_access_required_p): New predicate.
	(Call_to_gnu): Remove outer_atomic_access parameter and change the
	type of atomic_access parameter to atomic_acces_t.  Replace call to
	atomic_access_required_p with simple_atomic_access_required_p for
	the in direction and call get_atomic_access for the out direction
	instead of [outer_]atomic_access_required_p.
	(lhs_or_actual_p): Constify local variables.
	(present_in_lhs_or_actual_p): Likewise.
	(gnat_to_gnu) <N_Identifier>: Replace call to atomic_access_required_p
	with simple_atomic_access_required_p.
	<N_Explicit_Dereference>: Likewise.
	<N_Indexed_Component>: Likewise.
	<N_Selected_Component>: Likewise.
	<N_Assignment_Statement>: Call get_atomic_access for the name instead
	of [outer_]atomic_access_required_p.  Adjust call to Call_to_gnu.
	<N_Function_Call>: Adjust call to Call_to_gnu.
	(get_controlling_type): Fix typo in comment.

From-SVN: r279427
2019-12-16 10:34:17 +00:00
Eric Botcazou
2f31b36248 [Ada] Export the Ada version through the C interface
2019-12-16  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* fe.h (Ada_Version_Type): New typedef.
	(Ada_Version): Declare.
	* opt.ads (Ada_Version_Type): Add Convention C and WARNING line.
	(Ada_Version): Add WARNING line.
	(Exception_Mechanism_Type): Likewise.

From-SVN: r279426
2019-12-16 10:34:12 +00:00
Gary Dismukes
ba58b776c0 [Ada] Minor reformatting and U.S. spelling adjustment
2019-12-16  Gary Dismukes  <dismukes@adacore.com>

gcc/ada/

	* checks.adb, sem_util.adb: Minor reformatting and U.S. spelling
	adjustment.

From-SVN: r279425
2019-12-16 10:34:08 +00:00
Bob Duff
dce1ef7a34 [Ada] Better error message for "is null" subunit
2019-12-16  Bob Duff  <duff@adacore.com>

gcc/ada/

	* sem_ch10.adb (Analyze_Subunit): Give an error if the subunit
	is not a proper body. This hides the confusing "duplicate body"
	message that was previously given.

From-SVN: r279424
2019-12-16 10:34:03 +00:00
Eric Botcazou
9c9535f974 [Ada] Expand renamings of subcomponents of an atomic or VFA object
2019-12-16  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* exp_ch8.adb (Expand_N_Object_Renaming_Declaration): Document
	third special case of renamings requiring special handling.
	(Evaluation_Required): Return true for an atomic or VFA prefix.

From-SVN: r279423
2019-12-16 10:33:59 +00:00
Ed Schonberg
90393d3ca7 [Ada] Crash on conversion in branch of if-expression
2019-12-16  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* checks.adb (Apply_Float_Conversion_Check): Use node of type
	conversion and not its parent, when inserting the declaration
	for the temporary that hold the result of the conversion.
	Previously the declaration was inserted above the parent of the
	conversion, apparently as a small optimization for the
	subsequent traversal in Insert_Actions.  Unfortunately a similar
	optimization takes place in Insert_Actions, assuming that the
	insertion point must be above the expression that creates the
	actions to insert.  This is not correct in the presence of
	conditional expressions (i.e.  since Ada2012), where the
	insertion must be in the list of actions attached to the current
	alternative.

From-SVN: r279422
2019-12-16 10:33:54 +00:00