This is an automated email from the git hooks/post-receive script.
tcwg-buildslave pushed a change to branch linaro-local/ci/tcwg_gnu/gnu-master-arm-bootstrap_debug in repository toolchain/ci/gcc.
from 3ae0cd94abc libstdc++: Implement remaining piece of LWG 3448 adds 989bc4ca2f2 tree-optimization/96565 - improve DSE with paths ending in [...] adds ff7463172e5 tree-optimization/96579 - another special-operands fix in reassoc adds d7738d4fde5 AArch64: Add FLAG for min/max intrinsics [PR94442] adds 795944c4563 AArch64: Add FLAG for rounding intrinsics [PR94442] adds 6b3034eaba8 lra: Canonicalize mult to shift in address reloads adds 9ceb3b8d8f6 streamline TARGET_MEM_REF dumping adds cb3874dcf82 vec: add exact argument for various grow functions. adds eb68d9d828f tree-optimization/96522 - transfer of flow-sensitive info i [...] adds c336eda750d Fortran : ICE for division by zero in declaration PR95882 adds abca87c5784 rs6000: Support ELFv2 sibcall for indirect calls [PR96787] adds 04df5e7de2f ia32: Fix alignment of _Atomic fields [PR65146] adds 7b743c67f04 libstdc++: Fix operator overload ambiguity with calendar types adds 71e9716137d libstdc++: Fix arithmetic bug in chrono::year_month::operator+ adds 33a55fdb1e7 Fix shadd-2.c scan assembler count. adds 82030d51017 libstdc++: Make std::chrono::duration use reduced ratio for period adds cad843c7e7a gotest: use a space rather than a middle dot in target lists adds 8b394f011a8 Daily bump. adds 6ba09730375 Fix: AVX512VP2INTERSECT should imply AVX512DQ. adds 58d6eea0e07 Add expander for movp2hi and movp2qi. adds 3ba43155d2b testsuite: Run gcc.dg/pr96579.c only on targets with dfp support. adds 9d463ce7f98 This patch fixes PR96624. adds 43f3e695699 aarch64: Disable mem-shift-canonical test on ILP32 adds 3b062fc43e1 fix a typo in rtl.texi adds b648814c02e [PATCH PR96357][GCC][AArch64]: could not split insn UNSPEC_ [...] adds cb3c3d63315 Fortran: Fix absent-optional handling for nondescriptor arr [...] adds ba6373a3978 PR c/96596 - ICE in match_builtin_function_types on a decla [...] adds 1ad755dcbbd Correct calls to vec::safe_grow in conditionally compiled code. adds 1c1e41b0650 amdgcn: Update vec_safe_grow_cleared usage adds 26c24398d36 rs6000: r12 copy cleanup adds d14c547abd4 Add -Wstringop-overread for reading past the end by string [...] adds 82db1a42e92 libstdc++: Fix std::gcd and std::lcm for unsigned integers [...] adds f2f48b68a6a libstdc++: Fix common_type specializations for duration adds 8f7ea26ae32 Daily bump. adds cd0233527af rs6000: Remove ALTIVEC_BUILTIN_MASK_FOR_STORE adds 0789600c597 libstdc++: Fix deleted overload of __absu(bool) adds daba4a713e7 Daily bump. adds 44c677d1ebb x86: Fix up ssse3_pshufbv8qi splitter adds 8e1be7efcb1 2020-8-20 José Rui Faustino de Sousa jrfsousa@gmail.com adds cd49b706789 2020-8-21 Steve Kargl sgk@troutmask.apl.washington.edu adds 8f7d99acf6d 2020-8-20 José Rui Faustino de Sousa jrfsousa@gmail.com adds 3a7a95a220c 2020-8-20 José Rui Faustino de Sousa jrfsousa@gmail.com adds a240e83ce9d 2020-8-20 José Rui Faustino de Sousa jrfsousa@gmail.com adds 6ccadc4c048 Use get_size_range instead of get_range to obtain range of [...] adds cf2bc8617ae Daily bump. adds d0939f42dd8 testsuite: Update some vect cases for partial vectors adds 0106300f6c3 varasm: Optimize memory broadcast for constant vector under [...] adds e11c4b7f837 ipa/96806 - Fix ICE in ipa-cp due to integer addition overflow adds 39f5b724844 tree-cfg: Improve gimple switch verification adds 1aa71af0935 Refine expander vec_unpacku_float_hi_v16si/vec_unpacku_floa [...] adds 371fa005aeb testsuite: Fix aarch64/strcmpopt_6.c for -Wstringop-overread adds f089569851c tree-optimization/96854 - testcase for SLP reduction of two [...] adds 6940c20bbb3 d: Fix ICEs in the front-end when pointer size is 16-bit. adds d503cd98713 PR tree-optimization/96818 - cast label range to type of sw [...] adds ecdb93224c5 analyzer: fix ICE on casting float to pointer [PR96764] adds 0d1b4edc5ff analyzer: fix ICE on RANGE_EXPR in CONSTRUCTORs [PR96763] adds 73a2b8dd17d c++: Implement P1009: Array size deduction in new-expressions. adds 18056e45db1 analyzer: fix ICE on unknown index in CONSTRUCTOR [PR96860] adds ee7bfbe5eb7 analyzer: gather builtin/internal fn handling into switch s [...] adds bc62bfb0f43 analyzer: handle __builtin___memset_chk [PR96798] adds 1da918e153b rs6000, remove improperly defined and unsupported builtins. new 13e4ba28f36 Daily bump. new be7ad7dfdb3 test/rs6000: Add Power9 and up as vect_len target new ef688fdfc61 Correct Changelog for fix to PR96806
The 3 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference.
Summary of changes: gcc/ChangeLog | 394 +++++++++ gcc/DATESTAMP | 2 +- gcc/ada/ChangeLog | 6 + gcc/ada/gcc-interface/trans.c | 4 +- gcc/alias.c | 5 +- gcc/analyzer/ChangeLog | 57 ++ gcc/analyzer/region-model-manager.cc | 35 +- gcc/analyzer/region-model.cc | 50 +- gcc/analyzer/region.cc | 3 +- gcc/analyzer/store.cc | 146 ++- gcc/analyzer/store.h | 10 +- gcc/analyzer/svalue.cc | 13 +- gcc/attribs.c | 8 +- gcc/attribs.h | 1 - gcc/builtins.c | 977 +++++++++++++-------- gcc/builtins.h | 44 +- gcc/c-family/ChangeLog | 4 + gcc/c-family/c.opt | 4 + gcc/c/ChangeLog | 11 + gcc/c/c-decl.c | 5 +- gcc/c/gimple-parser.c | 4 +- gcc/calls.c | 81 +- gcc/calls.h | 2 +- gcc/cfgbuild.c | 2 +- gcc/cfgexpand.c | 12 +- gcc/cfgrtl.c | 2 +- gcc/combine.c | 4 +- gcc/common/config/i386/i386-common.c | 4 +- gcc/config/aarch64/aarch64-simd-builtins.def | 232 ++--- gcc/config/aarch64/aarch64-sve-builtins.cc | 10 +- gcc/config/aarch64/aarch64-sve.md | 42 +- gcc/config/c6x/c6x.c | 2 +- gcc/config/gcn/gcn-tree.c | 2 +- gcc/config/i386/i386-expand.c | 6 + gcc/config/i386/i386.c | 35 +- gcc/config/i386/sse.md | 35 +- gcc/config/rs6000/altivec.h | 4 - gcc/config/rs6000/rs6000-builtin.def | 1 - gcc/config/rs6000/rs6000-call.c | 12 +- gcc/config/rs6000/rs6000.c | 21 +- gcc/cp/ChangeLog | 28 + gcc/cp/call.c | 4 +- gcc/cp/class.c | 5 +- gcc/cp/constraint.cc | 2 +- gcc/cp/decl.c | 4 +- gcc/cp/init.c | 55 +- gcc/cp/parser.c | 15 +- gcc/cp/pt.c | 6 +- gcc/cp/rtti.c | 2 +- gcc/d/ChangeLog | 10 + gcc/d/d-target.cc | 3 - gcc/d/d-tree.h | 2 +- gcc/d/decl.cc | 36 - gcc/d/intrinsics.cc | 7 +- gcc/d/typeinfo.cc | 36 + gcc/df-core.c | 4 +- gcc/doc/invoke.texi | 21 +- gcc/doc/rtl.texi | 2 +- gcc/doc/sourcebuild.texi | 35 + gcc/dwarf2cfi.c | 2 +- gcc/early-remat.c | 4 +- gcc/except.c | 2 +- gcc/expr.c | 8 +- gcc/final.c | 4 +- gcc/fortran/ChangeLog | 55 ++ gcc/fortran/decl.c | 3 + gcc/fortran/expr.c | 8 +- gcc/fortran/interface.c | 5 +- gcc/fortran/module.c | 42 +- gcc/fortran/simplify.c | 16 +- gcc/fortran/trans-array.c | 10 +- gcc/fortran/trans-openmp.c | 2 +- gcc/function.c | 2 +- gcc/fwprop.c | 6 +- gcc/gcc.c | 2 +- gcc/genautomata.c | 6 +- gcc/genmatch.c | 4 +- gcc/genrecog.c | 12 +- gcc/ggc-common.c | 2 +- gcc/gimple-fold.c | 12 +- gcc/gimple-loop-versioning.cc | 4 +- gcc/gimple.c | 2 +- gcc/go/gofrontend/MERGE | 2 +- gcc/graphite-isl-ast-to-gimple.c | 2 +- gcc/haifa-sched.c | 4 +- gcc/insn-addr.h | 4 +- gcc/ipa-cp.c | 17 +- gcc/ipa-devirt.c | 4 +- gcc/ipa-fnsummary.c | 26 +- gcc/ipa-icf.c | 2 +- gcc/ipa-prop.c | 26 +- gcc/ipa-reference.c | 2 +- gcc/ipa-split.c | 2 +- gcc/ira.c | 2 +- gcc/jit/ChangeLog | 5 + gcc/jit/jit-recording.c | 2 +- gcc/lower-subreg.c | 2 +- gcc/lra-constraints.c | 43 +- gcc/lto-streamer-in.c | 18 +- gcc/lto/ChangeLog | 5 + gcc/lto/lto-common.c | 2 +- gcc/modulo-sched.c | 6 +- gcc/omp-general.c | 2 +- gcc/passes.c | 4 +- gcc/predict.c | 2 +- gcc/profile.c | 2 +- gcc/read-rtl-function.c | 2 +- gcc/read-rtl.c | 2 +- gcc/reg-stack.c | 2 +- gcc/regrename.c | 2 +- gcc/rtlanal.c | 2 +- gcc/sched-deps.c | 2 +- gcc/sel-sched-ir.c | 6 +- gcc/symtab.c | 3 +- gcc/testsuite/ChangeLog | 226 +++++ gcc/testsuite/c-c++-common/Warray-bounds-7.c | 77 +- gcc/testsuite/c-c++-common/Wrestrict.c | 4 +- gcc/testsuite/c-c++-common/attr-nonstring-3.c | 4 +- gcc/testsuite/c-c++-common/attr-nonstring-6.c | 82 +- gcc/testsuite/c-c++-common/attr-nonstring-8.c | 2 +- gcc/testsuite/g++.dg/analyzer/pr96763.C | 13 + gcc/testsuite/g++.dg/cpp0x/sfinae4.C | 8 +- gcc/testsuite/g++.dg/cpp2a/new-array1.C | 70 ++ gcc/testsuite/g++.dg/cpp2a/new-array2.C | 22 + gcc/testsuite/g++.dg/cpp2a/new-array3.C | 17 + gcc/testsuite/g++.dg/cpp2a/new-array4.C | 10 + gcc/testsuite/g++.dg/ipa/pr96806.C | 53 ++ gcc/testsuite/g++.dg/pr96818.C | 28 + .../g++.dg/torture/Wsizeof-pointer-memaccess1.C | 2 +- .../g++.dg/torture/Wsizeof-pointer-memaccess2.C | 2 +- gcc/testsuite/gcc.dg/Warray-bounds-39.c | 46 +- gcc/testsuite/gcc.dg/Warray-bounds-40.c | 2 +- gcc/testsuite/gcc.dg/Warray-bounds-58.c | 24 +- .../gcc.dg/Wbuiltin-declaration-mismatch-16.c | 12 + gcc/testsuite/gcc.dg/Wsizeof-pointer-memaccess1.c | 2 +- gcc/testsuite/gcc.dg/Wstringop-overflow-22.c | 54 +- gcc/testsuite/gcc.dg/Wstringop-overflow-33.c | 8 +- gcc/testsuite/gcc.dg/Wstringop-overflow-9.c | 4 +- gcc/testsuite/gcc.dg/Wstringop-overread-2.c | 117 +++ gcc/testsuite/gcc.dg/Wstringop-overread-3.c | 188 ++++ gcc/testsuite/gcc.dg/Wstringop-overread.c | 716 +++++++++++++++ gcc/testsuite/gcc.dg/analyzer/memset-1.c | 14 + gcc/testsuite/gcc.dg/analyzer/pr96764.c | 6 + gcc/testsuite/gcc.dg/analyzer/pr96860-1.c | 9 + gcc/testsuite/gcc.dg/analyzer/pr96860-2.c | 8 + gcc/testsuite/gcc.dg/attr-nonstring-2.c | 22 +- gcc/testsuite/gcc.dg/attr-nonstring-3.c | 18 +- gcc/testsuite/gcc.dg/attr-nonstring-4.c | 6 +- gcc/testsuite/gcc.dg/attr-nonstring.c | 32 +- gcc/testsuite/gcc.dg/builtin-object-size-4.c | 3 + gcc/testsuite/gcc.dg/builtin-stringop-chk-5.c | 2 +- gcc/testsuite/gcc.dg/builtin-stringop-chk-8.c | 30 +- gcc/testsuite/gcc.dg/pr78902.c | 1 + gcc/testsuite/gcc.dg/pr79214.c | 2 +- gcc/testsuite/gcc.dg/pr96579.c | 4 + gcc/testsuite/gcc.dg/pr96818.c | 14 + gcc/testsuite/gcc.dg/strcmpopt_10.c | 2 +- gcc/testsuite/gcc.dg/strlenopt-57.c | 6 +- .../gcc.dg/torture/Wsizeof-pointer-memaccess1.c | 2 +- gcc/testsuite/gcc.dg/torture/pr96522.c | 36 + .../gcc.dg/tree-ssa/builtins-folding-gimple-ub.c | 4 +- gcc/testsuite/gcc.dg/tree-ssa/loop-19.c | 4 +- gcc/testsuite/gcc.dg/tree-ssa/loop-2.c | 1 - gcc/testsuite/gcc.dg/tree-ssa/loop-3.c | 3 +- gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-40.c | 16 + gcc/testsuite/gcc.dg/uninit-33.c | 2 +- gcc/testsuite/gcc.dg/vect/bb-slp-pr69907.c | 4 +- gcc/testsuite/gcc.dg/vect/pr96854.c | 20 + gcc/testsuite/gcc.dg/vect/slp-3.c | 8 +- gcc/testsuite/gcc.dg/vect/slp-multitypes-11.c | 4 +- gcc/testsuite/gcc.dg/vect/slp-perm-1.c | 4 +- gcc/testsuite/gcc.dg/vect/slp-perm-5.c | 4 +- gcc/testsuite/gcc.dg/vect/slp-perm-6.c | 4 +- gcc/testsuite/gcc.dg/vect/slp-perm-7.c | 4 +- gcc/testsuite/gcc.dg/vect/slp-perm-8.c | 4 +- gcc/testsuite/gcc.dg/vect/slp-perm-9.c | 4 +- gcc/testsuite/gcc.dg/vect/vect-version-2.c | 6 +- gcc/testsuite/gcc.dg/warn-strnlen-no-nul-2.c | 8 +- gcc/testsuite/gcc.dg/warn-strnlen-no-nul.c | 18 +- .../gcc.target/aarch64/mem-shift-canonical.c | 28 + gcc/testsuite/gcc.target/aarch64/strcmpopt_6.c | 2 +- gcc/testsuite/gcc.target/aarch64/sve/pr96357.c | 25 + gcc/testsuite/gcc.target/hppa/shadd-2.c | 2 +- gcc/testsuite/gcc.target/i386/avx512f-pr96551-1.c | 18 + gcc/testsuite/gcc.target/i386/avx512f-pr96551-2.c | 33 + gcc/testsuite/gcc.target/i386/double_mask_reg-1.c | 19 + gcc/testsuite/gcc.target/i386/pr65146.c | 12 + gcc/testsuite/gcc.target/i386/strcmpopt_6.c | 8 +- gcc/testsuite/gcc.target/powerpc/pr96787-1.c | 38 + gcc/testsuite/gcc.target/powerpc/pr96787-2.c | 35 + gcc/testsuite/gfortran.dg/PR94110.f90 | 88 ++ gcc/testsuite/gfortran.dg/PR95352.f90 | 27 + gcc/testsuite/gfortran.dg/PR96726.f90 | 72 ++ gcc/testsuite/gfortran.dg/PR96727.f90 | 34 + gcc/testsuite/gfortran.dg/PR96728.f90 | 49 ++ .../gfortran.dg/optional_assumed_charlen_2.f90 | 48 + gcc/testsuite/gfortran.dg/pr95882_1.f90 | 8 + gcc/testsuite/gfortran.dg/pr95882_2.f90 | 6 + gcc/testsuite/gfortran.dg/pr95882_3.f90 | 6 + gcc/testsuite/gfortran.dg/pr95882_4.f90 | 7 + gcc/testsuite/gfortran.dg/pr95882_5.f90 | 6 + gcc/testsuite/gfortran.dg/reshape_8.f90 | 14 + gcc/testsuite/lib/target-supports.exp | 61 ++ gcc/tracer.c | 2 +- gcc/trans-mem.c | 4 +- gcc/tree-cfg.c | 31 +- gcc/tree-complex.c | 4 +- gcc/tree-if-conv.c | 2 +- gcc/tree-inline.c | 2 +- gcc/tree-into-ssa.c | 4 +- gcc/tree-object-size.c | 4 +- gcc/tree-predcom.c | 8 +- gcc/tree-pretty-print.c | 89 +- gcc/tree-ssa-address.c | 52 +- gcc/tree-ssa-coalesce.c | 2 +- gcc/tree-ssa-dse.c | 11 + gcc/tree-ssa-forwprop.c | 2 +- gcc/tree-ssa-loop-ivopts.c | 4 +- gcc/tree-ssa-loop-niter.c | 2 +- gcc/tree-ssa-pre.c | 13 +- gcc/tree-ssa-propagate.c | 4 +- gcc/tree-ssa-reassoc.c | 17 +- gcc/tree-ssa-sccvn.c | 11 +- gcc/tree-ssa-strlen.c | 10 +- gcc/tree-ssa-threadedge.c | 2 +- gcc/tree-ssa-uninit.c | 8 +- gcc/tree-ssanames.c | 2 +- gcc/tree-streamer-in.c | 2 +- gcc/tree-vect-loop.c | 8 +- gcc/tree-vect-patterns.c | 2 +- gcc/tree-vect-slp.c | 9 +- gcc/tree-vect-stmts.c | 15 +- gcc/tree-vrp.c | 2 + gcc/tree.c | 15 + gcc/tree.h | 10 + gcc/varasm.c | 181 +++- gcc/vec.c | 2 +- gcc/vec.h | 27 +- libgo/testsuite/gotest | 4 +- libstdc++-v3/ChangeLog | 128 +++ libstdc++-v3/include/experimental/numeric | 38 +- libstdc++-v3/include/std/chrono | 341 ++++--- libstdc++-v3/include/std/numeric | 83 +- .../duration/requirements/reduced_period.cc | 183 ++++ .../20_util/duration/requirements/typedefs_neg2.cc | 3 +- .../typedefs_neg2.cc => 26_numerics/gcd/92978.cc} | 32 +- libstdc++-v3/testsuite/26_numerics/gcd/gcd_neg.cc | 10 +- .../typedefs_neg2.cc => 26_numerics/lcm/92978.cc} | 21 +- libstdc++-v3/testsuite/26_numerics/lcm/lcm_neg.cc | 10 +- .../testsuite/experimental/numeric/92978.cc | 48 + libstdc++-v3/testsuite/std/time/year_month/1.cc | 12 + libstdc++-v3/testsuite/std/time/year_month/2.cc | 40 + .../testsuite/std/time/year_month_day/2.cc | 40 + .../testsuite/std/time/year_month_day_last/2.cc | 40 + .../testsuite/std/time/year_month_weekday/2.cc | 40 + .../std/time/year_month_weekday_last/2.cc | 40 + 256 files changed, 5914 insertions(+), 1529 deletions(-) create mode 100644 gcc/testsuite/g++.dg/analyzer/pr96763.C create mode 100644 gcc/testsuite/g++.dg/cpp2a/new-array1.C create mode 100644 gcc/testsuite/g++.dg/cpp2a/new-array2.C create mode 100644 gcc/testsuite/g++.dg/cpp2a/new-array3.C create mode 100644 gcc/testsuite/g++.dg/cpp2a/new-array4.C create mode 100644 gcc/testsuite/g++.dg/ipa/pr96806.C create mode 100644 gcc/testsuite/g++.dg/pr96818.C create mode 100644 gcc/testsuite/gcc.dg/Wbuiltin-declaration-mismatch-16.c create mode 100644 gcc/testsuite/gcc.dg/Wstringop-overread-2.c create mode 100644 gcc/testsuite/gcc.dg/Wstringop-overread-3.c create mode 100644 gcc/testsuite/gcc.dg/Wstringop-overread.c create mode 100644 gcc/testsuite/gcc.dg/analyzer/pr96764.c create mode 100644 gcc/testsuite/gcc.dg/analyzer/pr96860-1.c create mode 100644 gcc/testsuite/gcc.dg/analyzer/pr96860-2.c create mode 100644 gcc/testsuite/gcc.dg/pr96579.c create mode 100644 gcc/testsuite/gcc.dg/pr96818.c create mode 100644 gcc/testsuite/gcc.dg/torture/pr96522.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-40.c create mode 100644 gcc/testsuite/gcc.dg/vect/pr96854.c create mode 100644 gcc/testsuite/gcc.target/aarch64/mem-shift-canonical.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/pr96357.c create mode 100644 gcc/testsuite/gcc.target/i386/avx512f-pr96551-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx512f-pr96551-2.c create mode 100644 gcc/testsuite/gcc.target/i386/double_mask_reg-1.c create mode 100644 gcc/testsuite/gcc.target/i386/pr65146.c create mode 100644 gcc/testsuite/gcc.target/powerpc/pr96787-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/pr96787-2.c create mode 100644 gcc/testsuite/gfortran.dg/PR94110.f90 create mode 100644 gcc/testsuite/gfortran.dg/PR95352.f90 create mode 100644 gcc/testsuite/gfortran.dg/PR96726.f90 create mode 100644 gcc/testsuite/gfortran.dg/PR96727.f90 create mode 100644 gcc/testsuite/gfortran.dg/PR96728.f90 create mode 100644 gcc/testsuite/gfortran.dg/optional_assumed_charlen_2.f90 create mode 100644 gcc/testsuite/gfortran.dg/pr95882_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/pr95882_2.f90 create mode 100644 gcc/testsuite/gfortran.dg/pr95882_3.f90 create mode 100644 gcc/testsuite/gfortran.dg/pr95882_4.f90 create mode 100644 gcc/testsuite/gfortran.dg/pr95882_5.f90 create mode 100644 gcc/testsuite/gfortran.dg/reshape_8.f90 create mode 100644 libstdc++-v3/testsuite/20_util/duration/requirements/reduced_period.cc copy libstdc++-v3/testsuite/{20_util/duration/requirements/typedefs_neg2.cc => 26_ [...] copy libstdc++-v3/testsuite/{20_util/duration/requirements/typedefs_neg2.cc => 26_ [...] create mode 100644 libstdc++-v3/testsuite/experimental/numeric/92978.cc create mode 100644 libstdc++-v3/testsuite/std/time/year_month/2.cc create mode 100644 libstdc++-v3/testsuite/std/time/year_month_day/2.cc create mode 100644 libstdc++-v3/testsuite/std/time/year_month_day_last/2.cc create mode 100644 libstdc++-v3/testsuite/std/time/year_month_weekday/2.cc create mode 100644 libstdc++-v3/testsuite/std/time/year_month_weekday_last/2.cc