Commit Graph

163752 Commits

Author SHA1 Message Date
Jonathan Wakely
86fc6ec9f3 Implement LWG 2905 changes to constrain unique_ptr constructors
LWG DR 2905 says that is_constructible_v<unique_ptr<P, D>, P, D const &>
should be false when D is not copy constructible. This commit implements
the changes from the DR and simplifies the signatures as per
https://github.com/cplusplus/draft/issues/1530

	* include/bits/unique_ptr.h (__uniq_ptr_impl): Add assertions to
	check deleter type.
	(unique_ptr::unique_ptr(pointer, const deleter_type&)): Add copy
	constructible constraint.
	(unique_ptr::unique_ptr(pointer, deleter_type&&)): Disable for
	deleters of reference type and add move constructible constraint.
	(unique_ptr::unique_ptr(pointer, remove_reference_t<deleter_type>&&)):
	Disable for deleters of non-reference type. Define as deleted.
	(unique_ptr<T[], D>): Likewise.
	* testsuite/20_util/unique_ptr/assign/48635_neg.cc: Replace dg-error
	directives with unstable line numbers with dg-prune-output.
	* testsuite/20_util/unique_ptr/cons/cv_qual_neg.cc: Likewise.
	* testsuite/20_util/unique_ptr/cons/lwg2905.cc: New test.
	* testsuite/20_util/unique_ptr/specialized_algorithms/swap_cxx17.cc:
	Make deleter types invocable.

From-SVN: r264206
2018-09-11 11:55:49 +01:00
Aldy Hernandez
9356a18eb4 Fix typo in my last ChangeLog entry.
From-SVN: r264205
2018-09-11 10:36:20 +00:00
Andrew Stubbs
ad172f720d Add sorry_at diagnostic function.
The plain "sorry" diagnostic only gives the "current" location, which is
typically the last line of the function or translation unit by time we get to
the back end.

GCN uses "sorry" to report unsupported language features, such as static
constructors, so it's useful to have a "sorry_at" variant.

This patch implements "sorry_at" according to the pattern of the other "at"
variants.

2018-09-11  Andrew Stubbs  <ams@codesourcery.com>

	gcc/
	* diagnostic-core.h (sorry_at): New prototype.
	* diagnostic.c (sorry_at): New function.

From-SVN: r264204
2018-09-11 10:26:57 +00:00
Aldy Hernandez
075cdac363 tree-vrp (extract_range_from_binary_expr_1): Treat all divisions by zero as VR_UNDEFINED.
* tree-vrp (extract_range_from_binary_expr_1): Treat all divisions
	by zero as VR_UNDEFINED.

From-SVN: r264203
2018-09-11 10:19:45 +00:00
Joey Ye
a93a92aa53 gcov.exp (verify-intermediate): Add missing close.
2018-09-11  Joey Ye  <joey.ye@arm.com>

    * lib/gcov.exp (verify-intermediate): Add missing close.

From-SVN: r264202
2018-09-11 08:55:25 +00:00
Janus Weil
f5da9bfb9e re PR fortran/86830 (Contiguous array pointer function result not recognized as contiguous)
fix PR 86830

2018-09-11  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/86830
	* expr.c (gfc_is_simply_contiguous): Handle type-bound procedure calls
	with non-polymorphic objects.

2018-09-11  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/86830
	* gfortran.dg/typebound_call_30.f90: New test case.

From-SVN: r264201
2018-09-11 08:33:39 +02:00
GCC Administrator
672ce110a8 Daily bump.
From-SVN: r264200
2018-09-11 00:16:33 +00:00
Janus Weil
d4beaf2a22 re PR fortran/85395 ([F03] private clause contained in derived type acquires spurious scope)
fix PR 85395

2018-09-10  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/85395
	* decl.c (match_binding_attributes): Use correct default accessibility
	for procedure pointer components.

2018-09-10  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/85395
	* gfortran.dg/proc_ptr_comp_52.f90: New test case.

