Jonathan Wakely [Thu, 14 May 2015 13:23:14 +0000 (14:23 +0100)]
re PR libstdc++/66011 (call to '__open_missing_mode' declared with attribute error)
PR libstdc++/66011
* acinclude.m4 (GLIBCXX_CHECK_FILESYSTEM_DEPS): Check for fchmod and
sendfile.
* config.h.in: Regenerate.
* configure: Regenerate.
* src/filesystem/ops.cc (do_copy_file): Fix arguments to open(). Do
not return after copying contents. Use fchmod, fchmodat, and sendfile
when available.
(current_path, permissions, space): Use errno not return value.
Marek Polacek [Thu, 14 May 2015 11:42:53 +0000 (11:42 +0000)]
re PR c/66066 (r222889 causes bogus error: initializer element is not constant)
PR c/66066
PR c/66127
* c-common.c (c_fully_fold): Pass false down to c_fully_fold_internal.
(c_fully_fold_internal): Fold C_MAYBE_CONST_EXPRs with
C_MAYBE_CONST_EXPR_INT_OPERANDS set. Add FOR_INT_CONST argument and
use it. If FOR_INT_CONST, require that all evaluated operands be
INTEGER_CSTs.
* c-typeck.c (digest_init): Call pedwarn_init with OPT_Wpedantic
rather than with 0.
* gcc.dg/pr14649-1.c: Add -Wpedantic.
* gcc.dg/pr19984.c: Likewise.
* gcc.dg/pr66066-1.c: New test.
* gcc.dg/pr66066-2.c: New test.
* gcc.dg/pr66066-3.c: New test.
Uros Bizjak [Wed, 13 May 2015 18:01:27 +0000 (20:01 +0200)]
i386.md (*mul<mode>3_1): Merge with *mulhi3_1 using SWIM248 mode iterator.
* config/i386/i386.md (*mul<mode>3_1): Merge with *mulhi3_1
using SWIM248 mode iterator.
(*mulv<mode>4): Use x86_64_sext_operand for operand[2] constraint.
(*mulvhi4): mark operand[1] as commutative. Use nonimmediate_operand
for operand[2] constraint.
(*mulv<mode>4_1): Merge with *mulvhi4_1 using SWI248 mode iterator.
Jakub Jelinek [Wed, 13 May 2015 16:59:20 +0000 (18:59 +0200)]
re PR middle-end/66133 (Wrong-code with noreturn #pragma omp task body)
PR middle-end/66133
* omp-low.c (expand_omp_taskreg): For GIMPLE_OMP_TASK expansion,
make sure it is never noreturn, even when the task body does not
return.
(lower_omp_taskreg): For GIMPLE_OMP_TASK, emit GIMPLE_OMP_CONTINUE
right before GIMPLE_OMP_RETURN.
(make_gimple_omp_edges): Accept GIMPLE_OMP_CONTINUE as ->cont
for GIMPLE_OMP_TASK. For GIMPLE_OMP_RETURN corresponding to
GIMPLE_OMP_TASK add an EDGE_ABNORMAL edge from entry to exit.
Kyrylo Tkachov [Wed, 13 May 2015 15:26:14 +0000 (15:26 +0000)]
[tree-ssa-math-opts] Expand pow (x, CONST) using square roots when possible
* params.def (PARAM_MAX_POW_SQRT_DEPTH): New param.
* tree-ssa-math-opts.c: Include params.h
(pow_synth_sqrt_info): New struct.
(representable_as_half_series_p): New function.
(get_fn_chain): Likewise.
(print_nested_fn): Likewise.
(dump_fractional_sqrt_sequence): Likewise.
(dump_integer_part): Likewise.
(expand_pow_as_sqrts): Likewise.
(gimple_expand_builtin_pow): Use above to attempt to expand
pow as series of square roots. Removed now unused variables.
* gcc.target/aarch64/pow-sqrt-synth-1.c: New test.
* gcc.dg/pow-sqrt.x: New file.
* gcc.dg/pow-sqrt-1.c: New test.
* gcc.dg/pow-sqrt-2.c: Likewise.
* gcc.dg/pow-sqrt-3.c: Likewise.
David Malcolm [Wed, 13 May 2015 13:58:18 +0000 (13:58 +0000)]
libcpp/input.c: Add a way to visualize the linemaps (-fdump-internal-locations)
gcc/ChangeLog:
* common.opt (fdump-internal-locations): New option.
* input.c: Include diagnostic-core.h.
(get_end_location): New function.
(write_digit): New function.
(write_digit_row): New function.
(dump_location_range): New function.
(dump_labelled_location_range): New function.
(dump_location_info): New function.
* input.h (dump_location_info): New prototype.
* toplev.c (compile_file): Handle flag_dump_locations.
libcpp/ChangeLog:
* include/line-map.h (source_location): Add a reference to
location-example.txt to the descriptive comment.
* location-example.txt: New file.
Jonathan Wakely [Wed, 13 May 2015 13:12:48 +0000 (14:12 +0100)]
tuple (apply): Handle pointers to member (LWG 2418).
* include/experimental/tuple (apply): Handle pointers to member (LWG
2418).
* include/std/functional (_Mem_fn_base): Make constructors constexpr.
(_Maybe_wrap_member_pointer::__do_wrap): Make constexpr.
* testsuite/experimental/tuple/apply.cc: Test pointer to member.
combine.c (simplify_set): When generating a CC set...
* combine.c (simplify_set): When generating a CC set, if the
source already is in the correct mode, do not wrap it in a
compare. Simplify the rest of that code.
David Malcolm [Wed, 13 May 2015 10:24:30 +0000 (10:24 +0000)]
line-map.h: move linemap_assert and friends higher up within the file
libcpp/ChangeLog:
* include/line-map.h (linemap_assert): Move up within the file to
before all of the map accessor macros.
(linemap_assert_fails): Likewise.
(linemap_check_ordinary): Likewise.
(linemap_macro_expansion_map_p): Likewise.
Tom de Vries [Wed, 13 May 2015 09:06:18 +0000 (09:06 +0000)]
Gimplify va_arg ap based on do_deref
2015-05-13 Tom de Vries <tom@codesourcery.com>
PR tree-optimization/66010
* gimplify.h (gimplify_va_arg_internal): Remove declaration.
* gimplify.c (gimplify_va_arg_internal): Remove and inline into ...
* tree-stdarg.c (expand_ifn_va_arg_1): ... here. Choose between lval
and rval based on do_deref.
Ilya Enkovich [Wed, 13 May 2015 08:29:14 +0000 (08:29 +0000)]
re PR target/65103 ([i386] GOTOFF relocation is not propagated into address expression)
gcc/
PR target/65103
* config/i386/i386.c (ix86_rtx_costs): We want to propagate
link time constants into adress expressions and therefore set
their cost to 0.
Jakub Jelinek [Wed, 13 May 2015 08:09:01 +0000 (10:09 +0200)]
re PR target/66112 (__builtin_mul_overflow for int16_t emits poor code)
PR target/66112
* config/i386/i386.md (mulv<mode>4, umulv<mode>4, *umulv<mode>4):
Use SWI248 iterator instead of SWI.
(*mulv<mode>4_1): Use SWI48 instead of SWI. Simplify output template.
Use eq_attr "alternative" "0" instead of match_test in
length_immediate attribute computation.
(*mulvhi4, *mulvhi4_1): New define_insns.
re PR rtl-optimization/64616 (Redundant ldr when accessing var inside and outside a loop)
2015-05-13 Thomas Preud'homme <thomas.preudhomme@arm.com>
gcc/
PR rtl-optimization/64616
* loop-invariant.c (can_move_invariant_reg): New.
(move_invariant_reg): Call above new function to decide whether
instruction can just be moved, skipping creation of temporary
register.
gcc/testsuite/
PR rtl-optimization/64616
* gcc.dg/loop-8.c: New test.
* gcc.dg/loop-9.c: New test.
Jan Hubicka [Wed, 13 May 2015 03:35:09 +0000 (05:35 +0200)]
re PR target/66047 (vlc compilation failure with target attribute)
PR target/66047
* i386.c (ix86_function_sseregparm): Only return -1 if local function
with implied regparm is called from -mno-sse function.
(init_cumulative_args): Output error if ix86_function_sseregparm
return -1 and SSE register would be needed.
(function_arg_advance_32): Likewise.
(function_arg_32): Likewise.
* i386.h (ix86_args): Add decl field.
* gcc.target/i386/pr66047.c: New testcase.
Jan Hubicka [Wed, 13 May 2015 02:57:27 +0000 (04:57 +0200)]
re PR ipa/65873 (Failure to inline always_inline memcpy)
PR ipa/65873
* ipa-inline.c (can_inline_edge_p): Allow early inlining of always
inlines across optimization boundary.
* testsuite/gcc.c-torture/compile/pr65873.c: New testcase.
Jason Merrill [Wed, 13 May 2015 01:11:13 +0000 (21:11 -0400)]
mmix.c, msp430.c: Add space between string literal and macro name.
gcc/
* config/mmix/mmix.c, config/msp430/msp430.c: Add space between
string literal and macro name.
gcc/ada/
* sigtramp-vxworks.c: Add space between string literal and macro
name.
Thomas Koenig [Tue, 12 May 2015 21:12:55 +0000 (21:12 +0000)]
re PR fortran/66111 (ICE with matmul and vector subscripts)
2015-05-12 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/66111
* frontend-passes.c (has_dimen_vector_ref): New function.
(inline_matmul_assign): Use it to return early in case
of unhandled vector subscripts.
2015-05-12 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/66111
* gfortran.dg/inline_matmul_10.f90: New test.
gcc/c-family/ChangeLog:
* c-common.h (warn_for_misleading_indentation): New prototype.
* c-indentation.c: New file.
* c.opt (Wmisleading-indentation): New option.
gcc/c/ChangeLog:
* c-parser.c (c_parser_if_body): Add param "if_loc", use it
to add a call to warn_for_misleading_indentation.
(c_parser_else_body): Likewise, adding param "else_loc".
(c_parser_if_statement): Check for misleading indentation.
(c_parser_while_statement): Likewise.
(c_parser_for_statement): Likewise.
gcc/cp/ChangeLog:
* parser.c (cp_parser_selection_statement): Add location and
guard_kind arguments to calls to
cp_parser_implicitly_scoped_statement.
(cp_parser_iteration_statement): Likewise for calls to
cp_parser_already_scoped_statement.
(cp_parser_implicitly_scoped_statement): Add "guard_loc" and
"guard_kind" params; use them to warn for misleading
indentation.
(cp_parser_already_scoped_statement): Likewise.
gcc/testsuite/ChangeLog:
* c-c++-common/Wmisleading-indentation.c: New testcase.
* c-c++-common/Wmisleading-indentation-2.c: New testcase.
* c-c++-common/Wmisleading-indentation-2.md: New file.
libcpp/ChangeLog:
* directives.c (do_line): Set seen_line_directive on line_table.
(do_linemarker): Likewise.
* include/line-map.h (struct line_maps): Add new field
"seen_line_directive".
Andrew MacLeod [Tue, 12 May 2015 20:01:47 +0000 (20:01 +0000)]
re PR target/65697 (__atomic memory barriers not strong enough for __sync builtins)
2015-05-12 Andrew MacLeod <amacleod@redhat.com>
PR target/65697
* coretypes.h (MEMMODEL_SYNC, MEMMODEL_BASE_MASK): New macros.
(enum memmodel): Add SYNC_{ACQUIRE,RELEASE,SEQ_CST}.
* tree.h (memmodel_from_int, memmodel_base, is_mm_relaxed,
is_mm_consume,is_mm_acquire, is_mm_release, is_mm_acq_rel,
is_mm_seq_cst, is_mm_sync): New accessor functions.
* builtins.c (expand_builtin_sync_operation,
expand_builtin_compare_and_swap): Use MEMMODEL_SYNC_SEQ_CST.
(expand_builtin_sync_lock_release): Use MEMMODEL_SYNC_RELEASE.
(get_memmodel, expand_builtin_atomic_compare_exchange,
expand_builtin_atomic_load, expand_builtin_atomic_store,
expand_builtin_atomic_clear): Use new accessor routines.
(expand_builtin_sync_synchronize): Use MEMMODEL_SYNC_SEQ_CST.
* optabs.c (expand_compare_and_swap_loop): Use MEMMODEL_SYNC_SEQ_CST.
(maybe_emit_sync_lock_test_and_set): Use new accessors and
MEMMODEL_SYNC_ACQUIRE.
(expand_sync_lock_test_and_set): Use MEMMODEL_SYNC_ACQUIRE.
(expand_mem_thread_fence, expand_mem_signal_fence, expand_atomic_load,
expand_atomic_store): Use new accessors.
* emit-rtl.c (need_atomic_barrier_p): Add additional enum cases.
* tsan.c (instrument_builtin_call): Update check for memory model beyond
final enum to use MEMMODEL_LAST.
* c-family/c-common.c: Use new accessor for memmodel_base.
* config/aarch64/aarch64.c (aarch64_expand_compare_and_swap): Use new
accessors.
* config/aarch64/atomics.md (atomic_load<mode>,atomic_store<mode>,
arch64_load_exclusive<mode>, aarch64_store_exclusive<mode>,
mem_thread_fence, *dmb): Likewise.
* config/alpha/alpha.c (alpha_split_compare_and_swap,
alpha_split_compare_and_swap_12): Likewise.
* config/arm/arm.c (arm_expand_compare_and_swap,
arm_split_compare_and_swap, arm_split_atomic_op): Likewise.
* config/arm/sync.md (atomic_load<mode>, atomic_store<mode>,
atomic_loaddi): Likewise.
* config/i386/i386.c (ix86_destroy_cost_data, ix86_memmodel_check):
Likewise.
* config/i386/sync.md (mem_thread_fence, atomic_store<mode>): Likewise.
* config/ia64/ia64.c (ia64_expand_atomic_op): Add new memmodel cases and
use new accessors.
* config/ia64/sync.md (mem_thread_fence, atomic_load<mode>,
atomic_store<mode>, atomic_compare_and_swap<mode>,
atomic_exchange<mode>): Use new accessors.
* config/mips/mips.c (mips_process_sync_loop): Likewise.
* config/pa/pa.md (atomic_loaddi, atomic_storedi): Likewise.
* config/rs6000/rs6000.c (rs6000_pre_atomic_barrier,
rs6000_post_atomic_barrier): Add new cases.
(rs6000_expand_atomic_compare_and_swap): Use new accessors.
* config/rs6000/sync.md (mem_thread_fence): Add new cases.
(atomic_load<mode>): Add new cases and use new accessors.
(store_quadpti): Add new cases.
* config/s390/s390.md (mem_thread_fence, atomic_store<mode>): Use new
accessors.
* config/sparc/sparc.c (sparc_emit_membar_for_model): Use new accessors.
* doc/extend.texi: Update docs to indicate 16 bits are used for memory
model, not 8.
Jan Hubicka [Tue, 12 May 2015 18:30:40 +0000 (20:30 +0200)]
ipa-devirt.c (type_with_linkage_p): New function.
* ipa-devirt.c (type_with_linkage_p): New function.
(type_in_anonymous_namespace_p): Move here from tree.c; assert that
type has linkage.
(odr_type_p): Move here from ipa-utils.h; use type_with_linkage_p.
(can_be_name_hashed_p): Simplify.
(hash_odr_name): Check that type has linkage before checking if it is
anonymous.
(types_same_for_odr): Likewise.
(odr_name_hasher::equal): Likewise.
(odr_subtypes_equivalent_p): Likewise.
(warn_types_mismatch): Likewise.
(get_odr_type): Likewise.
(odr_types_equivalent_p): Fix checking of TYPE_MAIN_VARIANT.
* ipa-utils.h (odr_type_p): Move offline.
* tree.c (need_assembler_name_p): Fix handling of types
without linkages.
(type_in_anonymous_namespace_p): Move to ipa-devirt.c
David Malcolm [Tue, 12 May 2015 17:29:32 +0000 (17:29 +0000)]
Move global state in timevar.c to a new "timer" class
gcc/ChangeLog:
* timevar.c (timevar_enable): Delete in favor of...
(g_timer): New global.
(struct timevar_def): Move to timevar.h inside class timer.
(struct timevar_stack_def): Likewise.
(timevars): Delete global in favor of field "m_timevars" within
class timer in timevar.h
(stack): Likewise, in favor of field "m_stack".
(unused_stack_instances): Likewise, in favor of field
"m_unused_stack_instances".
(start_time): Likewise, in favor of field "m_start_time".
(get_time): Eliminate check for timevar_enable.
(timer::timer): New function, built from part of timevar_init.
(timevar_init): Rewrite idempotency test from using
"timevar_enable" bool to using dynamic allocation of "g_timer".
Move rest of implementation into timer's constructor.
(timevar_push_1): Rename to...
(timer::push): ...this, adding "m_" prefixes to variables that
are now fields of timer.
(timevar_pop_1): Likewise, rename to...
(timer::pop): ...this, and add "m_" prefixes.
(timevar_start): Replace test for "timevar_enable" with one for
"g_timer", and move bulk of implementation to...
(timer::start): ...here, adding "m_" prefixes.
(timevar_stop): Likewise, from here...
(timer::stop): ...to here.
(timevar_cond_start): Likewise, from here...
(timer::cond_start): ...to here.
(timevar_cond_stop): Likewise, from here...
(timer::cond_stop): ...to here.
(validate_phases): Rename to...
(timer::validate_phases): ...this, and add "m_" prefixes. Make
locals "total" and "tv" const.
(timevar_print): Rename to...
(timer::print): ...this, and add "m_" prefixes. Make locals
"total" and "tv" const. Eliminate test for timevar_enable.
* timevar.h (timevar_enable): Eliminate.
(g_timer): New declaration.
(timevar_push_1): Eliminate.
(timevar_pop_1): Eliminate.
(timevar_print): Eliminate.
(class timer): New class.
(timevar_push): Rewrite to use g_timer.
(timevar_pop): Likewise.
* toplev.c (toplev::~toplev): Likewise.
Arnaud Charlet [Tue, 12 May 2015 15:13:06 +0000 (17:13 +0200)]
[multiple changes]
2015-05-12 Ed Schonberg <schonberg@adacore.com>
* sem_ch5.adb (Analyze_Iterator_Specifications): Additional
legality checks for array and container iterators:
a) The domain of iteration cannot be a component that depends
on discriminants of a mutable object. The check was recently
added for element iterators.
b) The cursor type cannot be a limited type at the point of the
iteration, because the cursor will be assigned to in the body
of the loop.
2015-05-12 Robert Dewar <dewar@adacore.com>
* freeze.adb (Freeze_Record_Type): Make sure that if we have
aspect Iterator_Element, then we have either Constant_Indexing
or Variable_Indexing.
Arnaud Charlet [Tue, 12 May 2015 15:11:29 +0000 (17:11 +0200)]
[multiple changes]
2015-05-12 Ed Schonberg <schonberg@adacore.com>
* a-coormu.ads, a-coormu.adb: Add Indexing aspect, Reference_Type,
and Reference_Control_Type to support element iterators over
ordered multisets.
* a-ciormu.ads, a-ciormu.adb: Ditto for
indefinite_ordered_multisets.
* exp_ch4.adb (Expand_N_Expression_With_Actions): Force
the evaluation of the EWA expression. Code cleanup.
(Process_Transient_Object): Code cleanup.
* exp_util.adb (Is_Aliased): Controlled transient objects found
within EWA nodes are not aliased.
(Is_Finalizable_Transient): Iterators are not finalizable transients.
Arnaud Charlet [Tue, 12 May 2015 15:00:49 +0000 (17:00 +0200)]
[multiple changes]
2015-05-12 Pierre-Marie de Rodat <derodat@adacore.com>
* sem_ch10.adb (Sem_Ch10.Analyze_Proper_Body): Generate SCOs
for subunit in generic units.
2015-05-12 Robert Dewar <dewar@adacore.com>
* sem_elab.adb (Check_A_Call): Avoid checking internal call
from Valid_Scalars
2015-05-12 Ed Schonberg <schonberg@adacore.com>
* sem_ch6.adb (Process_Formals): An untagged incomplete type
is legal in the profile of a null procedure.
2015-05-12 Ed Schonberg <schonberg@adacore.com>
* sem_ch12.adb (Validate_Derived_Type_Instance): Handle properly
the checks on a derived formal whose parent type is a previous
formal that is not a derived type.
2015-05-12 Robert Dewar <dewar@adacore.com>
* aspects.ads, aspects.adb: Add entries for aspect Volatile_Full_Access
* einfo.adb (Has_Volatile_Full_Access): New flag.
(Has_Volatile_Full_Access): New flag.
* einfo.ads (Has_Volatile_Full_Access): New flag.
* par-prag.adb: Add dummy entry for Volatile_Full_Access.
* sem_prag.adb (Analyze_Pragma, case Volatile_Full_Access):
Implement new pragma.
* snames.ads-tmpl: Add entries for pragma Volatile_Full_Access.
2015-05-12 Robert Dewar <dewar@adacore.com>
* targparm.ads: Minor reformatting.
2015-05-12 Robert Dewar <dewar@adacore.com>
* a-reatim.adb (Time_Of): Properly detect overflow when TS = 0.0.
* a-reatim.ads: Minor reformatting.
* einfo.ads: Update the documentation of flags
Has_Inherited_Default_Init_Cond and Has_Default_Init_Cond.
2015-05-12 Robert Dewar <dewar@adacore.com>
* impunit.adb: Add entry for a-dhfina.ads
* a-dhfina.ads: New file.
2015-05-12 Ed Schonberg <schonberg@adacore.com>
* exp_ch5.adb (Expand_Iterator_Loop_Over_Array): if the array
type has convention Fortran, a multidimensional iterator varies
the first dimension fastest.
combine.c (recog_for_combine_1): New function, factored out from recog_for_combine.
* combine.c (recog_for_combine_1): New function, factored out
from recog_for_combine.
(change_zero_ext): New function.
(recog_for_combine): If recog fails, try again with the pattern
modified by change_zero_ext; if that still fails, restore the
pattern.