Eric Botcazou [Mon, 30 Nov 2015 11:59:09 +0000 (11:59 +0000)]
osint.adb: Add use type clause for CRTL.size_t.
* osint.adb: Add use type clause for CRTL.size_t.
(C_String_Length): Return CRTL.size_t instead of Integer.
(To_Path_String_Access): Take CRTL.size_t instead of Integer.
(Get_Libraries_From_Registry): Use CRTL throughout.
(To_Canonical_Dir_Spec): Use CRTL.size_t instead of Integer.
(To_Canonical_File_List): Likewise.
(To_Canonical_File_Spec): Likewise.
(To_Canonical_Path_Spec): Likewise.
(To_Host_Dir_Spec): Likewise.
(To_Host_File_Spec): Likewise.
(Update_Path): Use CRTL throughout.
* s-shasto.adb: Add with clause for System.CRTL.
(Initialize): Rename CRTL.strncpy instead of importing it manually.
Eric Botcazou [Mon, 30 Nov 2015 11:50:53 +0000 (11:50 +0000)]
gigi.h (create_var_decl): Adjust prototype.
* gcc-interface/gigi.h (create_var_decl): Adjust prototype.
(create_subprog_decl): Likewise.
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Rename
static_p into static_flag and add volatile_flag local variable.
Do not locally change the type of a volatile object, except for the
pointed-to type if the object is handled by reference. Adjust calls
to create_var_decl.
<E_Subprogram_Type>: Likewise for const and noreturn subprograms.
(get_minimal_subprog_decl): Adjust call to create_subprog_decl.
(elaborate_expression_1): Adjust call to create_var_decl.
(gnat_to_gnu_field): Minor tweak.
* gcc-interface/trans.c (gigi): Adjust calls to create_var_decl and
create_subprog_decl.
(build_raise_check): Likewise.
(Subprogram_Body_to_gnu): Likewise.
(create_temporary): Likewise.
(Handled_Sequence_Of_Statements_to_gnu): Likewise.
(Exception_Handler_to_gnu_gcc): Likewise.
(Compilation_Unit_to_gnu): Likewise.
(gnat_to_gnu): Likewise.
* gcc-interface/utils.c (maybe_pad_type): Likewise.
(create_var_decl): Add VOLATILE_FLAG parameter and handle it.
(create_subprog_decl): Add CONST_FLAG and VOLATILE_FLAG parameters and
handle them.
Eric Botcazou [Mon, 30 Nov 2015 11:46:32 +0000 (11:46 +0000)]
gigi.h (is_simple_additive_expression): Declare.
* gcc-interface/gigi.h (is_simple_additive_expression): Declare.
* gcc-interface/trans.c (struct range_check_info_d): Add DISP and
NEG_P fields.
(find_loop_for): Add DISP and NEG_P parameters with default value.
Call is_simple_additive_expression to handle additive expressions.
(Loop_Statement_to_gnu): Deal with displacement in range checks.
(Raise_Error_to_gnu): Likewise.
(gnat_to_gnu): Add call to find_loop_for.
(is_simple_additive_expression): New function extracted from...
(gnat_invariant_expr): ...here. Call it on the expression.
Eric Botcazou [Mon, 30 Nov 2015 11:25:24 +0000 (11:25 +0000)]
ada-tree.h (TYPE_MAX_ALIGN): New macro.
* gcc-interface/ada-tree.h (TYPE_MAX_ALIGN): New macro.
* gcc-interface/decl.c (gnat_to_gnu_entity): Do not set PACKED to -2.
Remove obsolete code setting the alignment on some atomic types.
When the type has no alignment but needs strict alignment and has a
size clause, compute a maximum alignment and set it on the type.
(adjust_packed): Remove handling of -2 argument. Deal with TYPE_ALIGN
and TYPE_MAX_ALIGN directly.
(gnat_to_gnu_field): Do not document -2 as argument.
(components_to_record): Likewise.
* gcc-interface/utils.c (finish_record_type): Do not bump alignment of
the record type beyond TYPE_MAX_ALIGN. Reset the latter on exit.
* tree-if-conv.c (struct ifc_dr): Add new tree
base_predicate field.
(hash_memrefs_baserefs_and_store_DRs_read_written_info): Hash
base ref, DR pairs and store base_predicate for write type DRs.
(ifcvt_memrefs_wont_trap): Guard checks with
-ftree-loop-if-convert-stores flag.
Jan Hubicka [Sun, 29 Nov 2015 22:33:23 +0000 (23:33 +0100)]
cgraph.c (cgraph_node::make_local): No name is unique during incremental linking.
* cgraph.c (cgraph_node::make_local): No name is unique during
incremental linking.
* cgraph.h (can_be_discarded_p): Update comment; also common and
WEAK in named sections can be discarded; when doing incremental
link do not rely on resolution being the final one.
* varasm.c (default_binds_local_p_3, decl_binds_to_current_def_p):
When symbol can be discarded, do not rely on resolution info.
* symtab.c (symtab_node::nonzero_address): Take into account that
symbol can be discarded.
* ipa-visibility.c (update_visibility_by_resolution_info): Handle
definition correctly.
(function_and_variable_visibility): Do not set unique_name when
incrementally linking.
Jakub Jelinek [Fri, 27 Nov 2015 19:33:33 +0000 (20:33 +0100)]
re PR libgomp/68579 (FAIL: libgomp.c/target-32.c execution test)
PR libgomp/68579
* task.c (gomp_task_run_post_handle_depend_hash): New forward decl.
(gomp_create_target_task): Call it before freeing
GOMP_TARGET_TASK_DATA tasks.
Jonathan Wakely [Fri, 27 Nov 2015 18:38:48 +0000 (18:38 +0000)]
Copy-edit the Option Summary in invoke.texi
* doc/invoke.texi (Option Summary): Use negative form of
-Waggressive-loop-optimizations, remove redundant -Wpedantic-ms-format,
sort alphabetically and re-justify.
The 'function_temp<int>' instantiation above mangles to:
_Z13function_tempIiEv1AIXszcvT_Li999EEE
The demangler parses this as:
typed name
template
name 'function_temp'
template argument list
builtin type int
function type
builtin type void
argument list
template (*)
name 'A'
template argument list
unary operator
operator sizeof
unary operator
cast
template parameter 0 (**)
literal
builtin type int
name '999'
And after the fix for 59195, due to:
static void
d_print_cast (struct d_print_info *dpi, int options,
const struct demangle_component *dc)
{
...
/* For a cast operator, we need the template parameters from
the enclosing template in scope for processing the type. */
if (dpi->current_template != NULL)
{
dpt.next = dpi->templates;
dpi->templates = &dpt;
dpt.template_decl = dpi->current_template;
}
when printing the template argument list of A (what should be "<sizeof
(int)>"), the template parameter 0 (that is, "T_", the '**' above) now
refers to the first parameter of the the template argument list of the
'A' template (the '*' above), exactly what we were already trying to
print. This leads to infinite recursion, and stack exaustion. The
template parameter 0 should actually refer to the first parameter of
the 'function_temp' template.
Where it reads "for the cast operator" in the comment in d_print_cast
(above), it's really talking about a conversion operator, like:
struct A { template <typename U> explicit operator U(); };
We don't want to inject the template parameters from the enclosing
template in scope when processing a cast _expression_, only when
handling a conversion operator.
The problem is that DEMANGLE_COMPONENT_CAST is currently ambiguous,
and means _both_ 'conversion operator' and 'cast expression'.
Fix this by adding a new DEMANGLE_COMPONENT_CONVERSION component type,
which does what DEMANGLE_COMPONENT_CAST does today, and making
DEMANGLE_COMPONENT_CAST just simply print its component subtree.
I think we could instead reuse DEMANGLE_COMPONENT_CAST and in
d_print_comp_inner still do:
leaving the unary cast case below calling d_print_cast, but seems to
me that spliting the component types makes it easier to reason about
the code.
g++'s testsuite actually generates three symbols that crash the
demangler in the same way. I've added those as tests in the demangler
testsuite as well.
And then this fixes PR other/61233 too, which happens to be a
demangler crash originally reported to GDB, at:
https://sourceware.org/bugzilla/show_bug.cgi?id=16957
Bootstrapped and regtested on x86_64 Fedora 20.
Also ran this through GDB's testsuite. GDB will require a small
update to use DEMANGLE_COMPONENT_CONVERSION in one place it's using
DEMANGLE_COMPONENT_CAST in its sources.
libiberty/
2015-11-27 Pedro Alves <palves@redhat.com>
PR other/61321
PR other/61233
* demangle.h (enum demangle_component_type)
<DEMANGLE_COMPONENT_CONVERSION>: New value.
* cp-demangle.c (d_demangle_callback, d_make_comp): Handle
DEMANGLE_COMPONENT_CONVERSION.
(is_ctor_dtor_or_conversion): Handle DEMANGLE_COMPONENT_CONVERSION
instead of DEMANGLE_COMPONENT_CAST.
(d_operator_name): Return a DEMANGLE_COMPONENT_CONVERSION
component if handling a conversion.
(d_count_templates_scopes, d_print_comp_inner): Handle
DEMANGLE_COMPONENT_CONVERSION.
(d_print_comp_inner): Handle DEMANGLE_COMPONENT_CONVERSION instead
of DEMANGLE_COMPONENT_CAST.
(d_print_cast): Rename as ...
(d_print_conversion): ... this. Adjust comments.
(d_print_cast): Rewrite - simply print the left subcomponent.
* cp-demint.c (cplus_demangle_fill_component): Handle
DEMANGLE_COMPONENT_CONVERSION.
* ifcvt.c (insn_valid_noce_process_p): Reject insn if it satisfies
multiple_sets.
(noce_try_cmove_arith): Add checking asserts that orig_a and orig_b
are not modified by the final modified insns in the basic blocks.
Richard Biener [Fri, 27 Nov 2015 14:17:28 +0000 (14:17 +0000)]
re PR tree-optimization/68559 (Excessive peeling for gaps)
2015-11-27 Richard Biener <rguenther@suse.de>
PR tree-optimization/68559
* tree-vect-data-refs.c (vect_analyze_group_access_1): Move
peeling for gap checks ...
* tree-vect-stmts.c (vectorizable_load): ... here and relax
for SLP.
* tree-vect-loop.c (vect_analyze_loop_2): Re-set
LOOP_VINFO_PEELING_FOR_GAPS before re-trying without SLP.
Bernd Schmidt [Fri, 27 Nov 2015 10:05:36 +0000 (10:05 +0000)]
Be more careful about barriers when speculating conditional stores.
* gimple.h (nonbarrier_call_p): Declare.
* gimple.c (nonbarrier_call_p): New function.
* tree-ssa-phiopt.c (nontrapping_dom_walker::before_dom_children):
Also increment call phase for ASMs with vdef and potential barrier
calls.
Kyrylo Tkachov [Fri, 27 Nov 2015 09:52:09 +0000 (09:52 +0000)]
[RTL-ifcvt] Reject insns that are multiple_sets
* ifcvt.c (insn_valid_noce_process_p): Reject insn if it satisfies
multiple_sets.
(noce_try_cmove_arith): Add checking asserts that orig_a and orig_b
are not modified by the final modified insns in the basic blocks.
Jakub Jelinek [Fri, 27 Nov 2015 09:01:20 +0000 (10:01 +0100)]
re PR tree-optimization/68552 (ICE in in expand_expr_real_2 with -O2 -ftree-vectorize)
PR tree-optimization/68552
* optabs.c (expand_vec_perm_1): Move vec_shr handling from here...
(expand_vec_perm): ... here. Do it regardless of vec_perm_const_optab
or whether v0 == v1.
Jakub Jelinek [Fri, 27 Nov 2015 08:59:55 +0000 (09:59 +0100)]
re PR c/63326 (whether a #pragma is a statement depends on the type of pragma)
PR c/63326
* c-parser.c (c_parser_compound_statement_nostart): If
last_label is true, use pragma_stmt instead of pragma_compound
as second c_parser_pragma argument.
(c_parser_omp_ordered, c_parser_omp_target_update,
c_parser_omp_target_enter_data, c_parser_omp_target_exit_data): Pass
false as second argument to c_parser_skip_to_pragma_eol after
diagnosing standalone directives used in pragma_stmt context.
* parser.c (cp_parser_statement): Clear in_compound after labels.
* gcc.dg/gomp/barrier-2.c (f2): Expect another error after label.
* c-c++-common/gomp/pr63326.c: New test.
* testsuite/libgomp.c/cancel-parallel-2.c (foo): Add semicolon
in between case label and OpenMP standalone directives.
* testsuite/libgomp.c++/cancel-parallel-2.C (foo): Likewise.
Martin Liska [Fri, 27 Nov 2015 08:37:23 +0000 (09:37 +0100)]
Fix memory leak in loop_vec_info
* tree-vect-loop-manip.c (vect_create_cond_for_alias_checks):
Do not release memory for comp_alias_ddrs.
* tree-vect-loop.c (destroy_loop_vec_info): Release
the memory for all loop_vec_info.
Alexandre Oliva [Thu, 26 Nov 2015 21:57:40 +0000 (21:57 +0000)]
[PR67753] adjust for padding when bypassing memory in assign_parm_setup_block
Storing a register in memory as a full word and then accessing the
same memory address under a smaller-than-word mode amounts to
right-shifting of the register word on big endian machines. So, if
BLOCK_REG_PADDING chooses upward padding for BYTES_BIG_ENDIAN, and
we're copying from the entry_parm REG directly to a pseudo, bypassing
any stack slot, perform the shifting explicitly.
This fixes the miscompile of function_return_val_10 in
gcc.target/aarch64/aapcs64/func-ret-4.c for target aarch64_be-elf
introduced in the first patch for 67753.
for gcc/ChangeLog
PR rtl-optimization/67753
PR rtl-optimization/64164
* function.c (assign_parm_setup_block): Right-shift
upward-padded big-endian args when bypassing the stack slot.
Move the `-mcompact-branches=' option out of the middle of a block of
floating-point options. The option is not related to FP in any way.
Place it immediately below other branch instruction selection options.
Matthew Wahab [Thu, 26 Nov 2015 15:06:04 +0000 (15:06 +0000)]
[AArch64][dejagnu] Dejagnu support for ARMv8.1 Adv.SIMD.
gcc/testsuite
* lib/target-supports.exp (add_options_for_arm_v8_1a_neon): New.
(check_effective_target_arm_arch_FUNC_ok)
(add_options_for_arm_arch_FUNC)
(check_effective_target_arm_arch_FUNC_multilib): Add "armv8.1-a"
to the list to be generated.
(check_effective_target_arm_v8_1a_neon_ok_nocache): New.
(check_effective_target_arm_v8_1a_neon_ok): New.
(check_effective_target_arm_v8_1a_neon_hw): New.
DWARF: fix loc. descr. generation for DW_AT_static_link
gcc/ChangeLog:
PR debug/53927
* tree-nested.c (finalize_nesting_tree_1): Append a field to
hold the frame base address.
* dwarf2out.c (gen_subprogram_die): Generate for
DW_AT_static_link a location description that computes the value
of this field.
Richard Biener [Thu, 26 Nov 2015 13:46:59 +0000 (13:46 +0000)]
re PR tree-optimization/66721 (gcc.target/i386/pr61403.c FAILs)
2015-11-26 Richard Biener <rguenther@suse.de>
PR tree-optimization/66721
* tree-vect-loop.c (vect_analyze_loop_2): Compute scalar
iteration cost earlier. Re-do analysis without SLP when
vectorization using SLP fails and without has a chance to succeed.
Richard Biener [Thu, 26 Nov 2015 11:53:13 +0000 (11:53 +0000)]
re PR testsuite/67203 (FAIL: g++.dg/tree-ssa/pr61034.C -std=gnu++11 scan-tree-dump-times fre2 "free" 10)
2015-11-26 Richard Biener <rguenther@suse.de>
PR testsuite/67203
* g++.dg/tree-ssa/pr61034.C: Make expected optimization result
dependent on PUSH_ARGS_REVERSED. Drop optimization level and
also monitor final optimization result.
Jakub Jelinek [Thu, 26 Nov 2015 10:18:50 +0000 (11:18 +0100)]
re PR tree-optimization/68128 (A huge regression in Parboil v2.5 OpenMP CUTCP test (2.5 times lower performance))
PR tree-optimization/68128
* tree.h (OMP_CLAUSE_SHARED_READONLY): Define.
* gimplify.c: Include gimple-walk.h.
(enum gimplify_omp_var_data): Add GOVD_WRITTEN.
(omp_notice_variable): Set flags to n->value if n already
exists in target region, but we need to jump to do_outer.
(omp_shared_to_firstprivate_optimizable_decl_p,
omp_mark_stores, omp_find_stores_op, omp_find_stores_stmt): New
functions.
(gimplify_adjust_omp_clauses_1): Set OMP_CLAUSE_SHARED_READONLY
on OMP_CLAUSE_SHARED if it is a scalar non-addressable that is
not modified in the body. Call omp_mark_stores for outer
contexts on OMP_CLAUSE_SHARED clauses if they could be written
in the body or on OMP_CLAUSE_LASTPRIVATE.
(gimplify_adjust_omp_clauses): Add body argument, call
omp_find_stores_{stmt,op} on the body through walk_gimple_seq.
Set OMP_CLAUSE_SHARED_READONLY
on OMP_CLAUSE_SHARED if it is a scalar non-addressable that is
not modified in the body. Call omp_mark_stores for outer
contexts on OMP_CLAUSE_SHARED clauses if they could be written
in the body or on OMP_CLAUSE_LASTPRIVATE or on OMP_CLAUSE_LINEAR
without OMP_CLAUSE_LINEAR_NO_COPYOUT or on OMP_CLAUSE_REDUCTION.
(gimplify_oacc_cache, gimplify_omp_parallel, gimplify_omp_task,
gimplify_omp_for, gimplify_omp_workshare, gimplify_omp_target_update,
gimplify_expr): Adjust gimplify_adjust_omp_clauses callers.
* tree-nested.c (convert_nonlocal_omp_clauses,
convert_local_omp_clauses): Clear OMP_CLAUSE_SHARED_READONLY on
non-local vars or local vars referenced from nested routines.
* omp-low.c (scan_sharing_clauses): For OMP_CLAUSE_SHARED_READONLY
attempt to optimize it into OMP_CLAUSE_FIRSTPRIVATE. Even for
TREE_READONLY, don't call use_pointer_for_field with non-NULL
second argument until we are sure we are keeping OMP_CLAUSE_SHARED.
* gcc.dg/gomp/pr68128-1.c: New test.
* gcc.dg/gomp/pr68128-2.c: New test.
PR rtl-optimization/67226
* calls.c (store_one_arg): Take into account
crtl->args.pretend_args_size when checking for overlap between
arg->value and argblock + arg->locate.offset during sibcall
optimization.
Jakub Jelinek [Thu, 26 Nov 2015 09:52:48 +0000 (10:52 +0100)]
re PR c++/68508 (Internal compiler error with parentheses around return value in C++14 with ASan enabled)
PR c++/68508
* cp-tree.h (cp_ubsan_maybe_instrument_downcast): Add INTYPE argument.
* cp-ubsan.c (cp_ubsan_maybe_instrument_downcast): Likewise. Use
it instead of or in addition to TREE_TYPE (op). Use
is_properly_derived_from, return NULL_TREE if TREE_TYPE (intype) and
TREE_TYPE (type) are the same type minus qualifiers.
* typeck.c (build_static_cast_1): Adjust callers.
Wilco Dijkstra [Thu, 26 Nov 2015 09:46:34 +0000 (09:46 +0000)]
[AArch64] Update patterns to support FP zero
2015-11-26 Wilco Dijkstra <wdijkstr@arm.com>
* config/aarch64/aarch64.md (cbranch<mode>4): Use
aarch64_fp_compare_operand.
(store_pairsf): Use aarch64_reg_or_fp_zero.
(store_pairdf): Likewise.
(cstore<mode>4): Use aarch64_fp_compare_operand.
(cmov<mode>6): Likewise.
* config/aarch64/aarch64-ldpstp.md: Use aarch64_reg_or_fp_zero.
Aditya Kumar [Thu, 26 Nov 2015 00:07:43 +0000 (00:07 +0000)]
fix PR68453: recursively add phi nodes to merge points
The patch adds close phi nodes to every outer loop exit, and to every loop
guard. For loop guards it computes an initial value that determines where we
stop inserting phi nodes. When the initial value is a constant, the initial
value is considered to be defined in the entry of the code gen region.
Co-Authored-By: Sebastian Pop <s.pop@samsung.com>
From-SVN: r230918
Martin Sebor [Wed, 25 Nov 2015 23:29:57 +0000 (23:29 +0000)]
PR c/66516 - missing diagnostic on taking the address of a builtin function
PR c/66516 - missing diagnostic on taking the address of a builtin function
* g++.dg/addr_builtin-1.C: New test (accidentally omitted from
initial commit).
* gcc.dg/addr_builtin-1.c: Same.
Jan Hubicka [Wed, 25 Nov 2015 23:05:07 +0000 (00:05 +0100)]
re PR lto/67548 (LTO drops weak binding with "ld -r")
PR lto/67548
* lto-plugin.c (linker_output, linker_output_set): New statics.
(all_symbols_read_handler): Add -flinker-output option.
(onload): Record linker_output info.
* ipa-visibility.c (cgraph_externally_visible_p,
varpool_node::externally_visible_p): When doing incremental linking,
hidden symbols may be still used later.
(update_visibility_by_resolution_info): Do not drop weak during
incremental link.
(function_and_variable_visibility): Fix formating.
* flag-types.h (lto_linker_output): Declare.
* common.opt 9flag_incremental_link): New flag.
* lto-lang.c (lto_post_options): Process flag_lto_linker_output.
* lang.opt (lto_linker_output): New enum.
(flinker_output): New flag.