From-SVN: r264196
2018-09-10 23:25:33 +02:00
Uros Bizjak
6f2dde9cf6 i386.md (<sincos>xf2): Rename from *<sincos>xf2_i387.
* config/i386/i386.md (<sincos>xf2): Rename from *<sincos>xf2_i387.
	(*<sincos>_extend<mode>xf2_i387): Remove insn pattern.
	(<sincos>mode2): New expander.
	(sincos_extend<mode>xf3_i387): Remove insn pattern.
	(sincos -> sin, cos splitters): Remove splitter patterns.
	(sincos<mode>3): Change operand 2 predicate to general_operand.
	Extend operand 2 to XFmode and generate sincosxf3 insn.
	(fptanxf4_i387): Change mode of operands 0 and 3 to SFmode.
	Change operand 3 predicate to const1_operand.
	(fptan_extend<mode>xf4_i387): Remove insn pattern.
	(tanxf2): Update operands in the call to fptanxf4_i387.
	(tan<mode>2): Change operand 1 predicate to general_operand.
	Extend operand 1 to XFmode and generate tanxf3 insn.
	(atan2xf3): Rename from *fpatanxf3_i387.
	(fpatan_extend<mode>xf3_i387): Remove insn pattern.
	(atan2xf3): Remove expander.
	(atan2<mode<3):  Change operand 1 and 2 predicates to general_operand.
	Extend operands 1 and 2 to XFmode and generate atan2xf3 insn.
	(atan<mode>2): Change operand 1 predicate to general_operand.
	Extend operand 1 to XFmode and generate atanxf3 insn.

From-SVN: r264195
2018-09-10 21:13:49 +02:00
Uros Bizjak
dfc741557e i386.md (x87/SSE constant load splitter): Use memory_operand instead of nonimmediate_operand for input operand predicate.
* config/i386/i386.md (x87/SSE constant load splitter): Use
	memory_operand instead of nonimmediate_operand for input operand
	predicate.

From-SVN: r264194
2018-09-10 20:46:11 +02:00
Marek Polacek
fe56b8a294 class.c (build_vtbl_ref): Remove.
* class.c (build_vtbl_ref): Remove.
	(build_vtbl_ref_1): Rename to build_vtbl_ref.
	(build_vfn_ref): Call build_vtbl_ref instead of build_vtbl_ref_1.

From-SVN: r264193
2018-09-10 14:49:18 +00:00
GCC Administrator
0fa6c49be6 Daily bump.
From-SVN: r264189
2018-09-10 00:16:42 +00:00
Uros Bizjak
4801cc61b1 i386.md (float partial SSE register stall splitter): Move splitter near its instruction pattern.
* config/i386/i386.md (float partial SSE register stall splitter): Move
	splitter near its instruction pattern.
	(float_extend partial SSE register stall splitter): Ditto.
	(float_truncate partial SSE register stall splitter): Ditto.

From-SVN: r264185
2018-09-09 23:32:08 +02:00
Hans-Peter Nilsson
8eb7aec132 re PR target/86794 (mmix port needs updating for CVE-2017-5753)
PR target/86794
	* config/mmix/mmix.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): Redefine
	to speculation_safe_value_not_needed.

From-SVN: r264184
2018-09-09 18:13:18 +00:00
Hans-Peter Nilsson
8023c7a49c re PR target/85666 (gcc-8.0.1 fails to build mmix target: gcc/libgcc/libgcc2.h:203:20: internal compiler error: in leaf_function_p, at final.c:4488)
PR target/85666
	* config/mmix/mmix.c (mmix_assemble_integer): Handle byte-size
	non-CONST_INT rtx:es using assemble_integer_with_op ".byte".

From-SVN: r264183
2018-09-09 18:12:14 +00:00
Hans-Peter Nilsson
a236f9d640 re PR target/85666 (gcc-8.0.1 fails to build mmix target: gcc/libgcc/libgcc2.h:203:20: internal compiler error: in leaf_function_p, at final.c:4488)
PR target/85666
	* config/mmix/mmix.c (MMIX_CFUN_NEEDS_SAVED_EH_RETURN_ADDRESS): Don't
	call leaf_function_p, instead use has_hard_reg_initial_val.

