Commit Graph

178279 Commits

Author SHA1 Message Date
Ghjuvan Lacambre
fbaadba246 [Ada] Guard against access to wrong fields in Is_Renaming
gcc/ada/

	* sem_util.adb (Is_Renaming): Add ekind checks.
2020-07-15 09:42:53 -04:00
Arnaud Charlet
ae265cdd5b [Ada] Remove doc on obsolete tools
gcc/ada/

	* doc/gnat_ugn/gnat_utility_programs.rst: Remove doc on obsolete
	tools.
	* gnat_ugn.texi: Regenerate.
2020-07-15 09:42:52 -04:00
Arnaud Charlet
d15dc6fb72 [Ada] Assert failure with -gnatwr
gcc/ada/

	* sem_res.adb (Resolve_Type_Conversion): Protect against null
	entity.  Add proper tag for -gnatwr warning.
2020-07-15 09:42:51 -04:00
Arnaud Charlet
00847335c8 [Ada] Missing error on operator call
gcc/ada/

	* sem_ch6.adb (Analyze_Procedure_Call): Detect use of operators
	in a procedure call.
	* sem_util.adb: Minor edit.
2020-07-15 09:42:50 -04:00
Piotr Trojanek
7fe05755eb [Ada] Fix for possibly null ranges in 'Update and delta_aggregate
gcc/ada/

	* exp_spark.adb (Expand_SPARK_Delta_Or_Update): Apply scalar
	range checks against the base type of an index type, not against
	the index type itself.
2020-07-15 09:42:49 -04:00
Eric Botcazou
257baf5ab9 [Ada] Small addition and tweaks in documentation on freezing
gcc/ada/

	* einfo.ads (Delayed Freezing and Elaboration): Minor tweaks.
	Document the discrepancy between the aspect and the non-aspect
	cases for alignment settings in object declarations.
2020-07-15 09:42:48 -04:00
Arnaud Charlet
d0f6dd47fd [Ada] ACATS 4.1P [BDB4001] - 13.11.4(22-23/3) not enforced
gcc/ada/

	* exp_ch3.adb (Freeze_Type): Remove warning in expander,
	replaced by a corresponding error in sem_ch13.adb. Replace
	RTE_Available by RTU_Loaded to avoid adding unnecessary
	dependencies.
	* sem_ch13.adb (Associate_Storage_Pool): New procedure.
	(Analyze_Attribute_Definition_Clause
	[Attribute_Simple_Storage_Pool| Attribute_Storage_Pool]): Call
	Associate_Storage_Pool to add proper legality checks on
	subpools.
2020-07-15 09:42:47 -04:00
Yannick Moy
3221be1444 [Ada] Mark standard containers as not in SPARK
gcc/ada/

	* libgnat/a-cbdlli.adb, libgnat/a-cbdlli.ads,
	libgnat/a-cbhama.adb, libgnat/a-cbhama.ads,
	libgnat/a-cbhase.adb, libgnat/a-cbhase.ads,
	libgnat/a-cbmutr.adb, libgnat/a-cbmutr.ads,
	libgnat/a-cborma.adb, libgnat/a-cborma.ads,
	libgnat/a-cborse.adb, libgnat/a-cborse.ads,
	libgnat/a-cbprqu.adb, libgnat/a-cbprqu.ads,
	libgnat/a-cbsyqu.adb, libgnat/a-cbsyqu.ads,
	libgnat/a-cdlili.adb, libgnat/a-cdlili.ads,
	libgnat/a-cidlli.adb, libgnat/a-cidlli.ads,
	libgnat/a-cihama.adb, libgnat/a-cihama.ads,
	libgnat/a-cihase.adb, libgnat/a-cihase.ads,
	libgnat/a-cimutr.adb, libgnat/a-cimutr.ads,
	libgnat/a-ciorma.adb, libgnat/a-ciorma.ads,
	libgnat/a-ciormu.adb, libgnat/a-ciormu.ads,
	libgnat/a-ciorse.adb, libgnat/a-ciorse.ads,
	libgnat/a-cohama.adb, libgnat/a-cohama.ads,
	libgnat/a-cohase.adb, libgnat/a-cohase.ads,
	libgnat/a-coinve.adb, libgnat/a-coinve.ads,
	libgnat/a-comutr.adb, libgnat/a-comutr.ads,
	libgnat/a-convec.adb, libgnat/a-convec.ads,
	libgnat/a-coorma.adb, libgnat/a-coorma.ads,
	libgnat/a-coormu.adb, libgnat/a-coormu.ads,
	libgnat/a-coorse.adb, libgnat/a-coorse.ads: Add SPARK_Mode =>
	Off.
2020-07-15 09:42:46 -04:00
Eric Botcazou
bdeeeaf71f [Ada] Fix oversight in Delayed_Aspect_Present predicate
gcc/ada/

	* sem_ch3.adb (Delayed_Aspect_Present): Fix oversight in loop.
	* freeze.adb (Freeze_Object_Declaration): Use Declaration_Node
	instead of Parent for the sake of consistency.
2020-07-15 09:42:45 -04:00
Javier Miranda
3a9222bcb3 [Ada] Wrong resolution of 'access in protected subprogram
gcc/ada/

	* sem_attr.adb (Resolve_Attribute): Resolve overloaded
	N_Selected_Component prefix of 'Access. Required to handle
	overloaded prefixed view of protected subprograms.
