aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2019-04-24re PR tree-optimization/90211 (ICE: tree check: expected ssa_name, have ↵Jakub Jelinek4-2/+36
real_cst in first_readonly_imm_use, at ssa-iterators.h:351) PR tree-optimization/90211 * tree-parloops.c (try_create_reduction_list): Ignore phi arguments which are not SSA_NAMEs. * gcc.dg/autopar/pr90211.c: New test. From-SVN: r270533
2019-04-24Daily bump.GCC Administrator1-1/+1
From-SVN: r270530
2019-04-23libphobos: Add D support for S/390 LinuxIain Buclaw6-12/+32
gcc/d/ChangeLog: 2019-04-23 Iain Buclaw <ibuclaw@gdcproject.org> Robin Dapp <rdapp@linux.ibm.com> * typeinfo.cc (create_typeinfo): Write typeinfo flags as uint. gcc/testsuite/ChangeLog: 2019-04-23 Iain Buclaw <ibuclaw@gdcproject.org> Robin Dapp <rdapp@linux.ibm.com> * gdc.dg/link.d: Test if target d_runtime. * gdc.dg/runnable.d: Fix tests to work on BigEndian. * gdc.dg/simd.d: Likewise. libphobos/ChangeLog: 2019-04-23 Iain Buclaw <ibuclaw@gdcproject.org> Robin Dapp <rdapp@linux.ibm.com> * configure.tgt: Add s390*-linux* as a supported target. * libdruntime/gcc/sections/elf_shared.d: import gcc.builtins. (__tls_get_addr_internal): Declare. (TLS_DTV_OFFSET): Define as zero on SystemZ. (getTLSRange): Support getting TLS on SystemZ. * testsuite/libphobos.typeinfo/struct-align.d: New test. Co-Authored-By: Robin Dapp <rdapp@linux.ibm.com> From-SVN: r270523
2019-04-23Update .po files.Joseph Myers19-179851/+171330
* be.po, da.po, de.po, el.po, fi.po, fr.po, hr.po, id.po, ja.po, nl.po, ru.po, sr.po, sv.po, tr.po, uk.po, vi.po, zh_CN.po, zh_TW.po: Update. From-SVN: r270520
2019-04-23d: Add support for compiling without libphobos library.Iain Buclaw32-160/+509
Merges upstream dmd 3b3dca8be Reviewed-on: https://github.com/dlang/dmd/pull/9678 gcc/d/ChangeLog: 2019-04-23 Iain Buclaw <ibuclaw@gdcproject.org> * d-builtins.cc (d_init_versions): Add D_BetterC, D_ModuleInfo, D_Exceptions, D_TypeInfo as predefined version conditions. * d-codegen.cc (build_bounds_condition): Generate trap if D asserts are turned off. * d-frontend.cc (getTypeInfoType): Add error when -fno-rtti is set. * d-lang.cc (d_init_options): Initialize new front-end options. (d_handle_option): Handle -fdruntime, -fexceptions, and -frtti. (d_post_options): Turn off D runtime features if -fno-druntime is set. * d-spec.cc (lang_specific_driver): Handle -fdruntime. * d-tree.h (have_typeinfo_p): Add prototype. (build_typeinfo): Update prototype. * decl.cc (DeclVisitor::visit(StructDeclaration)): Create typeinfo only if TypeInfo exists. (DeclVisitor::visit(ClassDeclaration)): Likewise. (DeclVisitor::visit(InterfaceDeclaration)): Likewise. (DeclVisitor::visit(EnumDeclaration)): Likewise. * expr.cc: Update all calls to build_typeinfo. * gdc.texi (Runtime Options): Document -fdruntime and -frtti. * lang.opt: Add -fdruntime and -frtti. * modules.cc (build_module_tree): Create module info only if ModuleInfo exists. * toir.cc (IRVisitor::visit(ThrowStatement)): Update test for -fno-exceptions. * typeinfo.cc (create_tinfo_types): Build internal typeinfo classes only if Object exists. (have_typeinfo_p): New function. (class TypeInfoVisitor): Update all calls to build_typeinfo. (build_typeinfo): Add error when -fno-rtti is set. gcc/testsuite/ChangeLog: 2019-04-23 Iain Buclaw <ibuclaw@gdcproject.org> * gdc.test/fail_compilation/fail2456.d: New test. * gdc.test/fail_compilation/test18312.d: New test. * gdc.test/gdc-test.exp (gdc-convert-args): Handle -betterC. From-SVN: r270518
2019-04-23[GCC, AARCH64] Add GNU note section with BTI and PAC.Sudakshina Das6-2/+68
This patch adds the GNU NOTE section to the BTI and/or PAC enabled objects for linux targets. The patches for needed for these in binutils are already approved and committed. https://sourceware.org/ml/binutils/2019-03/msg00072.html *** gcc/ChangeLog *** 2018-04-23 Sudakshina Das <sudi.das@arm.com> * config/aarch64/aarch64-linux.h (TARGET_ASM_FILE_END): Define for AArch64. (aarch64_file_end_indicate_exec_stack): Add gnu note section. gcc/testsuite/ChangeLog: 2018-04-23 Sudakshina Das <sudi.das@arm.com> * gcc.target/aarch64/bti-1.c: Add scan directive for gnu note section for linux targets. * gcc.target/aarch64/va_arg_1.c: Update scan directive to not clash with GNU note section. From-SVN: r270515
2019-04-23* lib/target-supports.expJeff Law2-1/+6
(check_effective_target_keeps_null_pointer_checks): Add cr16. From-SVN: r270513
2019-04-23modulo-sched: prevent division by zero (PR87979)Roman Zhuykov4-0/+23
PR rtl-optimization/87979 * modulo-sched.c (sms_schedule): Start ii value "mii" should not equal zero. testsuite: PR rtl-optimization/87979 * gcc.dg/pr87979.c: New test. From-SVN: r270512
2019-04-23modulo-sched: fix branch scheduling issue (PR84032)Roman Zhuykov4-5/+38
PR rtl-optimization/84032 * modulo-sched.c (ps_insn_find_column): Change condition so that branch will always be the last insn in a row inside partial schedule. testsuite: PR rtl-optimization/84032 * gcc.dg/pr84032.c: New test. From-SVN: r270511
2019-04-23re PR debug/90131 (wrong debug info at -O3)Richard Biener2-6/+16
2019-04-23 Richard Biener <rguenther@suse.de> PR debug/90131 * tree-cfgcleanup.c (move_debug_stmts_from_forwarder): Add dest_single_pred_p argument. (remove_forwarder_block): Adjust. (remove_forwarder_block_with_phi): Likewise. From-SVN: r270505
2019-04-23re PR target/89093 (C++ exception handling clobbers d8 VFP register)Ramana Radhakrishnan6-6/+62
PR target/89093 * config/arm/arm.c (aapcs_vfp_is_call_or_return_candidate): Diagnose if used with general-regs-only. (arm_conditional_register_usage): Don't add non-general regs if general-regs-only. (arm_valid_target_attribute_rec): Handle general-regs-only. * config/arm/arm.h (TARGET_HARD_FLOAT): Return false if general-regs-only. (TARGET_HARD_FLOAT_SUB): Define. (TARGET_SOFT_FLOAT): Define as negation of TARGET_HARD_FLOAT_SUB. (TARGET_REALLY_IWMMXT): Add && !TARGET_GENERAL_REGS_ONLY. (TARGET_REALLY_IWMMXT2): Likewise. * config/arm/arm.opt: Add -mgeneral-regs-only. * doc/extend.texi: Document ARM general-regs-only target. * doc/invoke.texi: Document ARM -mgeneral-regs-only. libgcc/ * config/arm/pr-support.c: Add #pragma GCC target("general-regs-only"). * config/arm/unwind-arm.c: Likewise. * unwind-c.c (PERSONALITY_FUNCTION): Add general-regs-only target attribute for ARM. libobjc/ * exception.c (PERSONALITY_FUNCTION): Add general-regs-only target attribute for ARM. libphobos/ * libdruntime/gcc/deh.d: Import gcc.attribute. (personality_fn_attributes): New enum. (scanLSDA, CONTINUE_UNWINDING, gdc_personality, __gdc_personality): Add @personality_fn_attributes. libstdc++-v3/ * libsupc++/eh_personality.cc (PERSONALITY_FUNCTION): Add general-regs-only target attribute for ARM. Co-Authored-By: Bernd Edlinger <bernd.edlinger@hotmail.de> Co-Authored-By: Jakub Jelinek <jakub@redhat.com> From-SVN: r270504
2019-04-23re PR tree-optimization/90078 (ICE with deep templates caused by overflow)Bin Cheng4-2/+225
PR tree-optimization/90078 * tree-ssa-loop-ivopts.c (comp_cost::operator +,-,+=,-+,/=,*=): Add checks for infinite_cost overflow. gcc/testsuite * gcc/testsuite/g++.dg/tree-ssa/pr90078.C: New test. Also fix typo in ChangeLog entry for revision 270499. From-SVN: r270500
2019-04-23re PR tree-optimization/90021 (ICE in index_in_loop_nest, at ↵Bin Cheng6-8/+54
tree-data-ref.h:587 since r270203) PR tree-optimization/92001 * tree-chrec.c (evolution_function_is_univariate_p): New parameter and check univariate against it. * tree-chrec.h (evolution_function_is_univariate_p): New parameter. * tree-data-ref.c (add_other_self_distances): Pass new argument. gcc/testsuite * gcc/testsuite/gfortran.dg/pr90021.f90: New test. From-SVN: r270499
2019-04-23Daily bump.GCC Administrator1-1/+1
From-SVN: r270498
2019-04-22re PR fortran/90166 (Compiler Fails at Assembler)Steven G. Kargl4-4/+45
2019-04-19 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/90166 * decl.c (in_module_or_interface): New function to check that the current state is in a module, submodule, or interface. (gfc_match_prefix): Use it. 2019-04-19 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/90166 * gfortran.dg/submodule_22.f08: Add additional dg-error comments. From-SVN: r270495
2019-04-22PR c++/87366 - wrong error with alias template.Jason Merrill3-0/+44
With this testcase the code in template_args_equal to treat aliases as distinct wasn't sufficient, because it only looked at the top level, whereas here we have a reference to the alias. So let's also handle treating them as distinct in structural_comptypes. For GCC 10 I have a more comprehensive patch, but for GCC 9 let's go with this smaller change. * typeck.c (structural_comptypes): When comparing_specializations, aliases are unequal. (comptypes): When comparing_specializations, do structural comparison. From-SVN: r270494
2019-04-22re PR fortran/57284 ([OOP] ICE with find_array_spec for polymorphic arrays)Paul Thomas5-4/+82
2019-04-22 Paul Thomas <pault@gcc.gnu.org> PR fortran/57284 * resolve.c (find_array_spec): If this is a class expression and the symbol and component array specs are the same, this is not an error. *trans-intrinsic.c (gfc_conv_intrinsic_size): If a class symbol argument, has no namespace, it has come from the interface mapping and the _data component must be accessed directly. 2019-04-22 Paul Thomas <pault@gcc.gnu.org> PR fortran/57284 * gfortran.dg/class_70.f03 From-SVN: r270489
2019-04-22Daily bump.GCC Administrator1-1/+1
From-SVN: r270488
2019-04-21re PR d/90130 (gdc.test/runnable/test12.d FAILs)Iain Buclaw5-22/+30
PR d/90130 d/dmd: Merge upstream dmd 065fbd452 Fixes endian bug in CTFE, and corrects tests in the D2 testsuite that failed on big endian targets. Initial patch by Robin Dapp. Reviewed-on: https://github.com/dlang/dmd/pull/9665 From-SVN: r270485
2019-04-21LRA: Revert "Remove useless move insns"H.J. Lu4-15/+32
Useless move insn removal was added to LRA just to avoid wasting CPU cycles on such insn processing afterwards. Such insns are removed anyway later in the pass pipeline. The CPU time savings are tiny but the removal creates too many problems including PR target/90178. Vladimir pre-approved the patch to remove the code: https://gcc.gnu.org/ml/gcc-patches/2019-04/msg00834.html gcc/ PR target/90178 Revert: 2018-11-21 Uros Bizjak <ubizjak@gmail.com> Revert the revert: 2013-10-26 Vladimir Makarov <vmakarov@redhat.com> Revert: 2013-10-25 Vladimir Makarov <vmakarov@redhat.com> * lra-spills.c (lra_final_code_change): Remove useless move insns. gcc/testsuite/ PR target/90178 * gcc.target/i386/pr90178.c: New test. From-SVN: r270484
2019-04-21Fix test fails on powerpc-darwin.Iain Sandoe2-4/+13
The current implementation of “speculation_barrier” and “group_end_nop” insns emit hard-wired register names which causes tests using them to fail on Darwin, at least, which uses “rNN” instead of “NN”. The patch makes the register names for these insns use the operand output mechanism to substitute the appropriate variant when needed. gcc/ 2019-04-21 Iain Sandoe <iain@sandoe.co.uk> * config/rs6000/rs6000.md (group_end_nop): Emit insn register names using operand format, rather than hard-wired. (speculation_barrier): Likewise. From-SVN: r270480
2019-04-21d: Use semanticRun to prevent declaration pass from running multiple times.Iain Buclaw2-0/+39
This shouldn't happen during normal traversal of the AST provided from the front-end, however as there are some cases where declarations need to be visited out of order, such as what is being done in PR d/89017, it then becomes necessary to guard against this. gcc/d/ChangeLog: 2019-04-21 Iain Buclaw <ibuclaw@gdcproject.org> * decl.cc (DeclVisitor::visit(Import)): Set semanticRun after completion, guard against being called more than once. (DeclVisitor::visit(StructDeclaration)): Likewise. (DeclVisitor::visit(ClassDeclaration)): Likewise. (DeclVisitor::visit(InterfaceDeclaration)): Likewise. (DeclVisitor::visit(VarDeclaration)): Likewise. (DeclVisitor::visit(TypeInfoDeclaration)): Likewise. From-SVN: r270478
2019-04-21d: Ensure all unittests are registered against the original module.Iain Buclaw2-1/+7
As any unittest functions registered against the testing module when compiling with -fbuilding-libphobos-tests are ignored during the generation of the ModuleInfo data. gcc/d/ChangeLog: 2019-04-21 Iain Buclaw <ibuclaw@gdcproject.org> * modules.cc (register_module_decl): Don't register unittests against the ModuleInfo symbol for -fbuilding-libphobos-tests. From-SVN: r270477
2019-04-20pr89009.C: Add dg-require-effective-target fpic.Sandra Loosemore2-0/+5
2019-04-20 Sandra Loosemore <sandra@codesourcery.com> gcc/testsuite/ * g++.dg/ipa/pr89009.C: Add dg-require-effective-target fpic. From-SVN: r270476
2019-04-21Daily bump.GCC Administrator1-1/+1
From-SVN: r270475
2019-04-20PR c++/90190 - CTAD with list-constructor.Jason Merrill3-9/+38
The passage quoted talks about an initializer list containing a single expression, but a braced-init-list is not an expression. * pt.c (do_class_deduction): Don't try the single element deduction if the single element is also a braced list. From-SVN: r270468
2019-04-20PR c++/90171 - ICE with destroying delete with size_t parm.Jason Merrill3-15/+47
The problem here was that "second parm is size_t" is false for a destroying sized delete. So let's introduce sized_deallocation_fn_p when that's what we're asking, and reserve second_parm_is_size_t for the specific case of warning about possible confusion with placement delete. * call.c (sized_deallocation_fn_p): New. Use it instead of second_parm_is_size_t in most cases. (second_parm_is_size_t): Don't check for aligned. From-SVN: r270467
2019-04-20Daily bump.GCC Administrator1-1/+1
From-SVN: r270466
2019-04-19* de.po, es.po, fr.po, sv.po: Update.Jakub Jelinek5-36044/+33838
From-SVN: r270462
2019-04-19tree-call-cdce: If !HONOR_NANS do not make code with NaNs (PR88055)Segher Boessenkool2-0/+43
If we don't HONOR_NANS we should not try to use any unordered comparison results. Best case those will just be optimized away; realistically, they ICE. For example, the rs6000 backend has some code that specifically checks we never do this. PR tree-optimization/88055 * tree-call-cdce.c (comparison_code_if_no_nans): New function. (gen_one_condition): Use it if !HONOR_NANS. From-SVN: r270460
2019-04-19re PR c++/89900 (ICE: Segmentation fault (in check_instantiated_arg))Paolo Carlini7-9/+59
/cp 2019-04-19 Paolo Carlini <paolo.carlini@oracle.com> PR c++/89900 * pt.c (fn_type_unification): When handling null explicit arguments do not special case non-parameter packs. /testsuite 2019-04-19 Paolo Carlini <paolo.carlini@oracle.com> PR c++/89900 * g++.dg/cpp0x/pr89900-1.C: New. * g++.dg/cpp0x/pr89900-2.C: Likewise. * g++.dg/cpp0x/pr89900-3.C: Likewise. * g++.dg/cpp0x/pr89900-4.C: Likewise. From-SVN: r270459
2019-04-19libgo/go/syscall: add SockAddrDatalink on AIXIan Lance Taylor1-1/+1
This patch is required in order to build golang.org/x/net. The corresponding Go Toolchain patch is CL 170537. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/172898 From-SVN: r270458
2019-04-19re PR middle-end/90139 (ICE in emit_block_move_hints, at expr.c:1601)Jakub Jelinek4-0/+31
PR middle-end/90139 * tree-outof-ssa.c (get_temp_reg): If reg_mode is BLKmode, return assign_temp instead of gen_reg_rtx. * gcc.c-torture/compile/pr90139.c: New test. From-SVN: r270457
2019-04-19re PR c++/90138 (ICE on invalid in contains_struct_check())Jakub Jelinek4-1/+15
PR c++/90138 * pt.c (process_template_parm): Set decl to pushdecl result. If !is_non_type, also set parm to that. * g++.dg/template/pr90138.C: New test. From-SVN: r270456
2019-04-19re PR c/89888 (When switch controlling expression is promoted from type ↵Jakub Jelinek11-123/+188
narrower than int, GCC does not diagnose identical cases) PR c/89888 * c-common.h (c_add_case_label): Remove orig_type and outside_range_p arguments. (c_do_switch_warnings): Remove outside_range_p argument. * c-common.c (check_case_bounds): Removed. (c_add_case_label): Remove orig_type and outside_range_p arguments. Don't call check_case_bounds. Fold low_value as well as high_value. * c-warn.c (c_do_switch_warnings): Remove outside_range_p argument. Check for case labels outside of range of original type here and adjust them. c/ * c-typeck.c (struct c_switch): Remove outside_range_p member. (c_start_case): Don't clear it. (do_case): Adjust c_add_case_label caller. (c_finish_case): Adjust c_do_switch_warnings caller. cp/ * decl.c (struct cp_switch): Remove outside_range_p member. (push_switch): Don't clear it. (pop_switch): Adjust c_do_switch_warnings caller. (finish_case_label): Adjust c_add_case_label caller. testsuite/ * c-c++-common/pr89888.c: New test. * g++.dg/torture/pr40335.C: Change dg-bogus into dg-warning. Don't expect -Wswitch-unreachable warning. From-SVN: r270455
2019-04-19PR translation/90118 Missing space between wordsChristophe Lyon2-1/+7
2019-04-19 Christophe Lyon <christophe.lyon@linaro.org> PR translation/90118 contrib/ * check-internal-format-escaping.py: Check that %< is not next to a word. gcc/ * config/aarch64/aarch64.c (aarch64_override_options_internal): Add missing space before %<. From-SVN: r270454
2019-04-19re PR c++/90108 (ICE: Segmentation fault (in c_tree_chain_next))Jakub Jelinek6-2/+61
PR c++/90108 * c-decl.c (merge_decls): If remove is main variant and DECL_ORIGINAL_TYPE is some other type, remove a DECL_ORIGINAL_TYPE variant that has newdecl as TYPE_NAME if any. * decl.c (duplicate_decls): If remove is main variant and DECL_ORIGINAL_TYPE is some other type, remove a DECL_ORIGINAL_TYPE variant that has newdecl as TYPE_NAME if any. * c-c++-common/pr90108.c: New test. From-SVN: r270453
2019-04-19Daily bump.GCC Administrator1-1/+1
From-SVN: r270451
2019-04-18re PR rtl-optimization/87871 (testcases fail after r265398 on arm)Peter Bergner2-10/+18
PR rtl-optimization/87871 * ira-lives.c (make_object_dead): Don't add conflicts to TOTAL_CONFLICT_HARD_REGS for register ignore_reg_for_conflicts. From-SVN: r270448
2019-04-18PR middle-end/89797 - ICE on a vector_size (1LU << 33) int variable Martin Sebor3-5/+11
gcc/ChangeLog: * tree.h (TYPE_VECTOR_SUBPARTS): Use HOST_WIDE_INT_1U. * config/aarch64/aarch64.c (aarch64_simd_vector_alignment): Avoid assuming type size fits in SHWI. From-SVN: r270447
2019-04-18re PR ipa/85051 (ICE: in edge_badness, at ipa-inline.c:1035 with flattening ↵Jan Hubicka2-7/+14
recursive calls) PR ipa/85051 * ipa-inline.c (flatten_function): New parameter UPDATE. (ipa_inline, early_inliner): Use it. From-SVN: r270446
2019-04-18PR c++/87554 - ICE with extern template and reference member.Jason Merrill3-2/+42
The removed code ended up setting DECL_INITIAL to the INIT_EXPR returned by split_nonconstant_init, which makes no sense. This code was added back in 1996, so any rationale is long lost. * decl.c (cp_finish_decl): Don't set DECL_INITIAL of external vars. From-SVN: r270445
2019-04-18move ChangeLog entry to the correct fileSegher Boessenkool1-0/+9
From-SVN: r270444
2019-04-18Fix UB in int_const_binopRichard Sandiford2-10/+14
When testing PR 85164, the baseline bootstrap-ubsan results had a lot of failures from int_const_binop. This is because with the new overflow handling we can sometimes do: poly_res = res; on an uninitialised res. 2019-04-18 Richard Sandiford <richard.sandiford@arm.com> gcc/ * fold-const.c (int_const_binop): Return early on failure. From-SVN: r270443
2019-04-18Fix two ubsan failures (PR85164)Richard Sandiford6-2/+25
Two fixes for UB when handling very large offsets. The calculation in force_int_to_mode would have been correct if signed integers used modulo arithmetic, so just switch to unsigned types. The calculation in rtx_addr_can_trap_p_1 didn't handle overflow properly, so switch to known_subrange_p instead (which is supposed to handle all cases). 2019-04-18 Richard Sandiford <richard.sandiford@arm.com> gcc/ PR middle-end/85164 * combine.c (force_int_to_mode): Cast the argument rather than the result of known_alignment. * rtlanal.c (rtx_addr_can_trap_p_1): Use known_subrange_p. gcc/testsuite/ PR middle-end/85164 * gcc.dg/pr85164-1.c, gcc.dg/pr85164-2.c: New tests. From-SVN: r270442
2019-04-18re PR debug/90131 (wrong debug info at -O3)Richard Biener4-37/+92
2019-04-18 Richard Biener <rguenther@suse.de> PR debug/90131 * tree-cfgcleanup.c (move_debug_stmts_from_forwarder): Split out from ... (remove_forwarder_block): ... here. (remove_forwarder_block_with_phi): Also move debug stmts here. * gcc.dg/guality/pr90131.c: New testcase. From-SVN: r270441
2019-04-18Reverted unintended part of previous commit.Jakub Jelinek2-36/+2
From-SVN: r270439
2019-04-18re PR translation/79183 (Hard coded plurals in gimple-ssa-sprintf.c:2050)Jakub Jelinek4-13/+49
PR translation/79183 * gimple-ssa-sprintf.c (format_directive): Use inform_n instead of inform where appropriate. From-SVN: r270438
2019-04-18tree.c (get_qualified_type): Put found type variants at the head of the ↵Richard Biener2-5/+21
variant list. 2019-04-18 Richard Biener <rguenther@suse.de> * tree.c (get_qualified_type): Put found type variants at the head of the variant list. From-SVN: r270437
2019-04-18re PR go/90110 (libgo fails to build against glibc 2.19)Ian Lance Taylor2-3/+4
PR go/90110 compiler: use temporary to avoid early destruction The code was passing a substr directly to strtol, and then checking the *end value returned by strtol. But the substr could be destroyed as soon as strtol returns, making the test of *end invalid. Also fix an incorrect test of the string index rather than the value. Fixes https://gcc.gnu.org/PR90110 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/172663 From-SVN: r270434