From-SVN: r264182
2018-09-09 18:05:48 +00:00
Ian Lance Taylor
b8106e8fd7 compiler: make sure type descriptor initializers go in .rodata
When creating type descriptor variables, the compiler (specifically
    Type::make_type_descriptor_var) invokes the immutable_struct() and
    immutable_struct_set_init() back end methods, so as to insure that
    these items go into the ".rodata" section of the generate object file.
    The expression initializers for these variables can contain nested
    subexpressions, however, and these subexpressions were not always
    being placed into .rodata. This patch changes the backend-gen code for
    slice initializers to emit implicit variables into .rodata if those
    initializers are part of a type descriptor init.
    
    Reviewed-on: https://go-review.googlesource.com/132596

From-SVN: r264181
2018-09-09 13:26:17 +00:00
Nathan Sidwell
04dad37c39 [PATCH] internalize a driver fn
https://gcc.gnu.org/ml/gcc-patches/2018-09/msg00462.html
	* gcc.h (pfatal_with_name): Don't declare here.
	* gcc.c (pfatal_with_name): Make static.

From-SVN: r264178
2018-09-09 07:42:17 +00:00
Xianmiao Qu
6d3c2b0a04 csky.md (*cskyv2_adddi3, [...]): Add earlyclobber.
2018-09-09  Xianmiao Qu  <xianmiao_qu@c-sky.com>

	* config/csky/csky.md (*cskyv2_adddi3, *cskyv2_subdi3): Add
	earlyclobber.

From-SVN: r264177
2018-09-09 04:06:16 +00:00
GCC Administrator
246ec6dcaa Daily bump.
From-SVN: r264176
2018-09-09 00:16:52 +00:00
Marek Polacek
e5ba9b702f PR c++/87150 - wrong ctor with maybe-rvalue semantics.
* call.c (struct conversion): Update commentary.
	(standard_conversion): Set rvaluedness_matches_p if LOOKUP_PREFER_RVALUE
	for ck_base.

	* g++.dg/cpp0x/move-return2.C: New test.

From-SVN: r264172
2018-09-08 17:36:08 +00:00
Jason Merrill
3075affdbc PR c++/86678 - constexpr function with non-constant after return.
In this testcase, the call to f() can never be a constant
	expression, but that's not a problem because it isn't always
	reached by calls to g.  We were wrongly rejecting this because
	potential_constant_expression_1 lacked the jump tracking that
	cxx_eval_constant_expression has.  So this patch adds a simpler
	version of that tracking.

	* constexpr.c (potential_constant_expression_1): Add jump_target.
	(breaks): Check for BREAK_STMT.
	(continues): Check for CONTINUE_STMT.

From-SVN: r264171
2018-09-08 12:00:02 -04:00
Marek Polacek
61856507f4 cxx-pretty-print.c (cxx_pretty_printer::statement): Handle RANGE_FOR_INIT_STMT.
* cxx-pretty-print.c (cxx_pretty_printer::statement) <case
	RANGE_FOR_SMT>: Handle RANGE_FOR_INIT_STMT.

From-SVN: r264170
2018-09-08 14:31:24 +00:00
Marek Polacek
e00dfa841f array-init.c: Add dg-prune-output.
* c-c++-common/array-init.c: Add dg-prune-output.
	* g++.dg/cpp0x/lambda/lambda-const-this.C: Add dg-warning.
	* g++.dg/cpp0x/lambda/lambda-in-class-neg.C: Likewise.
	* g++.dg/cpp0x/lambda/lambda-in-class.C: Likewise.
	* g++.dg/cpp0x/lambda/lambda-nested.C: Likewise.
	* g++.dg/cpp0x/lambda/lambda-nsdmi1.C: Likewise.
	* g++.dg/cpp0x/lambda/lambda-nsdmi4.C: Likewise.
	* g++.dg/cpp0x/lambda/lambda-this.C: Likewise.
	* g++.dg/cpp0x/lambda/lambda-this17.C: Likewise.
	* g++.dg/cpp0x/lambda/lambda-this18.C: Likewise.
	* g++.dg/cpp0x/lambda/lambda-this2.C: Likewise.
	* g++.dg/cpp0x/lambda/lambda-this8.C: Likewise.
	* g++.dg/cpp1y/pr64382.C: Likewise.
	* g++.dg/cpp1y/pr77739.C: Likewise.
	* g++.dg/cpp1z/lambda-this1.C: Likewise.
	* g++.dg/cpp1z/lambda-this2.C: Likewise.
	* g++.dg/template/crash84.C: Adjust dg-error.