2020-07-15 09:42:44 -04:00
Arnaud Charlet
3c75d0f23c [Ada] Documentation cleanups
gcc/ada/

	* doc/gnat_ugn/about_this_guide.rst: Remove old section and
	update for Ada 202x.
	* doc/gnat_ugn/getting_started_with_gnat.rst: Add a system
	requirements section. Remove obsolete section and minimal
	rewording on the getting started section.
	* gnat_ugn.texi: Regenerate.
2020-07-15 09:42:43 -04:00
Piotr Trojanek
9fdf1cebaf [Ada] Fix slices and qualified expressions being effectively volatile
gcc/ada/

	* exp_ch5.adb (Expand_Assign_Array): Use short-circuit operator
	(style).
	* sem_res.adb (Resolve_Indexed_Component): Fix style in comment.
	* sem_util.adb (Is_Effectively_Volatile_Object): Handle slices
	just like indexed components; handle qualified expressions and
	type conversions lie in Is_OK_Volatile_Context.
	(Is_OK_Volatile_Context): Handle qualified expressions just like
	type conversions.
2020-07-15 09:42:42 -04:00
Piotr Trojanek
98e663f597 [Ada] Cleanup condition for an effectively volatile array type
gcc/ada/

	* sem_prag.adb (Atomic_Components): Simplify with Ekind_In.
	(Complex_Representation): Fix type of E_Id, which just like when
	for pragma Atomic_Components will hold an N_Identifier node, not
	an entity.
	* sem_util.adb (Is_Effectively_Volatile): Refactor to avoid
	unnecessary computation.
2020-07-15 09:42:41 -04:00
Arnaud Charlet
8cd5951d68 [Ada] Extend static functions
gcc/ada/

	* inline.adb, inline.ads
	(Inline_Static_Expression_Function_Call): Renamed
	Inline_Static_Function_Call.
	* sem_ch13.adb (Analyze_Aspect_Static): Allow static intrinsic
	imported functions under -gnatX.
	* sem_util.ads, sem_util.adb (Is_Static_Expression_Function):
	Renamed Is_Static_Function.
	(Is_Static_Expression_Function_Call): Renamed
	Is_Static_Function_Call.
	* sem_ch6.adb, sem_elab.adb, sem_res.adb: Update calls to
	Is_Static_Function*.
	* sem_eval.adb (Fold_Dummy, Eval_Intrinsic_Call, Fold_Shift):
	New.
	(Eval_Call): Add support for intrinsic calls, code refactoring.
	(Eval_Entity_Name): Code refactoring.
	(Eval_Logical_Op): Update comment.
	(Eval_Shift): Call Fold_Shift. Update comments.
	* par-prag.adb (Par [Pragma_Extensions_Allowed]): Set
	Ada_Version to Ada_Version_Type'Last to handle
	Extensions_Allowed (On) consistently.
	* opt.ads (Extensions_Allowed): Update documentation.
	* sem_attr.adb: Update comment.
	* doc/gnat_rm/implementation_defined_pragmas.rst: Update
	documentation of Extensions_Allowed.
	* gnat_rm.texi: Regenerate.
2020-07-15 09:42:40 -04:00
Arnaud Charlet
fa02302bc1 [Ada] Potential access to uninitialized variable
gcc/ada/

	* sem_aggr.adb (Resolve_Iterated_Component_Association): Ensure
	Typ is never accessed uninitialized.
2020-07-15 09:42:39 -04:00
Piotr Trojanek
5f9afe0dc1 [Ada] Fix typo in "accommodate" in docs and comments
gcc/ada/

	* doc/gnat_rm/representation_clauses_and_pragmas.rst: Fix typo.
	* gnat_rm.texi: Regenerate.
	* libgnat/s-secsta.ads (Memory_Alignment): Likewise.
2020-07-15 09:42:38 -04:00
Gary Dismukes
0b4034c06b [Ada] Minor reformatting of comments and some code, plus a typo correction
gcc/ada/

	* exp_ch6.adb: Add a comma and fix a typo (machinary =>
	machinery) in comment.
	* exp_aggr.adb: Reformat, fix capitalization, and add a couple
	of commas in a comment. Adjust columns in several code
	fragments.
	* sem_aggr.adb: Reformat and add a comma in a comment.
2020-07-15 09:42:37 -04:00
Eric Botcazou
1c77806b48 [Ada] Use Sloc of delay statement in timed entry call
gcc/ada/

	* exp_ch9.adb (Expand_N_Timed_Entry_Call): Use the Sloc of
	the delay statement in the expansion.
2020-07-15 09:42:36 -04:00
Ed Schonberg
4f6ebe2a51 [Ada] Ongoing work for unnamed and named container aggregates
gcc/ada/

	* sem_aggr.adb (Resolve_Iterated_Component_Association): New
	procedure, internal to Resolve_Container_Aggregate, to complete
	semantic analysis of Iterated_Component_Associations.
	* exp_aggr.adb (Expand_Iterated_Component): New procedure,
	internal to Expand_Container_Aggregate, to expand the construct
	into an implicit loop that performs individual insertions into
	the target aggregate.
2020-07-15 09:42:35 -04:00
Justin Squirek
3c30eac83c [Ada] Spurious accessibility error on allocator
gcc/ada/

	* exp_ch6.adb (Make_Build_In_Place_Call_Allocator): Normalize
	the associated node for internally generated objects to be like
	their SOAAT counter-parts.
