1. 31 Jan, 2018 38 commits
    • Update gcc .po files. · bcbe891c
      	* be.po, da.po, de.po, el.po, es.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: r257274
      Joseph Myers committed
    • Update cpplib .po files. · 7f93b148
      	* be.po, ca.po, da.po, de.po, el.po, eo.po, es.po, fi.po, fr.po,
      	id.po, ja.po, nl.po, pr_BR.po, ru.po, sr.po, sv.po, tr.po, uk.po,
      	vi.po, zh_CN.po, zh_TW.po: Update.
      
      From-SVN: r257273
      Joseph Myers committed
    • Fix comdat_group check with Solaris as · 02b7dbb9
      	* lib/target-supports.exp (check_effective_target_comdat_group):
      	Allow for Solaris as comdat syntax.
      
      	* g++.dg/debug/dwarf2/nested-4.C: Xfail scan-assembler-times on
      	Solaris with comdat_group support and as.
      
      From-SVN: r257272
      Rainer Orth committed
    • re PR c/81779 (bool define from stdbool.h suppresses -Wdeclaration-after-statement) · 2be4dfcb
      	PR c/81779
      	* c-parser.c (c_parser_compound_statement_nostart): Call
      	expansion_point_location_if_in_system_header.
      
      	* gcc.dg/pr81779.c: New test.
      
      From-SVN: r257271
      Marek Polacek committed
    • re PR rtl-optimization/84123 (internal compiler error: in gen_rtx_SUBREG, at… · c677f80a
      re PR rtl-optimization/84123 (internal compiler error: in gen_rtx_SUBREG, at emit-rtl.c:908, alpha linux.)
      
      	PR rtl-optimization/84123
      	* combine.c (change_zero_ext): Check if hard register satisfies
      	can_change_dest_mode before calling gen_lowpart_SUBREG.
      
      From-SVN: r257270
      Uros Bizjak committed
    • re PR fortran/84116 (ICE in gfc_match_omp_clauses, at fortran/openmp.c:1354) · c9243c04
      	PR fortran/84116
      	* openmp.c (gfc_match_omp_clauses): If all the linear
      	gfc_match_omp_variable_list calls failed, don't gfc_free_omp_namelist
      	nor set *head = NULL.  Formatting fixes.
      
      	* gfortran.dg/gomp/pr84116.f90: New test.
      
      From-SVN: r257266
      Jakub Jelinek committed
    • re PR c++/83993 (ICE: constant not recomputed when ADDR_EXPR changed) · eddd715c
      	PR c++/83993
      	* constexpr.c (cxx_eval_outermost_constant_expr): Build NOP_EXPR
      	around non-constant ADDR_EXPRs rather than clearing TREE_CONSTANT
      	on ADDR_EXPR.
      
      	* g++.dg/init/pr83993-2.C: New test.
      
      From-SVN: r257265
      Jason Merrill committed
    • re PR c++/83993 (ICE: constant not recomputed when ADDR_EXPR changed) · 08b3748c
      	PR c++/83993
      	* constexpr.c (diag_array_subscript): Emit different diagnostics
      	if TYPE_DOMAIN (arraytype) is NULL.
      	(cxx_eval_array_reference, cxx_eval_store_expression): For arrays
      	with NULL TYPE_DOMAIN use size_zero_node as nelts.
      
      	* g++.dg/init/pr83993-1.C: New test.
      	* g++.dg/cpp0x/pr83993.C: New test.
      
      From-SVN: r257264
      Jakub Jelinek committed
    • re PR fortran/84088 ([nvptx] libgomp.oacc-fortran/declare-*.f90 execution fails) · 1af73491
      2018-01-31  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/84088
      	* trans-expr.c (gfc_conv_procedure_call): If the parm expr is
      	an address expression passed to an assumed rank dummy, convert
      	to an indirect reference.
      
      2018-01-31  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/84088
      	* gfortran.dg/pr84088.f90 : New test.
      
      From-SVN: r257262
      Paul Thomas committed
    • dump-parse-tree.c (write_proc): Use sym_name (which may be sym->binding_label)… · 125a677d
      dump-parse-tree.c (write_proc): Use sym_name (which may be sym->binding_label) instead of sym->name.
      
      2018-01-31  Thomas Koenig  <tkoenig@gcc.gnu.org>
      
      	* dump-parse-tree.c (write_proc): Use sym_name (which may
      	be sym->binding_label) instead of sym->name.
      
      From-SVN: r257260
      Thomas Koenig committed
    • Use gfc_charlen_t instead of int in gfc_conv_string_init · 949b40a4
      Committed as obvious.
      
      2018-01-31  Janne Blomqvist  <jb@gcc.gnu.org>
      
              * trans-const.c (gfc_conv_string_init): Use gfc_charlen_t instead
              of int for slen.
      
      From-SVN: r257258
      Janne Blomqvist committed
    • re PR target/82444 (ICE in ira_init_register_move_cost, at ira.c:1581) · 6b9a302f
      2018-01-31  Vladimir Makarov  <vmakarov@redhat.com>
      
      	PR target/82444
      	* ira.c (ira_init_register_move_cost): Remove assert.
      
      2018-01-31  Vladimir Makarov  <vmakarov@redhat.com>
      
      	PR target/82444
      	* gcc.target/i386/pr82444.c: New.
      
      From-SVN: r257254
      Vladimir Makarov committed
    • altivec-13.c: Remove VSX-requiring built-ins. · f1aa1f93
      [testsuite]
      
      	2018-01-31  Will Schmidt  <will_schmidt@vnet.ibm.com>
      
      	* gcc.target/powerpc/altivec-13.c: Remove VSX-requiring built-ins.
      	* gcc.target/powerpc/vsx-13.c: New.
      
      From-SVN: r257253
      Will Schmidt committed
    • compiler: lower expression types in lowering pass · 3008f0ff
          
          Ensure that array types with complicated length expressions are
          handled correctly by lowering expression types in the lowering pass.
          
          This required some adjustment of constant expression types to not
          report too many errors for circular constant expressions.  We now
          record error types in the Named_constant type.  If we find the
          circularity due to lowering the Named_constant, we use that location
          for the error message; this retains the error location we used to use.
          
          Fixes golang/go#23545
          
          Reviewed-on: https://go-review.googlesource.com/91035
      
      From-SVN: r257250
      Ian Lance Taylor committed
    • runtime: fix type descriptor name in C code · 9734500e
          
          I forgot to update the name of the map[string]bool type descriptor
          used in go-fieldtrack.c.  This didn't cause any errors because it's a
          weak symbol, and the current testsuite has no field tracking tests.
          
          Reviewed-on: https://go-review.googlesource.com/91096
      
      From-SVN: r257249
      Ian Lance Taylor committed
    • gotest: accept symbols with leading dot · 382ce983
          
          On AIX nm displays symbols with a leading dot; don't discard such
          symbols.
          
          While we're here stop doing fgrep -v '$', symbol names no longer
          contain '$' anyhow.
          
          Reviewed-on: https://go-review.googlesource.com/91095
      
      From-SVN: r257247
      Ian Lance Taylor committed
    • re PR c++/84092 (ICE on C++14 code with variable template: in… · be197ade
      re PR c++/84092 (ICE on C++14 code with variable template: in build_qualified_name, at cp/tree.c:2043)
      
      /cp
      2018-01-31  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/84092
      	* semantics.c (finish_qualified_id_expr): When handling an
      	UNBOUND_CLASS_TEMPLATE only adjust qualifying_class and expr.
      
      /testsuite
      2018-01-31  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/84092
      	* g++.dg/cpp1y/var-templ57.C: New.
      
      From-SVN: r257242
      Paolo Carlini committed
    • re PR c++/84138 (ICE folding broken constant) · 4ecd9c15
      	PR c++/84138
      	* cp-gimplify.c (cp_fold): Check if X is an error node before
      	calling useless_type_conversion_p.
      
      	* g++.dg/diagnostic/pr84138.C: New test.
      
      From-SVN: r257240
      Marek Polacek committed
    • re PR rtl-optimization/84071 (wrong elimination of zero-extension after sign-extended load) · bcec133f
      	PR rtl-optimization/84071
      	* doc/tm.texi.in (WORD_REGISTER_OPERATIONS): Add explicit case.
      	* doc/tm.texi: Regenerate.
      
      From-SVN: r257237
      Eric Botcazou committed
    • net: rename TestAddr6 to avoid gotest confusion · cb6a6b25
          
          On ppc64 gotest treats data variables whose names begin with "Test" as
          tests to run.  This is to support the function descriptors used for
          ppc64 ELF ABI v1.  This causes gotest to think that TestAddr6 is a
          test, when it is actually a variable.  For a simple fix until we can
          figure out how to write gotest properly, rename the variable.
          
          Fixes golang/go#23623
          
          Reviewed-on: https://go-review.googlesource.com/90995
      
      From-SVN: r257235
      Ian Lance Taylor committed
    • Use pointer sized array indices. · 7a157266
      Using pointer sized variables (e.g. size_t / ptrdiff_t) when the
      variables are used as array indices allows accessing larger arrays,
      and can be a slight performance improvement due to no need for sign or
      zero extending, or masking.
      
      Regtested on x86_64-pc-linux-gnu.
      
      libgfortran/ChangeLog:
      
      2018-01-31  Janne Blomqvist  <jb@gcc.gnu.org>
      
      	* generated/cshift1_16.c (cshift1): Regenerated.
      	* generated/cshift1_4.c (cshift1): Regenerated.
      	* generated/cshift1_8.c (cshift1): Regenerated.
      	* generated/eoshift1_16.c (eoshift1): Regenerated.
      	* generated/eoshift1_4.c (eoshift1): Regenerated.
      	* generated/eoshift1_8.c (eoshift1): Regenerated.
      	* generated/eoshift3_16.c (eoshift3): Regenerated.
      	* generated/eoshift3_4.c (eoshift3): Regenerated.
      	* generated/eoshift3_8.c (eoshift3): Regenerated.
      	* generated/in_pack_c10.c (internal_pack_c10): Regenerated.
      	* generated/in_pack_c16.c (internal_pack_c16): Regenerated.
      	* generated/in_pack_c4.c (internal_pack_c4): Regenerated.
      	* generated/in_pack_c8.c (internal_pack_c8): Regenerated.
      	* generated/in_pack_i1.c (internal_pack_1): Regenerated.
      	* generated/in_pack_i16.c (internal_pack_16): Regenerated.
      	* generated/in_pack_i2.c (internal_pack_2): Regenerated.
      	* generated/in_pack_i4.c (internal_pack_4): Regenerated.
      	* generated/in_pack_i8.c (internal_pack_8): Regenerated.
      	* generated/in_pack_r10.c (internal_pack_r10): Regenerated.
      	* generated/in_pack_r16.c (internal_pack_r16): Regenerated.
      	* generated/in_pack_r4.c (internal_pack_r4): Regenerated.
      	* generated/in_pack_r8.c (internal_pack_r8): Regenerated.
      	* generated/in_unpack_c10.c (internal_unpack_c10): Regenerated.
      	* generated/in_unpack_c16.c (internal_unpack_c16): Regenerated.
      	* generated/in_unpack_c4.c (internal_unpack_c4): Regenerated.
      	* generated/in_unpack_c8.c (internal_unpack_c8): Regenerated.
      	* generated/in_unpack_i1.c (internal_unpack_1): Regenerated.
      	* generated/in_unpack_i16.c (internal_unpack_16): Regenerated.
      	* generated/in_unpack_i2.c (internal_unpack_2): Regenerated.
      	* generated/in_unpack_i4.c (internal_unpack_4): Regenerated.
      	* generated/in_unpack_i8.c (internal_unpack_8): Regenerated.
      	* generated/in_unpack_r10.c (internal_unpack_r10): Regenerated.
      	* generated/in_unpack_r16.c (internal_unpack_r16): Regenerated.
      	* generated/in_unpack_r4.c (internal_unpack_r4): Regenerated.
      	* generated/in_unpack_r8.c (internal_unpack_r8): Regenerated.
      	* generated/reshape_c10.c (reshape_c10): Regenerated.
      	* generated/reshape_c16.c (reshape_c16): Regenerated.
      	* generated/reshape_c4.c (reshape_c4): Regenerated.
      	* generated/reshape_c8.c (reshape_c8): Regenerated.
      	* generated/reshape_i16.c (reshape_16): Regenerated.
      	* generated/reshape_i4.c (reshape_4): Regenerated.
      	* generated/reshape_i8.c (reshape_8): Regenerated.
      	* generated/reshape_r10.c (reshape_r10): Regenerated.
      	* generated/reshape_r16.c (reshape_r16): Regenerated.
      	* generated/reshape_r4.c (reshape_r4): Regenerated.
      	* generated/reshape_r8.c (reshape_r8): Regenerated.
      	* generated/shape_i1.c (shape_1): Regenerated.
      	* generated/shape_i16.c (shape_16): Regenerated.
      	* generated/shape_i2.c (shape_2): Regenerated.
      	* generated/shape_i4.c (shape_4): Regenerated.
      	* generated/shape_i8.c (shape_8): Regenerated.
      	* generated/spread_c10.c (spread_scalar_c10): Regenerated.
      	* generated/spread_c16.c (spread_scalar_c16): Regenerated.
      	* generated/spread_c4.c (spread_scalar_c4): Regenerated.
      	* generated/spread_c8.c (spread_scalar_c8): Regenerated.
      	* generated/spread_i1.c (spread_scalar_i1): Regenerated.
      	* generated/spread_i16.c (spread_scalar_i16): Regenerated.
      	* generated/spread_i2.c (spread_scalar_i2): Regenerated.
      	* generated/spread_i4.c (spread_scalar_i4): Regenerated.
      	* generated/spread_i8.c (spread_scalar_i8): Regenerated.
      	* generated/spread_r10.c (spread_scalar_r10): Regenerated.
      	* generated/spread_r16.c (spread_scalar_r16): Regenerated.
      	* generated/spread_r4.c (spread_scalar_r4): Regenerated.
      	* generated/spread_r8.c (spread_scalar_r8): Regenerated.
      	* intrinsics/random.c (jump): Use size_t for array index in loop.
      	(getosrandom): Likewise.
      	(arandom_r4): Make n an index_type.
      	(arandom_r8): Likewise.
      	(arandom_r10): Likewise.
      	(arandom_r16): Likewise.
      	(scramble_seed): Use size_t for array index in loop.
      	* m4/cshift1.m4: Make i an index_type.
      	* m4/eoshift1.m4: Likewise.
      	* m4/eoshift3.m4: Likewise.
      	* m4/in_pack.m4: Make n an index_type.
      	* m4/in_unpack.m4: Likewise.
      	* m4/reshape.m4: Make n and dim index_type's.
      	* m4/shape.m4: Make n an index_type.
      	* m4/spread.m4: Likewise, use index_type argument rather than
      	copying to int.
      	* runtime/bounds.c (bounds_ifunction_return): Make n an
      	index_type.
      	* runtime/in_pack_generic.c (internal_pack): Likewise.
      	* runtime/in_unpack_generic.c (internal_unpack): Make n and size
      	index_type's.
      
      From-SVN: r257234
      Janne Blomqvist committed
    • PR 78534 Reinstate better string copy algorithm · 9f3dcd14
      As part of the change to larger character lengths, the string copy
      algorithm was temporarily pessimized to get around some spurious
      -Wstringop-overflow warnings.  Having tried a number of variations of
      this algorithm I have managed to get it down to one spurious warning,
      only with -O1 optimization, in the testsuite.  This patch reinstates
      the optimized variant and modifies this one testcase to ignore the
      warning.
      
      Regtested on x86_64-pc-linux-gnu.
      
      gcc/fortran/ChangeLog:
      
      2018-01-31  Janne Blomqvist  <jb@gcc.gnu.org>
      
      	PR fortran/78534
      	* trans-expr.c (fill_with_spaces): Use memset instead of
      	generating loop.
      	(gfc_trans_string_copy): Improve opportunity to use builtins with
      	constant lengths.
      
      gcc/testsuite/ChangeLog:
      
      2018-01-31  Janne Blomqvist  <jb@gcc.gnu.org>
      
      	PR fortran/78534
      	* gfortran.dg/allocate_deferred_char_scalar_1.f03: Prune
      	-Wstringop-overflow warnings due to spurious warning with -O1.
      	* gfortran.dg/char_cast_1.f90: Update dump scan pattern.
      	* gfortran.dg/transfer_intrinsic_1.f90: Likewise.
      
      From-SVN: r257233
      Janne Blomqvist committed
    • re PR tree-optimization/84132 (tree-data-ref.c:3938: poor coding ?) · 957a25ab
      2018-01-31  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/84132
      	* tree-data-ref.c (analyze_miv_subscript): Properly
      	check whether evolution_function_is_affine_multivariate_p
      	before calling gcd_of_steps_may_divide_p.
      
      	* g++.dg/torture/pr84132.C: New testcase.
      
      From-SVN: r257232
      Richard Biener committed
    • pr81360.C: Drop unintended -O2 from dg-options and dg-final scan. · 8ede319f
      	* g++.dg/torture/pr81360.C: Drop unintended -O2 from dg-options and
      	dg-final scan.
      
      From-SVN: r257230
      Jan Hubicka committed
    • re PR target/83618 (_rdpid_u32 doesn't work on 64-bit targets as gas expects the 64-bit register) · e6c7bfdb
      PR target/83618
      
      gcc/
      	* config/i386/i386.c (ix86_expand_builtin): Handle IX86_BUILTIN_RDPID.
      	* config/i386/i386.md (rdpid_rex64) New.
      	(rdpid): Make 32bit only.
      
      gcc/testsuite/
      	* gcc.target/i386/rdpid.c: Remove "eax".
      
      From-SVN: r257229
      Julia Koval committed
    • re PR lto/84105 (Segmentation fault in pp_tree_identifier() during LTO) · 7aec1b82
      	PR lto/84105
      	* tree-pretty-print.c (dump_generic_node): Handle a TYPE_NAME with
      	an IDENTIFIER_NODE for FUNCTION_TYPE's.
      
      From-SVN: r257228
      Aldy Hernandez committed
    • Revert · 73df9303
      	2018-01-12  Eric Botcazou  <ebotcazou@adacore.com>
      
      	* config/sparc/sparc.md (vxworks_load_got): Set the GOT register.
      
      From-SVN: r257227
      Eric Botcazou committed
    • [AArch64] PR tree-optimization/64946: XFAIL gcc.target/aarch64/vect-abs-compile.c · 39058d4b
      This test has been failing since forever, it has never passed AFAIK.
      The PR details the vectoriser deficiency.
      I propose we xfail this with a reference to the PR.
      
              PR tree-optimization/64946
              * gcc.target/aarch64/vect-abs-compile.c: XFAIL byte and half-word
              scan-assembler checks.
      
      From-SVN: r257225
      Kyrylo Tkachov committed
    • re PR rtl-optimization/84071 (wrong elimination of zero-extension after sign-extended load) · ae20d760
      	PR rtl-optimization/84071
      	* combine.c (record_dead_and_set_regs_1): Record the source unmodified
      	for a paradoxical SUBREG on a WORD_REGISTER_OPERATIONS target.
      
      From-SVN: r257224
      Eric Botcazou committed
    • [ARC] Add 'aux' variable attribute. · b6fb257b
      The 'aux' variable attribute is used to directly access the auxiliary
      register space from C.
      
      gcc/
      2018-01-31  Claudiu Zissulescu  <claziss@synopsys.com>
      
              * config/arc/arc.c (arc_handle_aux_attribute): New function.
              (arc_attribute_table): Add 'aux' attribute.
              (arc_in_small_data_p): Consider aux like variables.
              (arc_is_aux_reg_p): New function.
              (arc_asm_output_aligned_decl_local): Ignore 'aux' like variables.
              (arc_get_aux_arg): New function.
              (prepare_move_operands): Handle aux-register access.
              (arc_handle_aux_attribute): New function.
              * doc/extend.texi (ARC Variable attributes): Add subsection.
      
      testsuite/
      2018-01-31  Claudiu Zissulescu  <claziss@synopsys.com>
      
              * gcc.target/arc/taux-1.c: New test.
              * gcc.target/arc/taux-2.c: Likewise.
      
      From-SVN: r257223
      Claudiu Zissulescu committed
    • [ARC] Add 'uncached' attribute. · 8180c03f
      The _Uncached type qualifier can be used to bypass the cache without
      resorting to declaring variables as volatile.
      
      gcc/
      2018-01-31  Claudiu Zissulescu  <claziss@synopsys.com>
      
      	* config/arc/arc-protos.h (arc_is_uncached_mem_p): Function proto.
      	* config/arc/arc.c (arc_handle_uncached_attribute): New function.
      	(arc_attribute_table): Add 'uncached' attribute.
      	(arc_print_operand): Print '.di' flag for uncached memory
      	accesses.
      	(arc_in_small_data_p): Do not consider for small data the uncached
      	types.
      	(arc_is_uncached_mem_p): New function.
      	* config/arc/predicates.md (compact_store_memory_operand): Check
      	for uncached memory accesses.
      	(nonvol_nonimm_operand): Likewise.
      	* gcc/doc/extend.texi (ARC Type Attribute): New subsection.
      
      gcc/testsuite
      2018-01-31  Claudiu Zissulescu  <claziss@synopsys.com>
      
      	* gcc.target/arc/uncached.c: New test.
      
      From-SVN: r257222
      Claudiu Zissulescu committed
    • Fix gnat.dg/lto20.adb XPASS · 2f857e1b
      	PR lto/83954
      	* gnat.dg/lto20.adb: Remove dg-excess-errors.
      
      From-SVN: r257221
      Rainer Orth committed
    • re PR preprocessor/69869 (internal compiler error: Segmentation fault in call to… · 1306a81d
      re PR preprocessor/69869 (internal compiler error: Segmentation fault in call to skip_macro_block_comment when using '-traditional-cpp')
      
      	PR preprocessor/69869
      	* traditional.c (skip_macro_block_comment): Return bool, true if
      	the macro block comment is unterminated.
      	(copy_comment): Use return value from skip_macro_block_comment instead
      	of always false.
      
      	* gcc.dg/cpp/trad/pr69869.c: New test.
      
      From-SVN: r257220
      Jakub Jelinek committed
    • re PR c/84100 (Function __attribute__((optimize(align-loops=32))) gives spurious… · 7b56ebc3
      re PR c/84100 (Function __attribute__((optimize(align-loops=32))) gives spurious warning and is ignored)
      
      	PR c/84100
      	* common.opt (falign-functions=, falign-jumps=, falign-labels=,
      	falign-loops=): Add Optimization flag.
      
      	* gcc.dg/pr84100.c: New test.
      
      From-SVN: r257219
      Jakub Jelinek committed
    • go-gcc.cc (Gcc_backend::convert_tree): New private method. · ebc2f401
      	* go-gcc.cc (Gcc_backend::convert_tree): New private method.
      	(Gcc_backend::constructor_expression): Call it.
      	(Gcc_backend::assignment_statement): Likewise.
      	(Gcc_backend::temporary_variable): Likewise.
      
      Fixes https://golang.org/issue/#23606
      
      From-SVN: r257218
      Ian Lance Taylor committed
    • re PR target/84064 (ICE in ix86_expand_prologue related to… · 58375711
      re PR target/84064 (ICE in ix86_expand_prologue related to -fstack-clash-protection and memcpy on i686)
      
      	PR target/84064
      	* i386.c (ix86_adjust_stack_and_probe_stack_clash): New argument
      	INT_REGISTERS_SAVED.  Check it prior to calling
      	get_scratch_register_on_entry.
      	(ix86_adjust_stack_and_probe): Similarly.
      	(ix86_emit_probe_stack_range): Similarly.
      	(ix86_expand_prologue): Corresponding changes.
      
      	PR target/84064
      	* gcc.target/i386/pr84064: New test.
      
      From-SVN: r257217
      Jeff Law committed
    • compiler: Function_type and Backend_function_type should not be identical · 61ddc5ea
          
          Function_type and Backend_function_type have different backend
          representations, so they should not be identical. Otherwise it
          confuses Type::type_btypes map.
          
          Reviewed-on: https://go-review.googlesource.com/90975
      
      From-SVN: r257216
      Ian Lance Taylor committed
    • Daily bump. · f0ab0c3a
      From-SVN: r257215
      GCC Administrator committed
  2. 30 Jan, 2018 2 commits