From-SVN: r264169
2018-09-08 14:27:25 +00:00
John David Anglin
208121b583 re PR rtl-optimization/85458 (FAIL: gcc.dg/pr83480.c (internal compiler error))
PR rtl-optimization/85458
	* sel-sched.c (sel_target_adjust_priority): Allow backend adjust
	priority hook to reduce the priority of EXPR.

From-SVN: r264168
2018-09-08 13:20:23 +00:00
GCC Administrator
07eef95282 Daily bump.
From-SVN: r264167
2018-09-08 00:16:42 +00:00
Janne Blomqvist
d4c0eb58b7 Remove unused init_unsigned_integer function.
As pointed out by Bernhard Reutner-Fischer, this function is unused
since the fix for PR 53796 in November 2017.

2018-09-07  Janne Blomqvist  <jb@gcc.gnu.org>

        * runtime/environ.c (init_unsigned_integer): Remove.

From-SVN: r264163
2018-09-07 21:59:50 +03:00
Uros Bizjak
785425e152 * config/i386/i386.md (float<SWI48x:mode><MODEF:mode>2) Enable
DImode for x87 on 32bit targets.  Conditionally disable x87 modes
	with X87_ENABLE_FLOAT.  Remove preparation code.
	(*float<SWI48:mode><MODEF:mode>2): Rename from
	*float<SWI48:mode><MODEF:mode>2_mixed.  Handle x87, SSE and mixed
	math using "enabled" attribute.
	(*floatdi<MODEF:mode>2_i387): Rename from
	*float<SWI48x:mode><MODEF:mode>2_i387.  Handle only DImode and
	enable for 32bit targets only.
	(floatdi<X87MODEF:mode>2_i387_with_xmm pre-reload splitter): New
	splitter.
	(floatdi<X87MODEF:mode>2_i387_with_xmm): Use register_operand
	as operand 1 predicate.  Rewrite as define_insn_and_split.
	(floatdi<X87MODEF:mode>2_i387_with_xmm memory input splitter): Remove.

From-SVN: r264160
2018-09-07 18:01:04 +02:00
Marek Polacek
6435284ea6 direct-enum-init1.C: Remove "inside" from diagnostic messages.
* g++.dg/cpp1z/direct-enum-init1.C: Remove "inside" from diagnostic
	messages.

From-SVN: r264159
2018-09-07 15:52:54 +00:00
Marek Polacek
8112667c8c PR c++/87152 - range-based for loops with initializer broken in templates.
* constexpr.c (potential_constant_expression_1) <case RANGE_FOR_STMT>:
	Recur into RANGE_FOR_INIT_STMT.
	* cp-tree.def: Add RANGE_FOR_INIT_STMT to RANGE_FOR_STMT.
	* cp-tree.h (RANGE_FOR_INIT_STMT): Define.
	* dump.c (cp_dump_tree) <case RANGE_FOR_STMT>: Also dump
	RANGE_FOR_INIT_STMT.
	* pt.c (tsubst_expr) <case RANGE_FOR_STMT>: Recur into
	RANGE_FOR_INIT_STMT.
	* semantics.c (begin_range_for_stmt): Adjust call to build_stmt.
	Do put the init statement in RANGE_FOR_INIT_STMT.
	(finish_range_for_decl): Pop it for templates.

	* g++.dg/cpp2a/range-for11.C: New test.
	* g++.dg/cpp2a/range-for12.C: New test.
	* g++.dg/cpp2a/range-for13.C: New test.
	* g++.dg/cpp2a/range-for14.C: New test.
	* g++.dg/cpp2a/range-for15.C: New test.
	* g++.dg/cpp2a/range-for16.C: New test.
	* g++.dg/cpp2a/range-for17.C: New test.
	* g++.dg/cpp2a/range-for18.C: New test.
	* g++.dg/parse/error61.C (foo): Adjust dg-error.

From-SVN: r264158
2018-09-07 14:12:48 +00:00
Jason Merrill
6bf9284fbf Fix C++17 expected errors for pointer to member function template args.
* g++.dg/template/ptrmem20.C: Adjust expected diagnostic.
* g++.dg/template/ptrmem8.C: Likewise.