2020-07-15 09:42:34 -04:00
Arnaud Charlet
a2f4fc6f3f [Ada] Fix potentially uninitialized variable flagged by CodePeer
gcc/ada/

	* libgnat/g-socket.adb (Wait_On_Socket): Fix potentially
	uninitialized variable.
2020-07-15 09:42:33 -04:00
Nathan Sidwell
f0d0be62db c++: error recovery & pragmas
Parser error recovery can get confused by the tokens within a deferred
pragma, as treats those as regular tokens.  This adjusts the recovery
so that the pragma is treated as a unit.  Also, the preprocessor now
ensures that we never have an EOF token inside a pragma -- the pragma
is always closed first.

	gcc/cp/
	* parser.c (cp_parser_skip_to_closing_parenthesis_1): Deal with
	meeting a deferred pragma.
	(cp_parser_skip_to_end_of_statement): Likewise.
	(cp_parser_skip_to_end_of_block_or_statement): Likewise.
	(cp_parser_skip_to_pragma_eol): We should never meet EOF.
	(cp_parser_omp_declare_simd): Likewise.
	(cp_parser_omp_declare_reduction, cp_parser_oacc_routine)
	(pragma_lex): Likewise.
	gcc/testsuite/
	* g++.dg/parse/pragma-recovery.C: New.
2020-07-15 06:05:41 -07:00
Tobias Burnus
e0685fadb6 libgomp.fortran/struct-elem-map-1.f90: Add char kind=4 tests
As the Fortran PR 95837 has been fixed, the test could be be added.

libgomp/ChangeLog:

	* testsuite/libgomp.fortran/struct-elem-map-1.f90: Remove unused
	variables; add character(kind=4) tests; update TODO comment.
2020-07-15 12:34:03 +02:00
Jakub Jelinek
12d69dbfff fix _mm512_{,mask_}cmp*_p[ds]_mask at -O0 [PR96174]
The _mm512_{,mask_}cmp_p[ds]_mask and also _mm_{,mask_}cmp_s[ds]_mask
intrinsics have an argument which must have a constant passed to it
and so use an inline version only for ifdef __OPTIMIZE__ and have
a #define for -O0.  But the _mm512_{,mask_}cmp*_p[ds]_mask intrinsics
don't need a constant argument, they are essentially the first
set with the constant added to them implicitly based on the comparison
name, and so there is no #define version for them (correctly).
But their inline versions are defined in between the first and s[ds]
set and so inside of ifdef __OPTIMIZE__, which means that with -O0
they aren't defined at all.

This patch fixes that by moving those after the #ifdef __OPTIMIZE #else
use #define #endif block.

2020-07-15  Jakub Jelinek  <jakub@redhat.com>

	PR target/96174
	* config/i386/avx512fintrin.h (_mm512_cmpeq_pd_mask,
	_mm512_mask_cmpeq_pd_mask, _mm512_cmplt_pd_mask,
	_mm512_mask_cmplt_pd_mask, _mm512_cmple_pd_mask,
	_mm512_mask_cmple_pd_mask, _mm512_cmpunord_pd_mask,
	_mm512_mask_cmpunord_pd_mask, _mm512_cmpneq_pd_mask,
	_mm512_mask_cmpneq_pd_mask, _mm512_cmpnlt_pd_mask,
	_mm512_mask_cmpnlt_pd_mask, _mm512_cmpnle_pd_mask,
	_mm512_mask_cmpnle_pd_mask, _mm512_cmpord_pd_mask,
	_mm512_mask_cmpord_pd_mask, _mm512_cmpeq_ps_mask,
	_mm512_mask_cmpeq_ps_mask, _mm512_cmplt_ps_mask,
	_mm512_mask_cmplt_ps_mask, _mm512_cmple_ps_mask,
	_mm512_mask_cmple_ps_mask, _mm512_cmpunord_ps_mask,
	_mm512_mask_cmpunord_ps_mask, _mm512_cmpneq_ps_mask,
	_mm512_mask_cmpneq_ps_mask, _mm512_cmpnlt_ps_mask,
	_mm512_mask_cmpnlt_ps_mask, _mm512_cmpnle_ps_mask,
	_mm512_mask_cmpnle_ps_mask, _mm512_cmpord_ps_mask,
	_mm512_mask_cmpord_ps_mask): Move outside of __OPTIMIZE__ guarded
	section.

	* gcc.target/i386/avx512f-vcmppd-3.c: New test.
	* gcc.target/i386/avx512f-vcmpps-3.c: New test.
2020-07-15 11:34:44 +02:00
Jakub Jelinek
410675cb63 builtins: Avoid useless char/short -> int promotions before atomics [PR96176]
As mentioned in the PR, we generate a useless movzbl insn before lock cmpxchg.
The problem is that the builtin for the char/short cases has the arguments
promoted to int and combine gives up, because the instructions have
MEM_VOLATILE_P arguments and recog in that case doesn't recognize anything
when volatile_ok is false, and nothing afterwards optimizes the
(reg:SI a) = (zero_extend:SI (reg:QI a))
... (subreg:QI (reg:SI a) 0) ...

The following patch fixes it at expansion time, we already have a function
that is meant to undo the promotion, so this just adds the very common case
to that.

2020-07-15  Jakub Jelinek  <jakub@redhat.com>

	PR target/96176
	* builtins.c: Include gimple-ssa.h, tree-ssa-live.h and
	tree-outof-ssa.h.
	(expand_expr_force_mode): If exp is a SSA_NAME with different mode
	from MODE and get_gimple_for_ssa_name is a cast from MODE, use the
	cast's rhs.

	* gcc.target/i386/pr96176.c: New test.
2020-07-15 11:26:22 +02:00
guojiufu
7a9fd18598 rs6000: Refine RTL unroll hook for small loops
For very small loops (< 6 insns), it would be fine to unroll 4
times to run fast with less latency and better cache usage.  Like
below loops:
 while (i) a[--i] = NULL;   while (p < e)  *d++ = *p++;

With this patch enhances, we could see some performance improvement
for some workloads(e.g. SPEC2017).

2020-07-13  Jiufu Guo   <guojiufu@cn.ibm.com>

	* config/rs6000/rs6000.c (rs6000_loop_unroll_adjust): Refine hook.
2020-07-15 16:15:05 +08:00
Tobias Burnus
fff15bad1a libgomp: Add Fortran routine support for allocators
libgomp/ChangeLog:

	* allocator.c: Add ialias for omp_init_allocator and
	omp_destroy_allocator.
	* configure.ac: Set INTPTR_T_KIND.
	* configure: Regenerate.
	* Makefile.in: Regenerate.
	* testsuite/Makefile.in: Regenerate.
	* fortran.c (omp_init_allocator_, omp_destroy_allocator_,
	omp_set_default_allocator_, omp_get_default_allocator_): New
	functions and ialias_redirect.
	* icv.c: Add ialias for omp_set_default_allocator and
	omp_get_default_allocator.
	* libgomp.map (OMP_5.0.1): Add omp_init_allocator_,
	omp_destroy_allocator_, omp_set_default_allocator_ and
	omp_get_default_allocator_.
	* omp_lib.f90.in: Add allocator traits parameters, declare
	allocator routines and add related kind parameters.
	* omp_lib.h.in: Likewise.
	* testsuite/libgomp.c-c++-common/alloc-2.c: Fix sizeof.
	* testsuite/libgomp.fortran/alloc-1.F90: New test.
	* testsuite/libgomp.fortran/alloc-2.F90: New test.
	* testsuite/libgomp.fortran/alloc-3.F: New test.
	* testsuite/libgomp.fortran/alloc-4.f90: New test.
	* testsuite/libgomp.fortran/alloc-5.f90: New test.
2020-07-15 08:33:20 +02:00
GCC Administrator
8ca07a3072 Daily bump. 2020-07-15 00:16:35 +00:00
Marek Polacek
4358099049 c++: Add new test [PR59978]
Fixed in r224162.  That came without a test so adding this one.
Previously, we issued a bogus "too few arguments to function" error.

gcc/testsuite/ChangeLog:

	PR c++/59978
	* g++.dg/cpp0x/vt-59978.C: New test.
2020-07-14 17:32:03 -04:00
H.J. Lu
b2984e5ada x86: Replace __glibc_unlikely with __builtin_expect
Replace glibc specific __glibc_unlikely with __builtin_expect.

	PR target/95443
	* gcc.target/i386/pr95443-1.c (simple_strstr): Replace
	__glibc_unlikely with __builtin_expect.
2020-07-14 14:04:36 -07:00
Marek Polacek
8e64d18285 c++: Make convert_like complain about bad ck_ref_bind again [PR95789]
convert_like issues errors about bad_p conversions at the beginning
of the function, but in the ck_ref_bind case, it only issues them
after we've called convert_like on the next conversion.

This doesn't work as expected since r10-7096 because when we see
a conversion from/to class type in a template, we return early, thereby
missing the error, and a bad_p conversion goes by undetected.  That
made the attached test to compile even though it should not.

I had thought that I could just move the ck_ref_bind/bad_p errors
above to the rest of them, but that regressed diagnostics because
expr then wasn't converted yet by the nested convert_like_real call.

So, for bad_p conversions, do the normal processing, but still return
the IMPLICIT_CONV_EXPR to avoid introducing trees that the template
processing can't handle well.  This I achieved by adding a wrapper
function.

gcc/cp/ChangeLog:

	PR c++/95789
	PR c++/96104
	PR c++/96179
	* call.c (convert_like_real_1): Renamed from convert_like_real.
	(convert_like_real): New wrapper for convert_like_real_1.

gcc/testsuite/ChangeLog:

	PR c++/95789
	PR c++/96104
	PR c++/96179
	* g++.dg/conversion/ref4.C: New test.
	* g++.dg/conversion/ref5.C: New test.
	* g++.dg/conversion/ref6.C: New test.
2020-07-14 16:02:39 -04:00
David Edelsohn
0c78f438fa rs6000: Don't call movsi_from_sf in 32 bit mode.
movsi_from_sf uses rldimi instruction, which will cause the compiler to ICE
in 32 bit mode.  This patch limits the recently added pattern and call to
TARGET_POWERPC64.

2020-07-14  David Edelsohn  <dje.gcc@gmail.com>

gcc/ChangeLog

	* config/rs6000/rs6000.md (rotldi3_insert_sf): Add TARGET_POWERPC64
	condition.
	* config/rs6000/rs6000.c (rs6000_expand_vector_init): Add
	TARGET_POWERPC64 requirement to TARGET_P8_VECTOR case.