From-SVN: r264157
2018-09-07 09:12:24 -04:00
GCC Administrator
446a665106 Daily bump.
From-SVN: r264155
2018-09-07 00:16:44 +00:00
Uros Bizjak
b3892454f7 reg-stack.c (get_true_reg): Reorder to fallthru to FLOAT case.
* reg-stack.c (get_true_reg) <case FLOAT_TRUNCATE>: Reorder
	to fallthru to FLOAT case.

From-SVN: r264151
2018-09-06 23:39:47 +02:00
Will Schmidt
bd46d32c51 re PR target/86731 (Miscompiles vec_sl at -O3 with -fwrapv on ppc64el)
[gcc]

2018-09-06  Will Schmidt  <will_schmidt@vnet.ibm.com>

	PR target/86731
	* config/rs6000/rs6000.c (rs6000_gimple_fold_builtin): Update logic
	around folding of vec_sl to handle out of range shift values.

[testsuite]

2018-08-15  Will Schmidt  <will_schmidt@vnet.ibm.com>

	PR target/86731
	* gcc.target/powerpc/pr86731.c: New test.
	* gcc.target/powerpc/pr86731-longlong.c: New test.
	* gcc.target/powerpc/pr86731-fwrapv.c: New test.
	* gcc.target/powerpc/pr86731-fwrapv-longlong.c: New test.
	* gcc.target/powerpc/pr86731-nogimplefold.c: New test.
	* gcc.target/powerpc/pr86731-nogimplefold-longlong.c: New test.

From-SVN: r264150
2018-09-06 19:47:06 +00:00
Uros Bizjak
423c2a269e i386.md (fix_trunc<mode>_fisttp_i387_1): Remove.
* config/i386/i386.md (fix_trunc<mode>_fisttp_i387_1): Remove.
	Update callers to gen_fix_trunc<mode>_i387_fisttp
	(fix_trunc<mode>_i387_fisttp): Change operand 0 predicate to
	nonimmediate_operand.
	(fix_trunc<mode>_i387_fisttp_with_temp): Remove insn pattern
	and corresponding splitters.
	(*fix_trunc<mode>_i387_1): Always expand with fix_trunc<mode>_i387.
	(fix_truncdi_i387): Change operand 0 predicate to nonimmediate_operand.
	(fix_truncdi_i387_with_temp): Remove insn pattern
	and corresponding splitters.
	(fix_trunc<mode>_i387): Change operand 0 predicate to
	nonimmediate_operand.
	(fix_trunc<mode>_i387_with_temp): Remove insn pattern
	and corresponding splitters.
	(*fistdi2_1): Remove.
	(fistdi2): Ditto.
	(fistdi2_with_temp): Remove insn pattern and corresponding splitters.
	(lrintxfdi2): Remove expander.  Reimplement as define_insn.
	(*fist<mode>2_1): Remove.
	(fist<mode>2): Ditto.
	(fist<mode>2_with_temp): Remove insn pattern and corresponding
	splitters.
	(lrintxf<mode>2): Remove expander.  Reimplement as define_insn.
	(*fist<mode>2_<rounding>_1): Always expand with fist<mode>2_<rounding>.
	(fistdi2_<rounding>): Change operand 0 predicate to
	nonimmediate_operand.
	(fistdi2_<rounding>_with_temp): Remove insn pattern
	and corresponding splitters.
	(fist<mode>2_<rounding>): Change operand 0 predicate to
	nonimmediate_operand.
	(fist<mode>2_<rounding>_with_temp): Remove insn pattern
	and corresponding splitters.

	(*fixuns_trunc<mode>si2_avx512f_zext): Depend on TARGET_SSE_MATH.

From-SVN: r264148
2018-09-06 20:53:01 +02:00
Bernd Edlinger
6d9001072d varasm.c (output_constructor_regular_field): Check TYPE_SIZE_UNIT of the init value.
* varasm.c (output_constructor_regular_field): Check TYPE_SIZE_UNIT of
	the init value.

	* c-common.c (complete_flexible_array_elts): New helper function.
	* c-common.h (complete_flexible_array_elts): Declare.

	* c-decl.c (finish_decl): Call complete_flexible_array_elts.

	* decl.c (check_initializer): Call cp_complete_array_type.