2020-07-14 15:32:44 -04:00
Nathan Sidwell
0257997968 c++: Parser entry cleanup
The handling of PCH is a little trick, because we have to deal with it before
allocating memory.  I found the layering somewhat confusing.  This patch
reorganizes that, so that the stopping of PCH is done in exactly one place,
and the ordering of lexer creation relative to that is much clearer.

I also changed the error message about multiple source files as with C++20,
'modules' means something rather specific.

Other than the error message changes, no functional changes.

	gcc/cp/
	* parser.c (cp_lexer_alloc): Do not deal with PCH here.
	(cp_lexer_new_main): Deal with PCH here.  Store the tokens directly
	into the buffer.
	(cp_lexer_new_from_tokens): Assert last token isn't purged either.
	(cp_lexer_get_preprocessor_token): Change first arg to flags, adjust.
	(cp_parser_new): Pass the lexer in, don't create it here.
	(cp_parser_translation_unit): Initialize access checks here.
	(cp_parser_initial_pragma): First token is provided by caller,
	don't deal with PCH stopping here.  Adjust error message.
	(c_parse_file): Adjust, change error message to avoid C++20 module
	confusion.
2020-07-14 10:58:36 -07:00
Kwok Cheung Yeung
b52643ab90 libgomp: Fix hang when profiling OpenACC programs with CUDA 9.0 nvprof
The version of nvprof in CUDA 9.0 causes a hang when used to profile an
OpenACC program.  This is because it calls acc_get_device_type from
a callback called during device initialization, which then attempts
to acquire acc_device_lock while it is already taken, resulting in
deadlock.  This works around the issue by returning acc_device_none
from acc_get_device_type without attempting to acquire the lock when
initialization has not completed yet.

2020-07-14  Tom de Vries  <tom@codesourcery.com>
	    Cesar Philippidis  <cesar@codesourcery.com>
	    Thomas Schwinge  <thomas@codesourcery.com>
	    Kwok Cheung Yeung  <kcy@codesourcery.com>

	libgomp/
	* oacc-init.c (acc_init_state_lock, acc_init_state, acc_init_thread):
	New variable.
	(acc_init_1): Set acc_init_thread to pthread_self ().  Set
	acc_init_state to initializing at the start, and to initialized at the
	end.
	(self_initializing_p): New function.
	(acc_get_device_type): Return acc_device_none if called by thread that
	is currently executing acc_init_1.
	* libgomp.texi (acc_get_device_type): Update documentation.
	(Implementation Status and Implementation-Defined Behavior): Likewise.
	* testsuite/libgomp.oacc-c-c++-common/acc_prof-init-2.c: New.
2020-07-14 10:31:35 -07:00
Ian Lance Taylor
bae45b8be5 demangler: don't treat lambda as a substitution candidate
libiberty/ChangeLog:

	PR demangler/96143
	* cp-demangle.c (d_lambda): Don't add substitution candidate.
	* testsuite/demangle-expected: Update a few existing test cases
	accordingly, and add a new test case.
2020-07-14 10:25:48 -07:00
Lewis Hyatt
004bb936d6 diagnostics: Support conversion of tabs to spaces [PR49973] [PR86904]
Supports conversion of tabs to spaces when outputting diagnostics. Also
adds -fdiagnostics-column-unit and -fdiagnostics-column-origin options to
control how the column number is output, thereby resolving the two PRs.

gcc/c-family/ChangeLog:

	PR other/86904
	* c-indentation.c (should_warn_for_misleading_indentation): Get
	global tabstop from the new source.
	* c-opts.c (c_common_handle_option): Remove handling of -ftabstop, which
	is now a common option.
	* c.opt: Likewise.

gcc/ChangeLog:

	PR preprocessor/49973
	PR other/86904
	* common.opt: Handle -ftabstop here instead of in c-family
	options.  Add -fdiagnostics-column-unit= and
	-fdiagnostics-column-origin= options.
	* opts.c (common_handle_option): Handle the new options.
	* diagnostic-format-json.cc (json_from_expanded_location): Add
	diagnostic_context argument.  Use it to convert column numbers as per
	the new options.
	(json_from_location_range): Likewise.
	(json_from_fixit_hint): Likewise.
	(json_end_diagnostic): Pass the new context argument to helper
	functions above.  Add "column-origin" field to the output.
	(test_unknown_location): Add the new context argument to calls to
	helper functions.
	(test_bad_endpoints): Likewise.
	* diagnostic-show-locus.c
	(exploc_with_display_col::exploc_with_display_col): Support
	tabstop parameter.
	(layout_point::layout_point): Make use of class
	exploc_with_display_col.
	(layout_range::layout_range): Likewise.
	(struct line_bounds): Clarify that the units are now always
	display columns.  Rename members accordingly.  Add constructor.
	(layout::print_source_line): Add support for tab expansion.
	(make_range): Adapt to class layout_range changes.
	(layout::maybe_add_location_range): Likewise.
	(layout::layout): Adapt to class exploc_with_display_col changes.
	(layout::calculate_x_offset_display): Support tabstop parameter.
	(layout::print_annotation_line): Adapt to struct line_bounds changes.
	(layout::print_line): Likewise.
	(line_label::line_label): Add diagnostic_context argument.
	(get_affected_range): Likewise.
	(get_printed_columns): Likewise.
	(layout::print_any_labels): Adapt to struct line_label changes.
	(class correction): Add m_tabstop member.
	(correction::correction): Add tabstop argument.
	(correction::compute_display_cols): Use m_tabstop.
	(class line_corrections): Add m_context member.
	(line_corrections::line_corrections): Add diagnostic_context argument.
	(line_corrections::add_hint): Use m_context to handle tabstops.
	(layout::print_trailing_fixits): Adapt to class line_corrections
	changes.
	(test_layout_x_offset_display_utf8): Support tabstop parameter.
	(test_layout_x_offset_display_tab): New selftest.
	(test_one_liner_colorized_utf8): Likewise.
	(test_tab_expansion): Likewise.
	(test_diagnostic_show_locus_one_liner_utf8): Call the new tests.
	(diagnostic_show_locus_c_tests): Likewise.
	(test_overlapped_fixit_printing): Adapt to helper class and
	function changes.
	(test_overlapped_fixit_printing_utf8): Likewise.
	(test_overlapped_fixit_printing_2): Likewise.
	* diagnostic.h (enum diagnostics_column_unit): New enum.
	(struct diagnostic_context): Add members for the new options.
	(diagnostic_converted_column): Declare.
	(json_from_expanded_location): Add new context argument.
	* diagnostic.c (diagnostic_initialize): Initialize new members.
	(diagnostic_converted_column): New function.
	(maybe_line_and_column): Be willing to output a column of 0.
	(diagnostic_get_location_text): Convert column number as per the new
	options.
	(diagnostic_report_current_module): Likewise.
	(assert_location_text): Add origin and column_unit arguments for
	testing the new functionality.
	(test_diagnostic_get_location_text): Test the new functionality.
	* doc/invoke.texi: Document the new options and behavior.
	* input.h (location_compute_display_column): Add tabstop argument.
	* input.c (location_compute_display_column): Likewise.
	(test_cpp_utf8): Add selftests for tab expansion.
	* tree-diagnostic-path.cc (default_tree_make_json_for_path): Pass the
	new context argument to json_from_expanded_location().

libcpp/ChangeLog:

	PR preprocessor/49973
	PR other/86904
	* include/cpplib.h (struct cpp_options):  Removed support for -ftabstop,
	which is now handled by diagnostic_context.
	(class cpp_display_width_computation): New class.
	(cpp_byte_column_to_display_column): Add optional tabstop argument.
	(cpp_display_width): Likewise.
	(cpp_display_column_to_byte_column): Likewise.
	* charset.c
	(cpp_display_width_computation::cpp_display_width_computation): New
	function.
	(cpp_display_width_computation::advance_display_cols): Likewise.
	(compute_next_display_width): Removed and implemented this
	functionality in a new function...
	(cpp_display_width_computation::process_next_codepoint): ...here.
	(cpp_byte_column_to_display_column): Added tabstop argument.
	Reimplemented in terms of class cpp_display_width_computation.
	(cpp_display_column_to_byte_column): Likewise.
	* init.c (cpp_create_reader): Remove handling of -ftabstop, which is now
	handled by diagnostic_context.

gcc/testsuite/ChangeLog:

	PR preprocessor/49973
	PR other/86904
	* c-c++-common/Wmisleading-indentation-3.c: Adjust expected output
	for new defaults.
	* c-c++-common/Wmisleading-indentation.c: Likewise.
	* c-c++-common/diagnostic-format-json-1.c: Likewise.
	* c-c++-common/diagnostic-format-json-2.c: Likewise.
	* c-c++-common/diagnostic-format-json-3.c: Likewise.
	* c-c++-common/diagnostic-format-json-4.c: Likewise.
	* c-c++-common/diagnostic-format-json-5.c: Likewise.
	* c-c++-common/missing-close-symbol.c: Likewise.
	* g++.dg/diagnostic/bad-binary-ops.C: Likewise.
	* g++.dg/parse/error4.C: Likewise.
	* g++.old-deja/g++.brendan/crash11.C: Likewise.
	* g++.old-deja/g++.pt/overload2.C: Likewise.
	* g++.old-deja/g++.robertl/eb109.C: Likewise.
	* gcc.dg/analyzer/malloc-paths-9.c: Likewise.
	* gcc.dg/bad-binary-ops.c: Likewise.
	* gcc.dg/format/branch-1.c: Likewise.
	* gcc.dg/format/pr79210.c: Likewise.
	* gcc.dg/plugin/diagnostic-test-expressions-1.c: Likewise.
	* gcc.dg/plugin/diagnostic-test-string-literals-1.c: Likewise.
	* gcc.dg/redecl-4.c: Likewise.
	* gfortran.dg/diagnostic-format-json-1.F90: Likewise.
	* gfortran.dg/diagnostic-format-json-2.F90: Likewise.
	* gfortran.dg/diagnostic-format-json-3.F90: Likewise.
	* go.dg/arrayclear.go: Add a comment explaining why adding a
	comment was necessary to work around a dejagnu bug.
	* c-c++-common/diagnostic-units-1.c: New test.
	* c-c++-common/diagnostic-units-2.c: New test.
	* c-c++-common/diagnostic-units-3.c: New test.
	* c-c++-common/diagnostic-units-4.c: New test.
	* c-c++-common/diagnostic-units-5.c: New test.
	* c-c++-common/diagnostic-units-6.c: New test.
	* c-c++-common/diagnostic-units-7.c: New test.
	* c-c++-common/diagnostic-units-8.c: New test.