From-SVN: r264147
2018-09-06 09:39:48 -06:00
Will Schmidt
6847c656b4 rs6000.c (rs6000_gimple_fold_builtin): Add support for early gimple folding of vec_splat().
[gcc]

2018-09-06  Will Schmidt  <will_schmidt@vnet.ibm.com>

	* config/rs6000/rs6000.c (rs6000_gimple_fold_builtin): Add support for
	early gimple folding of vec_splat().
	* tree-vect-generic.c: Remove static from tree_vec_extract() definition.
	* gimple-fold.h: Add an extern define for tree_vec_extract().

From-SVN: r264146
2018-09-06 15:34:58 +00:00
Will Schmidt
84bde0bffe rs6000.c (fold_mergehl_helper): Add types_compatible_p wrappers around TREE_TYPE comparisons.
[gcc]

2018-08-20  Will Schmidt  <will_schmidt@vnet.ibm.com>

	* config/rs6000/rs6000.c (fold_mergehl_helper): Add types_compatible_p
	wrappers around TREE_TYPE comparisons.

From-SVN: r264145
2018-09-06 13:52:14 +00:00
Ilya Leoshkevich
bdb57bcb54 S/390: Prohibit SYMBOL_REF in UNSPECV_CAS
Inhibit constant propagation inlining SYMBOL_REF loads into
UNSPECV_CAS.  Even though reload can later undo it, the resulting
code will be less efficient.

gcc/ChangeLog:

2018-09-06  Ilya Leoshkevich  <iii@linux.ibm.com>

	PR target/80080
	* config/s390/predicates.md: Add nonsym_memory_operand.
	* config/s390/s390.c (s390_legitimize_cs_operand): If operand
	contains a SYMBOL_REF, load it into an intermediate pseudo.
	(s390_emit_compare_and_swap): Legitimize operand.
	* config/s390/s390.md: Use the new nonsym_memory_operand
	with UNSPECV_CAS patterns.

gcc/testsuite/ChangeLog:

2018-09-06  Ilya Leoshkevich  <iii@linux.ibm.com>

	PR target/80080
	* gcc.target/s390/pr80080-3.c: New test.
	* gcc.target/s390/s390.exp: Make sure the new test passes
	on all optimization levels.

From-SVN: r264143
2018-09-06 07:38:42 +00:00
Ilya Leoshkevich
d725249946 S/390: Register pass_s390_early_mach statically
The dump file used to come at the end of the sorted dump file list,
because the pass was registered dynamically. This did not reflect the
order in which passes are executed. Static registration fixes this:

* foo4.c.277r.split2
* foo4.c.281r.early_mach
* foo4.c.282r.pro_and_epilogue

gcc/ChangeLog:

2018-09-06  Ilya Leoshkevich  <iii@linux.ibm.com>

	PR target/80080
	* config/s390/s390-passes.def: New file.
	* config/s390/s390-protos.h (class rtl_opt_pass): Add forward
	declaration.
	(make_pass_s390_early_mach): Add declaration.
	* config/s390/s390.c (make_pass_s390_early_mach):
	(s390_option_override): Remove dynamic registration.
	* config/s390/t-s390: Add s390-passes.def.

From-SVN: r264142
2018-09-06 07:35:35 +00:00
Ilya Leoshkevich
f0d2063151 S/390: Remove UNSPEC_LTREL_BASE
It was needed only for g5/g6 machines, which are now gone.

gcc/ChangeLog:

2018-09-06  Ilya Leoshkevich  <iii@linux.ibm.com>

	* config/s390/s390.c (s390_decompose_constant_pool_ref):
	Remove UNSPEC_LTREL_BASE check.
	(annotate_constant_pool_refs): Likewise.
	(find_constant_pool_ref): Likewise.
	(find_ltrel_base): Removed.
	(replace_ltrel_base): Removed.
	(s390_mainpool_finish): Remove replace_ltrel_base call.
	(s390_chunkify_start): Remove pending LTREL_BASE logic.
	(s390_chunkify_finish): Remove replace_ltrel_base call.
	* config/s390/s390.md: Remove UNSPEC_LTREL_BASE.