2020-07-14 12:05:56 -04:00
Nathan Sidwell
5f809982e8 c++: tree dumper
A couple of C++ nodes were unknown to the tree dumper.

	gcc/cp/
	* ptree.c (cxx_print_type): Add TYPEOF_TYPE and BASES.
2020-07-14 08:20:38 -07:00
Nathan Sidwell
4d4a0aa423 c++: Refactor some class fns
Storing CLASSTYPE_AS_BASE in a local variable makes some code clearer
(and textually no longer).  For some reason we store a DECL in a variable
called 'value', which is confusing.

	gcc/cp/
	* class.c (build_base_field_1): Cache CLASSTYPE_AS_BASE.
	(build_self_reference): Rename value -> decl.
	(dump_class_hierarchy_1): Cache CLASSTYPE_AS_BASE.
2020-07-14 08:20:38 -07:00
David Edelsohn
4f97bed9a7 aix: FAT libraries: test native compiler mode directly
The FAT libraries config fragments need to know which library is native
and which is a multilib to choose the correct multilib from which to
append the additional object file or shared object file.  Testing the
top-level archive is fragile because it will fail if rebuilding.  This
patch tests the compiler preprocessing macros for the 64 bit AIX specific
__64BIT__ to determine the native mode of the compiler in MULTILIBTOP.

2020-07-14  David Edelsohn  <dje.gcc@gmail.com>

libatomic/ChangeLog

	* config/t-aix: Set BITS from compiler cpp macro.

libgcc/ChangeLog

	* config/rs6000/t-slibgcc-aix: Set BITS from compiler cpp macro.

libgfortran/ChangeLog

	* config/t-aix: Set BITS from compiler cpp macro.

libgomp/ChangeLog

	* config/t-aix: Set BITS from compiler cpp macro.

libstdc++-v3/ChangeLog

	* config/os/aix/t-aix: Set BITS from compiler cpp macro.
2020-07-14 10:41:40 -04:00
Tobias Burnus
524862db44 Fix goacc/finalize-1.f tree dump-scanning for -m32
gcc/testsuite/ChangeLog:

	* gfortran.dg/goacc/finalize-1.f: Relax scan-tree-dump-times
	pattern to work on 32bit-pointer systems.
2020-07-14 16:31:13 +02:00
David Edelsohn
ee352e91d2 testsuite: adapt g++.dg/ipa/pr83667.C for AIX
The current testsuite regex looks for THUNK0.  AIX generates THUNK..0.
This patch expands the regex to allow 0 or more dots between THUNK
and the 0.

gcc/testsuite/ChangeLog

2020-07-14  David Edelsohn  <dje.gcc@gmail.com>

	* g++.dg/ipa/pr83667.C: Allow 0 or more dots between THUNK and 0.
2020-07-14 10:26:07 -04:00
Jakub Jelinek
b1d389d60d expr: Unbreak build of mesa [PR96194]
> > The store to the whole of each volatile object was picked apart
> > like there had been an individual assignment to each of the
> > fields.  Reads were added as part of that; see PR for details.
> > The reads from volatile memory were a clear bug; individual
> > stores questionable.  A separate patch clarifies the docs.

This breaks building of mesa on both the trunk and 10 branch.

The problem is that the middle-end may never create temporaries of non-POD
(TREE_ADDRESSABLE) types, those can be only created when the language says
so and thus only the FE is allowed to create those.

This patch just reverts the behavior to what we used to do before for the
stores to volatile non-PODs.  Perhaps we want to do something else, but
definitely we can't create temporaries of the non-POD type.  It is up to
discussions on what should happen in those cases.

2020-07-14  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/96194
	* expr.c (expand_constructor): Don't create temporary for store to
	volatile MEM if exp has an addressable type.

	* g++.dg/opt/pr96194.C: New test.
2020-07-14 16:01:11 +02:00
Marek Polacek
9eb370f19c c++: Improve checking of decls with trailing return type [PR95820]
This is an ICE-on-invalid but I've been seeing it when reducing
various testcases, so it's more important for me than usually.

splice_late_return_type now checks that if we've seen a late return
type, the function return type was auto.  That's a fair assumption
but grokdeclarator/cdk_function wasn't giving errors for function
pointers and similar.  So we want to perform various checks not only
when funcdecl_p || inner_declarator == NULL.  But only give the
!late_return_type errors when funcdecl_p, to accept e.g.

auto (*fp)() = f;

in C++11.  Here's a diff -w to ease the review:

--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -12102,14 +12102,9 @@ grokdeclarator (const cp_declarator *declarator,

 	    /* Handle a late-specified return type.  */
 	    tree late_return_type = declarator->u.function.late_return_type;
-	    if (funcdecl_p
-		/* This is the case e.g. for
-		   using T = auto () -> int.  */
-		|| inner_declarator == NULL)
-	      {
 	    if (tree auto_node = type_uses_auto (type))
 	      {
-		    if (!late_return_type)
+		if (!late_return_type && funcdecl_p)
 		  {
 		    if (current_class_type
 			&& LAMBDA_TYPE_P (current_class_type))
@@ -12201,7 +12196,6 @@ grokdeclarator (const cp_declarator *declarator,
 			    "type specifier", name);
 		return error_mark_node;
 	      }
-	      }
 	    type = splice_late_return_type (type, late_return_type);
 	    if (type == error_mark_node)
 	      return error_mark_node;

gcc/cp/ChangeLog:

	PR c++/95820
	* decl.c (grokdeclarator) <case cdk_function>: Check also
	pointers/references/... to functions.

gcc/testsuite/ChangeLog:

	PR c++/95820
	* g++.dg/cpp1y/auto-fn58.C: New test.
2020-07-14 09:35:53 -04:00
Nathan Sidwell
bf567bb3b3 core: formatting & comment
One of hash_map's getters returns a pointer to T or null, The comment
said it returned T or null.  Also an unaligned pair of comments.

	gcc/
	* hash-map.h (hash_map::get): Note it is a pointer to value.
	* incpath.h (incpath_kind): Align comments.
2020-07-14 06:29:12 -07:00
Nathan Sidwell
31dbaab57f c++: Comments & formatting
I found some bad formatting and misleading or incomplete comments
during my spelunking around the c++FE.  May as well clean up trunk and
record what I noted.

	gcc/cp/
	* cp-tree.h: Correct some tree lang flag comments,
	reformat some structure definitions.  Note some structure
	sizes.  Clarify some comments.
	(yyungetc): Delete.  Not been a thing for some time.
	* class.c (copy_fndecl_with_name): Comment.
	(check_bases_and_members): Unnecessary {}.
	(layout_class_type): Comment.
	* cp-tree.def (UNBOUND_CLASS_TEMPLATE): Adjust comment.
	* decl.c:  Fix some formatting & whitespace issues.
	(function_requirements_equivalent_p): Note why
	substitutions are needed.
	* decl2.c (no_linkage_error): Note that heroics about
	'typedef struct { ... };' are no longer needed.
	* method.c: Whitespace.
	* name-lookup.c: Whitespace.
	(add_decl_to_level): Reformat a line.
	(print_binding_stack): Mark as DEBUG_FUNCTION.
	(has_using_namespace_std_directive_p): Delete comment.
	* pt.c: Whitespace
	* ptree.c: Whitespace.
	* rtti.c: Whitespace & comment.
	* tree.c: Comment.
	* typeck.c (structural_comptypes): Add comment.
2020-07-14 06:27:07 -07:00
Nathan Sidwell
6039cb96d1 core: add tree-node comments
As we've moved to 64-bit systems, the padding information has become
conditionally inaccurate.  I also hit cases where invalid tree codes
did not get flagged as invalid.

	gcc/
	* tree-core.h (tree_decl_with_vis, tree_function_decl):
	Note additional padding on 64-bits
	* tree.c (cache_integer_cst): Note why no caching of enum literals.
	(get_tree_code_name): Robustify error case.
2020-07-14 06:11:53 -07:00
Nathan Sidwell
5ed9a5d02f doc: Fix some typos
gty calls gt_clear*e*_cache not gt_clear_cache.  I know not why it is
named so, but at least document it correctly.  invoke.texi had a duplicate opindex.

	gcc/
	* doc/gty.texi: Fic gt_cleare_cache name.
	* doc/invoke.texi: Remove duplicate opindex Wabi-tag.
2020-07-14 06:11:53 -07:00
Mark Eggleston
81072bab8d Fortran : ICE in gfc_check_pointer_assign PR95612
Output an error if the right hand value is a zero sized array or
does not have a symbol tree otherwise continue checking.

2020-07-14  Steven G. Kargl  <kargl@gcc.gnu.org>

gcc/fortran/

	PR fortran/95612
	* expr.c (gfc_check_pointer_assigb): Output an error if
	rvalue is a zero sized array or output an error if rvalue
	doesn't have a symbol tree.

2020-07-14  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/testsuite/

	PR fortran/95612
	* gfortran.dg/pr95612.f90: New test.
2020-07-14 12:56:20 +01:00
Tobias Burnus
102502e32e [OpenMP, Fortran] Add structure/derived-type element mapping
gcc/fortran/ChangeLog:

	* openmp.c (gfc_match_omp_clauses): Match also derived-type
	component refs in OMP_CLAUSE_MAP.
	(resolve_omp_clauses): Resolve those.
	* trans-openmp.c (gfc_trans_omp_array_section, gfc_trans_omp_clauses):
	Handle OpenMP structure-element mapping.
	(gfc_trans_oacc_construct, gfc_trans_oacc_executable_directive,
	(gfc_trans_oacc_combined_directive, gfc_trans_oacc_declare): Update
	add openacc=true in gfc_trans_omp_clauses call.

gcc/testsuite/ChangeLog:

	* gfortran.dg/goacc/finalize-1.f: Update dump scan pattern.
	* gfortran.dg/gomp/map-1.f90: Update dg-error.
	* gfortran.dg/gomp/map-2.f90: New test.

libgomp/ChangeLog:

	* testsuite/libgomp.fortran/struct-elem-map-1.f90: New test.
2020-07-14 13:39:46 +02:00
Tobias Burnus
174e79bf73 [Fortran, OpenMP] Fix allocatable-components check (PR67311)
gcc/fortran/ChangeLog:

	PR fortran/67311
	* trans-openmp.c (gfc_has_alloc_comps): Return false also for
	pointers to arrays.

libgomp/ChangeLog:

	PR fortran/67311
	* testsuite/libgomp.fortran/target-map-1.f90: New test.
2020-07-14 12:55:53 +02:00