From-SVN: r264141
2018-09-06 07:31:23 +00:00
Marek Polacek
308d9cda32 PR c++/86982, -Wreturn-local-addr and std::move and std::forward.
* typeck.c (maybe_warn_about_returning_address_of_local): Handle calls
	to std::move or std::forward.
	(is_std_forward_p): New function.

	* g++.dg/warn/Wreturn-local-addr-5.C: New test.

From-SVN: r264139
2018-09-06 00:38:13 +00:00
GCC Administrator
4497d88fe2 Daily bump.
From-SVN: r264138
2018-09-06 00:16:49 +00:00
Hans-Peter Nilsson
c53e89f468 re PR target/86779 (Cris port needs updating for CVE-2017-5753)
PR target/86779
	* config/cris/cris.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): Redefine
	to speculation_safe_value_not_needed.

From-SVN: r264134
2018-09-05 23:14:42 +00:00
Cesar Philippidis
53ceb8b542 [nvptx] Basic -misa support for nvptx
gcc/
	* config/nvptx/nvptx-opts.h: New file.
	* config/nvptx/nvptx.c (nvptx_file_start): Print the correct .target.
	* config/nvptx/nvptx.h: Include "nvptx-opts.h".
	(ASM_SPEC): Define.
	(TARGET_SM35): New macro.
	* config/nvptx/nvptx.md (atomic_fetch_<logic><mode>): Enable with the
	correct predicate.
	* config/nvptx/nvptx.opt (ptx_isa, sm_30, sm_35): New enum and its
	values.
	(misa=): New option.
	* doc/invoke.texi (Nvidia PTX Options): Document -misa.

	gcc/testsuite/
	* gcc.target/nvptx/atomic_fetch-1.c: New test.
	* gcc.target/nvptx/atomic_fetch-1.c: New test.


Co-Authored-By: Bernd Schmidt <bernds_cb1@t-online.de>

From-SVN: r264133
2018-09-05 15:27:31 -07:00
Marek Polacek
62c21ceea6 PR c++/87109, wrong overload with ref-qualifiers.
* call.c (build_user_type_conversion_1): Use NULL instead of 0.  Bail
	out if performing the maybe-rvalue overload resolution and a conversion
	function is getting called.

	* g++.dg/cpp0x/ref-qual19.C: New test.

From-SVN: r264132
2018-09-05 21:17:47 +00:00
Uros Bizjak
f6b95f78f8 i386.md (truncdfsf2): Remove expander.
* config/i386/i386.md (truncdfsf2): Remove expander.
	(truncdfsf2_with_temp): Ditto.
	(truncxf<mode>2): Ditto.
	(*truncdfsf_fast_mixed): Remove insn pattern.
	(*truncdfsf_fast_i387): Ditto.
	(*truncdfsf_mixed): Ditto.
	(*truncdfsf_i387): Ditto.
	(*truncdfsf2_i387_1): Ditto.
	(*truncxfsf2_mixed): Ditto.
	(*truncxfdf2_mixed): Ditto.
	(*truncxf<mode>2_i387_noop): Ditto. Update callers
	to call gen_truncxf<mode>2 instead.
	(*truncxf<mode>2_i387): Remove.
	(reg->reg splitters): Remove splitter pattern.
	(reg->mem splitters): Ditto.

	(truncdfsf2): New insn pattern.
	(truncxf<mode>2): Ditto.

From-SVN: r264130
2018-09-05 20:01:42 +02:00
Bernhard Reutner-Fischer
eb6ffc6682 PR52665 do not let .ident confuse assembler scan tests
A branch with a name matching scan-assembler pattern triggers
inappropriate FAIL.

E.g. branch fixups-testsuite and
- gcc.target/i386/pr65871-?.c (scan-assembler-not "test")
- gcc.target/i386/pr41442.c (scan-assembler-times "test|cmp" 2)
etc.

This is a recurring problem as can be seen by some -fno-ident additions
by commits from e.g. Michael Meissner over the years: builtins-58.c,
powerpc/pr46728-?.c

The patch below adds -fno-ident if a testcase contains one of
scan-assembler, scan-assembler-not or scan-assembler-times.

Regression tested on x86_64-unknown-linux on a fixups-testsuite branch
where it fixes several false FAILs without regressions.

gcc/testsuite/ChangeLog

2016-06-18  Bernhard Reutner-Fischer  <aldot@gcc.gnu.org>

        PR testsuite/52665
        * lib/gcc-dg.exp (gcc-dg-test-1): Iterate over _required_options.
        * lib/target-supports.exp (scan-assembler_required_options,
        scan-assembler-not_required_options,
        scan-assembler-times_required_options): Add -fno-ident.
        * lib/scanasm.exp (scan-assembler-times): Fix error message.
        * c-c++-common/ident-0a.c: New test.
        * c-c++-common/ident-0b.c: New test.
        * c-c++-common/ident-1a.c: New test.
        * c-c++-common/ident-1b.c: New test.
        * c-c++-common/ident-2a.c: New test.
        * c-c++-common/ident-2b.c: New test.

From-SVN: r264128
2018-09-05 17:31:13 +02:00
Jonathan Wakely
cfaa1c8908 * libsupc++/cxxabi.h (__cxa_demangle): Clarify doxygen comment.
From-SVN: r264127
2018-09-05 16:18:16 +01:00
Kyrylo Tkachov
24c4943149 Optimise sqrt reciprocal multiplications
This patch aims to optimise sequences involving uses of 1.0 / sqrt (a) under -freciprocal-math and -funsafe-math-optimizations.
In particular consider:

x = 1.0 / sqrt (a);
r1 = x * x;  // same as 1.0 / a
r2 = a * x; // same as sqrt (a)

If x, r1 and r2 are all used further on in the code, this can be transformed into:
tmp1 = 1.0 / a
tmp2 = sqrt (a)
tmp3 = tmp1 * tmp2
x = tmp3
r1 = tmp1
r2 = tmp2

A bit convoluted, but this saves us one multiplication and, more importantly, the sqrt and division are now independent.
This also allows optimisation of a subset of these expressions.
For example:
x = 1.0 / sqrt (a)
r1 = x * x

can be transformed to r1 = 1.0 / a, eliminating the sqrt if x is not used anywhere else.
And similarly:
x = 1.0 / sqrt (a)
r1 = a * x

can be transformed to sqrt (a) eliminating the division.

For the testcase:
double res, res2, tmp;
void
foo (double a, double b)
{
  tmp = 1.0 / __builtin_sqrt (a);
  res = tmp * tmp;
  res2 = a * tmp;
}

We now generate for aarch64 with -Ofast:
foo:
        fmov    d2, 1.0e+0
        adrp    x2, res2
        fsqrt   d1, d0
        adrp    x1, res
        fdiv    d0, d2, d0
        adrp    x0, tmp
        str     d1, [x2, #:lo12:res2]
        fmul    d1, d1, d0
        str     d0, [x1, #:lo12:res]
        str     d1, [x0, #:lo12:tmp]
        ret

where before it generated:
foo:
        fsqrt   d2, d0
        fmov    d1, 1.0e+0
        adrp    x1, res2
        adrp    x2, tmp
        adrp    x0, res
        fdiv    d1, d1, d2
        fmul    d0, d1, d0
        fmul    d2, d1, d1
        str     d1, [x2, #:lo12:tmp]
        str     d0, [x1, #:lo12:res2]
        str     d2, [x0, #:lo12:res]
        ret

As you can see, the new sequence has one fewer multiply and the fsqrt and fdiv are independent. 

	* tree-ssa-math-opts.c (is_mult_by): New function.
	(is_square_of): Use the above.
	(optimize_recip_sqrt): New function.
	(pass_cse_reciprocals::execute): Use the above.

	* gcc.dg/recip_sqrt_mult_1.c: New test.
	* gcc.dg/recip_sqrt_mult_2.c: Likewise.
	* gcc.dg/recip_sqrt_mult_3.c: Likewise.
	* gcc.dg/recip_sqrt_mult_4.c: Likewise.
	* gcc.dg/recip_sqrt_mult_5.c: Likewise.
	* g++.dg/recip_sqrt_mult_1.C: Likewise.
	* g++.dg/recip_sqrt_mult_2.C: Likewise.

From-SVN: r264126
2018-09-05 13:39:38 +00:00