Started by user snail Running as SYSTEM [EnvInject] - Loading node environment variables. Building remotely on docker-jenkins-agent in workspace /home/jenkins/agent/workspace/gcc-patch [WS-CLEANUP] Deleting project workspace... [WS-CLEANUP] Deferred wipeout is used... [WS-CLEANUP] Done The recommended git tool is: NONE using credential 0adb5fc7-caa2-429d-97d2-c7fa2fa1d884 Cloning the remote Git repository Using shallow clone with depth 1 Avoid fetching tags Cloning repository git@github.com:wangliu-iscas/gcc-patch.git/ > git init /home/jenkins/agent/workspace/gcc-patch # timeout=10 Fetching upstream changes from git@github.com:wangliu-iscas/gcc-patch.git/ > git --version # timeout=10 > git --version # 'git version 2.37.2' using GIT_SSH to set credentials patchwork github wangliu-iscas git ssh key Verifying host key using known hosts file, will automatically accept unseen keys > git fetch --no-tags --force --progress --depth=1 -- git@github.com:wangliu-iscas/gcc-patch.git/ +refs/heads/*:refs/remotes/origin/* # timeout=10 > git config remote.origin.url git@github.com:wangliu-iscas/gcc-patch.git/ # timeout=10 > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10 Avoid second fetch > git rev-parse refs/remotes/origin/master^{commit} # timeout=10 Checking out Revision 030a08c857204909641b0fdc47ba3066f48de404 (refs/remotes/origin/master) > git config core.sparsecheckout # timeout=10 > git checkout -f 030a08c857204909641b0fdc47ba3066f48de404 # timeout=10 Commit message: "libstdc++: Fix -Wunused-function warning in src/c++11/debug.cc" > git rev-list --no-walk baeec7cc83b19b46d1c73523f06efa7ea2b30390 # timeout=10 First time build. Skipping changelog. [EnvInject] - Mask passwords that will be passed as build parameters. [EnvInject] - Executing scripts and injecting environment variables after the SCM step. [EnvInject] - Injecting as environment variables the properties content GITHUB_REPO=https://github.com/wangliu-iscas/ PATCHWORK_URL=https://patchwork.plctlab.org [EnvInject] - Variables injected successfully. [gcc-patch] $ /usr/bin/env bash /tmp/jenkins2808347107438470041.sh + git config pull.rebase false + git fetch origin master From github.com:wangliu-iscas/gcc-patch * branch master -> FETCH_HEAD + git checkout master Switched to a new branch 'master' branch 'master' set up to track 'origin/master'. + git pull origin master From github.com:wangliu-iscas/gcc-patch * branch master -> FETCH_HEAD Already up to date. + git fetch origin upstream-master From github.com:wangliu-iscas/gcc-patch * branch upstream-master -> FETCH_HEAD + git checkout upstream-master Switched to a new branch 'upstream-master' branch 'upstream-master' set up to track 'origin/upstream-master'. + git remote add upstream https://github.com/gcc-mirror/gcc.git + git pull upstream master From https://github.com/gcc-mirror/gcc * branch master -> FETCH_HEAD * [new branch] master -> upstream/master Already up to date. + git push -u origin upstream-master Everything up-to-date branch 'upstream-master' set up to track 'origin/upstream-master'. + git checkout master Switched to branch 'master' Your branch is up to date with 'origin/master'. + git merge upstream-master Already up to date. + git push -u origin master Everything up-to-date branch 'master' set up to track 'origin/master'. + branchname=series2065-patch2972 ++ git branch -a ++ grep 'series2065-patch2972$' + checkbranch= + checkbranchresult=null + '[' null = series2065-patch2972 ']' + git checkout -b series2065-patch2972 Switched to a new branch 'series2065-patch2972' ++ curl https://patchwork.plctlab.org/api/1.2/series/2065/ % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 1396 100 1396 0 0 37729 0 --:--:-- --:--:-- --:--:-- 37729 + series_response='{"id":2065,"url":"https://patchwork.plctlab.org/api/1.2/series/2065/","web_url":"https://patchwork.plctlab.org/project/gcc-patch/list/?series=2065","project":{"id":1,"url":"https://patchwork.plctlab.org/api/1.2/projects/1/","name":"gcc-patch","link_name":"gcc-patch","list_id":"gcc-patches.gcc.gnu.org","list_email":"gcc-patches@gcc.gnu.org","web_url":"https://gcc.gnu.org/mailman/listinfo/gcc-patches","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"name":"[committed] libstdc++: Implement constexpr std::to_chars for C++23 (P2291R3)","date":"2022-10-15T20:25:18","submitter":{"id":67,"url":"https://patchwork.plctlab.org/api/1.2/people/67/","name":"Jonathan Wakely","email":"jwakely@redhat.com"},"version":1,"total":1,"received_total":1,"received_all":true,"mbox":"https://patchwork.plctlab.org/series/2065/mbox/","cover_letter":null,"patches":[{"id":2972,"url":"https://patchwork.plctlab.org/api/1.2/patches/2972/","web_url":"https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/","msgid":"<20221015202518.2687700-1-jwakely@redhat.com>","list_archive_url":null,"date":"2022-10-15T20:25:18","name":"[committed] libstdc++: Implement constexpr std::to_chars for C++23 (P2291R3)","mbox":"https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/mbox/"}]}' ++ jq '.patches[] | (.id|tostring) + "," + .mbox' ++ echo '{"id":2065,"url":"https://patchwork.plctlab.org/api/1.2/series/2065/","web_url":"https://patchwork.plctlab.org/project/gcc-patch/list/?series=2065","project":{"id":1,"url":"https://patchwork.plctlab.org/api/1.2/projects/1/","name":"gcc-patch","link_name":"gcc-patch","list_id":"gcc-patches.gcc.gnu.org","list_email":"gcc-patches@gcc.gnu.org","web_url":"https://gcc.gnu.org/mailman/listinfo/gcc-patches","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"name":"[committed] libstdc++: Implement constexpr std::to_chars for C++23 (P2291R3)","date":"2022-10-15T20:25:18","submitter":{"id":67,"url":"https://patchwork.plctlab.org/api/1.2/people/67/","name":"Jonathan Wakely","email":"jwakely@redhat.com"},"version":1,"total":1,"received_total":1,"received_all":true,"mbox":"https://patchwork.plctlab.org/series/2065/mbox/","cover_letter":null,"patches":[{"id":2972,"url":"https://patchwork.plctlab.org/api/1.2/patches/2972/","web_url":"https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/","msgid":"<20221015202518.2687700-1-jwakely@redhat.com>","list_archive_url":null,"date":"2022-10-15T20:25:18","name":"[committed] libstdc++: Implement constexpr std::to_chars for C++23 (P2291R3)","mbox":"https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/mbox/"}]}' + patchid_patchurl='"2972,https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/mbox/"' + echo '"2972,https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/mbox/"' + IFS=, + read -r series_patch_id series_patch_url ++ echo '"2972' ++ sed 's/"//g' + series_patch_id=2972 ++ echo 'https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/mbox/"' ++ sed 's/"//g' + series_patch_url=https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/mbox/ ++ git rev-parse HEAD + commitid_before=030a08c857204909641b0fdc47ba3066f48de404 + eval '+++ declare -p bout bret declare -- bout="Applying: libstdc++: Implement constexpr std::to_chars for C++23 (P2291R3) Using index info to reconstruct a base tree... M libstdc++-v3/include/bits/charconv.h M libstdc++-v3/include/std/charconv M libstdc++-v3/include/std/version Falling back to patching base and 3-way merge... No changes -- Patch already applied." declare -- bret="0" ++ berr='\''++++ git_am https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/mbox/ ++++ patch_url=https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/mbox/ ++++ curl https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/mbox/ ++++ git am -3 --empty=drop % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 24035 100 24035 0 0 237k 0 --:--:-- --:--:-- --:--:-- 237k +++ bout='\''\'\'''\''Applying: libstdc++: Implement constexpr std::to_chars for C++23 (P2291R3) Using index info to reconstruct a base tree... M libstdc++-v3/include/bits/charconv.h M libstdc++-v3/include/std/charconv M libstdc++-v3/include/std/version Falling back to patching base and 3-way merge... No changes -- Patch already applied.'\''\'\'''\'' +++ bret=0'\'' ++ declare -p berr declare -- berr="++++ git_am https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/mbox/ ++++ patch_url=https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/mbox/ ++++ curl https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/mbox/ ++++ git am -3 --empty=drop % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 24035 100 24035 0 0 237k 0 --:--:-- --:--:-- --:--:-- 237k +++ bout='\''Applying: libstdc++: Implement constexpr std::to_chars for C++23 (P2291R3) Using index info to reconstruct a base tree... M libstdc++-v3/include/bits/charconv.h M libstdc++-v3/include/std/charconv M libstdc++-v3/include/std/version Falling back to patching base and 3-way merge... No changes -- Patch already applied.'\'' +++ bret=0"' ++ +++ declare -p bout bret /tmp/jenkins2808347107438470041.sh: line 85: +++: command not found ++ declare -- 'bout=Applying: libstdc++: Implement constexpr std::to_chars for C++23 (P2291R3) Using index info to reconstruct a base tree... M libstdc++-v3/include/bits/charconv.h M libstdc++-v3/include/std/charconv M libstdc++-v3/include/std/version Falling back to patching base and 3-way merge... No changes -- Patch already applied.' ++ declare -- bret=0 ++ ++ 'berr=++++ git_am https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/mbox/ ++++ patch_url=https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/mbox/ ++++ curl https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/mbox/ ++++ git am -3 --empty=drop % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 24035 100 24035 0 0 237k 0 --:--:-- --:--:-- --:--:-- 237k +++ bout='\''Applying: libstdc++: Implement constexpr std::to_chars for C++23 (P2291R3) Using index info to reconstruct a base tree... M libstdc++-v3/include/bits/charconv.h M libstdc++-v3/include/std/charconv M libstdc++-v3/include/std/version Falling back to patching base and 3-way merge... No changes -- Patch already applied.'\'' +++ bret=0' /tmp/jenkins2808347107438470041.sh: line 108: ++: command not found ++ ++ declare -p berr /tmp/jenkins2808347107438470041.sh: line 109: ++: command not found ++ declare -- 'berr=++++ git_am https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/mbox/ ++++ patch_url=https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/mbox/ ++++ curl https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/mbox/ ++++ git am -3 --empty=drop % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 24035 100 24035 0 0 237k 0 --:--:-- --:--:-- --:--:-- 237k +++ bout='\''Applying: libstdc++: Implement constexpr std::to_chars for C++23 (P2291R3) Using index info to reconstruct a base tree... M libstdc++-v3/include/bits/charconv.h M libstdc++-v3/include/std/charconv M libstdc++-v3/include/std/version Falling back to patching base and 3-way merge... No changes -- Patch already applied.'\'' +++ bret=0' ++ git rev-parse HEAD + commitid_after=030a08c857204909641b0fdc47ba3066f48de404 + '[' 0 = 0 ']' + '[' 030a08c857204909641b0fdc47ba3066f48de404 = 030a08c857204909641b0fdc47ba3066f48de404 ']' + submit_check warning 'Repeat Merge' https://patchwork.plctlab.org/jenkins/job/gcc-patch/1317/consoleText 'Git am fail log' + check_state=warning + patch_state='Repeat Merge' + repo_url=https://patchwork.plctlab.org/jenkins/job/gcc-patch/1317/consoleText + DESCRIPTION='Git am fail log' + curl -X POST -H 'Authorization: Token [*******]' -F state=warning -F target_url=https://patchwork.plctlab.org/jenkins/job/gcc-patch/1317/consoleText -F context=gcc-patch-check -F 'description=Git am fail log' https://patchwork.plctlab.org/api/patches/2972/checks/ % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 962 100 422 100 540 11105 14210 --:--:-- --:--:-- --:--:-- 25315 {"id":994,"url":"https://patchwork.plctlab.org/api/patches/2972/checks/994/","user":{"id":1,"url":"https://patchwork.plctlab.org/api/users/1/","username":"snail","first_name":"","last_name":"","email":"wangliu@iscas.ac.cn"},"date":"2022-10-16T00:16:47.151624","state":"warning","target_url":"https://patchwork.plctlab.org/jenkins/job/gcc-patch/1317/consoleText","context":"gcc-patch-check","description":"Git am fail log"}+ curl -X PATCH -H 'Authorization: Token [*******]' -F 'state=Repeat Merge' https://patchwork.plctlab.org/api/1.2/patches/2972/ % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0{"id":2972,"url":"https://patchwork.plctlab.org/api/1.2/patches/2972/","web_url":"https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/","project":{"id":1,"url":"https://patchwork.plctlab.org/api/1.2/projects/1/","name":"gcc-patch","link_name":"gcc-patch","list_id":"gcc-patches.gcc.gnu.org","list_email":"gcc-patches@gcc.gnu.org","web_url":"https://gcc.gnu.org/mailman/listinfo/gcc-patches","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20221015202518.2687700-1-jwakely@redhat.com>","list_archive_url":null,"date":"2022-10-15T20:25:18","name":"[committed] libstdc++: Implement constexpr std::to_chars for C++23 (P2291R3)","commit_ref":null,"pull_url":null,"state":"repeat-merge","archived":false,"hash":"1515919ae358a807d1d1a650e718c19fc823d4b0","submitter":{"id":67,"url":"https://patchwork.plctlab.org/api/1.2/people/67/","name":"Jonathan Wakely","email":"jwakely@redhat.com"},"delegate":null,"mbox":"https://patchwork.plctlab.org/project/gcc-patch/patch/20221015202518.2687700-1-jwakely@redhat.com/mbox/","series":[{"id":2065,"url":"https://patchwork.plctlab.org/api/1.2/series/2065/","web_url":"https://patchwork.plctlab.org/project/gcc-patch/list/?series=2065","date":"2022-10-15T20:25:18","name":"[committed] libstdc++: Implement constexpr std::to_chars for C++23 (P2291R3)","version":1,"mbox":"https://patchwork.plctlab.org/series/2065/mbox/"}],"comments":"https://patchwork.plctlab.org/api/patches/2972/comments/","check":"warning","checks":"https://patchwork.plctlab.org/api/patches/2972/checks/","tags":{},"headers":{"Return-Path":"","Delivered-To":["ouuuleilei@gmail.com","gcc-patches@gcc.gnu.org"],"Received":["by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp772121wrs;\n Sat, 15 Oct 2022 13:26:17 -0700 (PDT)","from sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97])\n by mx.google.com with ESMTPS id\n mp28-20020a1709071b1c00b0078e27f2ef4bsi3937014ejc.956.2022.10.15.13.26.16\n for \n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Sat, 15 Oct 2022 13:26:16 -0700 (PDT)","from server2.sourceware.org (localhost [IPv6:::1])\n\tby sourceware.org (Postfix) with ESMTP id E1BD63858427\n\tfor ; Sat, 15 Oct 2022 20:26:15 +0000 (GMT)","from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.133.124])\n by sourceware.org (Postfix) with ESMTPS id 6A5FF3858CDA\n for ; Sat, 15 Oct 2022 20:25:23 +0000 (GMT)","from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com\n [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n us-mta-546-XHW8AbVgNsqSrY8DGZTsCg-1; Sat, 15 Oct 2022 16:25:20 -0400","from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com\n [10.11.54.10])\n (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n (No client certificate requested)\n by mimecast-mx02.redhat.com (Postfix) with ESMTPS id AF4D080280D;\n Sat, 15 Oct 2022 20:25:19 +0000 (UTC)","from localhost (unknown [10.33.36.7])\n by smtp.corp.redhat.com (Postfix) with ESMTP id 56F96535D29;\n Sat, 15 Oct 2022 20:25:19 +0000 (UTC)"],"X-Google-Smtp-Source":"\n AMsMyM5UEVD+52YFM/5vCCetNbkhqqrYOQFwx+JSaD0DLiLDnvUTIAxGTdE/MXHYvXkYkJjL2rGg","X-Received":"by 2002:a17:906:4fc3:b0:72e:eab4:d9d7 with SMTP id\n i3-20020a1709064fc300b0072eeab4d9d7mr3084781ejw.599.1665865576928;\n Sat, 15 Oct 2022 13:26:16 -0700 (PDT)","ARC-Seal":"i=1; a=rsa-sha256; t=1665865576; cv=none;\n d=google.com; s=arc-20160816;\n b=kU9U59IDhkl4I+0eZxDk7JJYyVBEyWnae+sjMs6R6aKUM8gASDwSqfAHl721ABRxs6\n xB4jTLzVzfyrqj/FjvQtMgfscP/WdfCjdnW7BLQOdX8PRtBJ4Tva2CD8vQgxrLfFrjUS\n ke66nI0OQbYqhw8RB0YR4GtIyMQuL7OI/Bxx5627BaWqM9vqTSNZeVa8UYy1uj3atcJH\n FZTiJNQg4wDIanmqmHLYDWVS3km3AcDq9c5oQwFhoRR4ZomfV/H9NbMJ0WLq+gO9qfuM\n gkSxK3D/kZFOiP+eL6y/qmelRo/wwPBD2Dcqdj9jOWBt/64AVGigmZFNfzi/vk/RfyLY\n 5jzg==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n s=arc-20160816;\n h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post\n :list-archive:list-unsubscribe:list-id:precedence\n :content-transfer-encoding:mime-version:message-id:date:subject:to\n :dmarc-filter:delivered-to:dkim-signature:dkim-filter;\n bh=bcunHjM+wE5qKbVLry4L3noWgBWTjqY1jqLkIfOd0fE=;\n b=LBhKxnlkxh0Tmi4gIS/wq26rlqGjBFnYli+RAcXQlTv9CG0rHR/4+py/LcnF62Itbj\n CHwtcy6X5N1POFhUrON5MC52YkRcXXBvz8SdGOTCIsN5rCUr975hFxSbYnZTied1buGJ\n lZ90PO8m02/gOxsc9GcZNfbG85EHiTe4MHGfkaRfs2oSJvFSkBbx1oJcvlo0I1m4W5FI\n wi7FHsD6tlU0zoUaveQMlDyRb+1+7xkrZX2LhiGJAZFqO0SkpcuZdghAfm8HJCWNmoGx\n 7hdvqBv4m2gDV24+rIU9wxrjudMToKfW1BUgFquUGbFiLNcTHqPTC01vAkyc8TRfoU+a\n LRbw==","ARC-Authentication-Results":"i=1; mx.google.com;\n dkim=pass header.i=@gcc.gnu.org header.s=default header.b=gzu8EKGi;\n spf=pass (google.com: domain of\n gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as\n permitted sender)\n smtp.mailfrom=\"gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org\";\n dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org","Received-SPF":"pass (google.com: domain of\n gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as\n permitted sender) client-ip=8.43.85.97;","Authentication-Results":"mx.google.com;\n dkim=pass header.i=@gcc.gnu.org header.s=default header.b=gzu8EKGi;\n spf=pass (google.com: domain of\n gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as\n permitted sender)\n smtp.mailfrom=\"gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org\";\n dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org","DKIM-Filter":"OpenDKIM Filter v2.11.0 sourceware.org E1BD63858427","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org;\n\ts=default; t=1665865575;\n\tbh=bcunHjM+wE5qKbVLry4L3noWgBWTjqY1jqLkIfOd0fE=;\n\th=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post:\n\t List-Help:List-Subscribe:From:Reply-To:From;\n\tb=gzu8EKGiAdNaos5b4tzyvXM4wePrCIMcSYYgTGE0jrOSje57vjHKjm8brs2klPYph\n\t DuqKRO9RX57jwFlpA1Xh8ETFAmb8Kw2qk5JPEWELXb427k1e/ZHXEEUXyI8XDwQsEo\n\t joILHLjAiuuADWYLM8Etrm19nXhpJixi0WulR95Q=","X-Original-To":"gcc-patches@gcc.gnu.org","DMARC-Filter":"OpenDMARC Filter v1.4.1 sourceware.org 6A5FF3858CDA","X-MC-Unique":"XHW8AbVgNsqSrY8DGZTsCg-1","To":"libstdc++@gcc.gnu.org,\n\tgcc-patches@gcc.gnu.org","Subject":"[committed] libstdc++: Implement constexpr std::to_chars for C++23\n (P2291R3)","Date":"Sat, 15 Oct 2022 21:25:18 +0100","Message-Id":"<20221015202518.2687700-1-jwakely@redhat.com>","MIME-Version":"1.0","X-Scanned-By":"MIMEDefang 3.1 on 10.11.54.10","X-Mimecast-Spam-Score":"0","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain","Content-Transfer-Encoding":"8bit","X-Spam-Status":"No, score=-12.0 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH,\n DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0,\n RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE,\n TXREP autolearn=ham autolearn_force=no version=3.4.6","X-Spam-Checker-Version":"SpamAssassin 3.4.6 (2021-04-09) on\n server2.sourceware.org","X-BeenThere":"gcc-patches@gcc.gnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"Gcc-patches mailing list ","List-Unsubscribe":",\n ","List-Archive":"","List-Post":"","List-Help":"","List-Subscribe":",\n ","From":"Jonathan Wakely via Gcc-patches ","Reply-To":"Jonathan Wakely ","Errors-To":"gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org","Sender":"\"Gcc-patches\" ","X-getmail-retrieved-from-mailbox":"=?utf-8?q?INBOX?=","X-GMAIL-THRID":"=?utf-8?q?1746786662699487061?=","X-GMAIL-MSGID":"=?utf-8?q?1746786662699487061?="},"content":"This has been approved for C++23.\n\nI've just realised that the commit msg doesn't match the actual patch. I\nhad a consteval lambda in an earlier version, but I changed it to do:\n\n+#if __cpp_lib_constexpr_charconv\n+ if (std::__is_constant_evaluated())\n+ return __table<_DecOnly>.__data[__c];\n+#endif\n\nSo the code is unchanged for non-constexpr, and uses a global variable\ntemplate for constexpr evaluations. If P2647R0 gets accepted and applies\nto C++23 mode then we can remove this and the static constexpr variable\nwill work for both cases.\n\nTested powerpc64le-linux. Pushed to trunk.\n\n-- >8 --\n\nSome of the helper functions use static constexpr local variables, which\nis not permitted in a core constant expression. Removing the 'static'\nseems to have negligible performance effect for __to_chars and\n__to_chars_16. For __from_chars_alnum_to_val removing the 'static'\ncauses a significant performance impact for base 36 conversions. Use a\nconsteval lambda instead.\n\nlibstdc++-v3/ChangeLog:\n\n\t* include/bits/charconv.h (__to_chars_10_impl): Add constexpr\n\tfor C++23. Remove 'static' from array.\n\t* include/std/charconv (__cpp_lib_constexpr_charconv): Define.\n\t(__to_chars, __to_chars_16): Remove 'static' from array, add\n\tconstexpr.\n\t(__to_chars_10, __to_chars_8, __to_chars_2, __to_chars_i)\n\t(to_chars, __raise_and_add, __from_chars_pow2_base)\n\t(__from_chars_alnum, from_chars): Add constexpr.\n\t(__from_chars_alnum_to_val): Avoid local static during constant\n\tevaluation. Add constexpr.\n\t* include/std/version (__cpp_lib_constexpr_charconv): Define.\n\t* testsuite/20_util/from_chars/constexpr.cc: New test.\n\t* testsuite/20_util/to_chars/constexpr.cc: New test.\n\t* testsuite/20_util/to_chars/version.cc: New test.\n---\n libstdc++-v3/include/bits/charconv.h | 4 +-\n libstdc++-v3/include/std/charconv | 41 +++--\n libstdc++-v3/include/std/version | 1 +\n .../testsuite/20_util/from_chars/constexpr.cc | 57 ++++++\n .../testsuite/20_util/to_chars/constexpr.cc | 172 ++++++++++++++++++\n .../testsuite/20_util/to_chars/version.cc | 16 ++\n 6 files changed, 275 insertions(+), 16 deletions(-)\n create mode 100644 libstdc++-v3/testsuite/20_util/from_chars/constexpr.cc\n create mode 100644 libstdc++-v3/testsuite/20_util/to_chars/constexpr.cc\n create mode 100644 libstdc++-v3/testsuite/20_util/to_chars/version.cc","diff":"diff --git a/libstdc++-v3/include/bits/charconv.h b/libstdc++-v3/include/bits/charconv.h\nindex 4cae10a72f7..d04aab77624 100644\n--- a/libstdc++-v3/include/bits/charconv.h\n+++ b/libstdc++-v3/include/bits/charconv.h\n@@ -68,13 +68,13 @@ namespace __detail\n // The caller is required to provide a buffer of exactly the right size\n // (which can be determined by the __to_chars_len function).\n template\n- void\n+ _GLIBCXX23_CONSTEXPR void\n __to_chars_10_impl(char* __first, unsigned __len, _Tp __val) noexcept\n {\n static_assert(is_integral<_Tp>::value, \"implementation bug\");\n static_assert(is_unsigned<_Tp>::value, \"implementation bug\");\n \n- static constexpr char __digits[201] =\n+ constexpr char __digits[201] =\n \t\"0001020304050607080910111213141516171819\"\n \t\"2021222324252627282930313233343536373839\"\n \t\"4041424344454647484950515253545556575859\"\ndiff --git a/libstdc++-v3/include/std/charconv b/libstdc++-v3/include/std/charconv\nindex 64d0584a55d..4b6cc83a567 100644\n--- a/libstdc++-v3/include/std/charconv\n+++ b/libstdc++-v3/include/std/charconv\n@@ -50,6 +50,10 @@\n # define __cpp_lib_to_chars 201611L\n #endif\n \n+#if __cplusplus > 202002L\n+# define __cpp_lib_constexpr_charconv 202202L\n+#endif\n+\n namespace std _GLIBCXX_VISIBILITY(default)\n {\n _GLIBCXX_BEGIN_NAMESPACE_VERSION\n@@ -119,7 +123,7 @@ namespace __detail\n \n // Generic implementation for arbitrary bases.\n template\n- to_chars_result\n+ constexpr to_chars_result\n __to_chars(char* __first, char* __last, _Tp __val, int __base) noexcept\n {\n static_assert(is_integral<_Tp>::value, \"implementation bug\");\n@@ -138,7 +142,7 @@ namespace __detail\n \n unsigned __pos = __len - 1;\n \n- static constexpr char __digits[] = {\n+ constexpr char __digits[] = {\n \t'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n \t'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',\n \t'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',\n@@ -160,7 +164,7 @@ namespace __detail\n }\n \n template\n- __integer_to_chars_result_type<_Tp>\n+ constexpr __integer_to_chars_result_type<_Tp>\n __to_chars_16(char* __first, char* __last, _Tp __val) noexcept\n {\n static_assert(is_integral<_Tp>::value, \"implementation bug\");\n@@ -177,7 +181,7 @@ namespace __detail\n \t return __res;\n \t}\n \n- static constexpr char __digits[] = {\n+ constexpr char __digits[] = {\n \t'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n \t'a', 'b', 'c', 'd', 'e', 'f'\n };\n@@ -207,7 +211,7 @@ namespace __detail\n }\n \n template\n- inline __integer_to_chars_result_type<_Tp>\n+ constexpr __integer_to_chars_result_type<_Tp>\n __to_chars_10(char* __first, char* __last, _Tp __val) noexcept\n {\n static_assert(is_integral<_Tp>::value, \"implementation bug\");\n@@ -231,7 +235,7 @@ namespace __detail\n }\n \n template\n- __integer_to_chars_result_type<_Tp>\n+ constexpr __integer_to_chars_result_type<_Tp>\n __to_chars_8(char* __first, char* __last, _Tp __val) noexcept\n {\n static_assert(is_integral<_Tp>::value, \"implementation bug\");\n@@ -285,7 +289,7 @@ namespace __detail\n }\n \n template\n- __integer_to_chars_result_type<_Tp>\n+ constexpr __integer_to_chars_result_type<_Tp>\n __to_chars_2(char* __first, char* __last, _Tp __val) noexcept\n {\n static_assert(is_integral<_Tp>::value, \"implementation bug\");\n@@ -322,7 +326,7 @@ namespace __detail\n } // namespace __detail\n \n template\n- __detail::__integer_to_chars_result_type<_Tp>\n+ constexpr __detail::__integer_to_chars_result_type<_Tp>\n __to_chars_i(char* __first, char* __last, _Tp __value, int __base = 10)\n {\n __glibcxx_assert(2 <= __base && __base <= 36);\n@@ -361,7 +365,7 @@ namespace __detail\n }\n \n #define _GLIBCXX_TO_CHARS(T) \\\n- inline to_chars_result \\\n+ _GLIBCXX23_CONSTEXPR inline to_chars_result \\\n to_chars(char* __first, char* __last, T __value, int __base = 10) \\\n { return std::__to_chars_i(__first, __last, __value, __base); }\n _GLIBCXX_TO_CHARS(char)\n@@ -400,7 +404,7 @@ _GLIBCXX_TO_CHARS(unsigned __GLIBCXX_TYPE_INT_N_3)\n namespace __detail\n {\n template\n- bool\n+ constexpr bool\n __raise_and_add(_Tp& __val, int __base, unsigned char __c)\n {\n if (__builtin_mul_overflow(__val, __base, &__val)\n@@ -429,18 +433,27 @@ namespace __detail\n return __table;\n }\n \n+#if __cpp_lib_constexpr_charconv\n+ template\n+ inline constexpr auto __table = __from_chars_alnum_to_val_table();\n+#endif\n+\n // If _DecOnly is true: if the character is a decimal digit, then\n // return its corresponding base-10 value, otherwise return a value >= 127.\n // If _DecOnly is false: if the character is an alphanumeric digit, then\n // return its corresponding base-36 value, otherwise return a value >= 127.\n template\n- unsigned char\n+ _GLIBCXX23_CONSTEXPR unsigned char\n __from_chars_alnum_to_val(unsigned char __c)\n {\n if _GLIBCXX17_CONSTEXPR (_DecOnly)\n \treturn static_cast(__c - '0');\n else\n \t{\n+#if __cpp_lib_constexpr_charconv\n+\t if (std::__is_constant_evaluated())\n+\t return __table<_DecOnly>.__data[__c];\n+#endif\n \t // This initializer is deliberately made dependent in order to work\n \t // around modules bug PR105322.\n \t static constexpr auto __table = (_DecOnly, __from_chars_alnum_to_val_table());\n@@ -451,7 +464,7 @@ namespace __detail\n /// std::from_chars implementation for integers in a power-of-two base.\n /// If _DecOnly is true, then we may assume __base is at most 8.\n template\n- bool\n+ _GLIBCXX23_CONSTEXPR bool\n __from_chars_pow2_base(const char*& __first, const char* __last, _Tp& __val,\n \t\t\t int __base)\n {\n@@ -508,7 +521,7 @@ namespace __detail\n /// std::from_chars implementation for integers in any base.\n /// If _DecOnly is true, then we may assume __base is at most 10.\n template\n- bool\n+ constexpr bool\n __from_chars_alnum(const char*& __first, const char* __last, _Tp& __val,\n \t\t int __base)\n {\n@@ -548,7 +561,7 @@ namespace __detail\n \n /// std::from_chars for integral types.\n template\n- __detail::__integer_from_chars_result_type<_Tp>\n+ _GLIBCXX23_CONSTEXPR __detail::__integer_from_chars_result_type<_Tp>\n from_chars(const char* __first, const char* __last, _Tp& __value,\n \t int __base = 10)\n {\ndiff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version\nindex 397a4aa7b0a..bec9e7aa792 100644\n--- a/libstdc++-v3/include/std/version\n+++ b/libstdc++-v3/include/std/version\n@@ -302,6 +302,7 @@\n #if __cplusplus > 202002L\n // c++23\n #define __cpp_lib_byteswap 202110L\n+#define __cpp_lib_constexpr_charconv 202202L\n #define __cpp_lib_constexpr_typeinfo 202106L\n #if __cpp_concepts >= 202002L\n # define __cpp_lib_expected 202202L\ndiff --git a/libstdc++-v3/testsuite/20_util/from_chars/constexpr.cc b/libstdc++-v3/testsuite/20_util/from_chars/constexpr.cc\nnew file mode 100644\nindex 00000000000..6e146947c1f\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/20_util/from_chars/constexpr.cc\n@@ -0,0 +1,57 @@\n+// { dg-options \"-std=gnu++23\" }\n+// { dg-do compile { target c++23 } }\n+\n+#include \n+#include \n+\n+constexpr bool\n+test()\n+{\n+ const char str[] = \"-01234afz###\";\n+ const char* end = str + sizeof(str);\n+\n+ std::from_chars_result res;\n+ int ival = 99;\n+ unsigned uval = 99;\n+\n+ res = std::from_chars(str, str+1, ival, 10);\n+ VERIFY( res.ptr == str );\n+ VERIFY( res.ec == std::errc::invalid_argument );\n+ VERIFY( ival == 99 );\n+ res = std::from_chars(str, str+4, ival, 10);\n+ VERIFY( res.ptr == str+4 );\n+ VERIFY( res.ec == std::errc{} );\n+ VERIFY( ival == -12 );\n+ res = std::from_chars(str, end, ival, 10);\n+ VERIFY( res.ptr == str+6 );\n+ VERIFY( res.ec == std::errc{} );\n+ VERIFY( ival == -1234 );\n+\n+ res = std::from_chars(str, end, uval, 10);\n+ VERIFY( res.ptr == str );\n+ VERIFY( res.ec == std::errc::invalid_argument );\n+ VERIFY( uval == 99 );\n+ res = std::from_chars(str+1, end, uval, 10);\n+ VERIFY( res.ptr == str+6 );\n+ VERIFY( res.ec == std::errc{} );\n+ VERIFY( uval == 1234 );\n+\n+ res = std::from_chars(str, end, ival, 3);\n+ VERIFY( res.ptr == str+4 );\n+ VERIFY( res.ec == std::errc{} );\n+ VERIFY( ival == -5 );\n+\n+ res = std::from_chars(str, end, ival, 16);\n+ VERIFY( res.ptr == str+8 );\n+ VERIFY( res.ec == std::errc{} );\n+ VERIFY( ival == -1193135 );\n+\n+ res = std::from_chars(str+1, end, uval, 36);\n+ VERIFY( res.ptr == str+1+8 );\n+ VERIFY( res.ec == std::errc{} );\n+ VERIFY( uval == 2302953695 );\n+\n+ return true;\n+}\n+\n+static_assert( test() );\ndiff --git a/libstdc++-v3/testsuite/20_util/to_chars/constexpr.cc b/libstdc++-v3/testsuite/20_util/to_chars/constexpr.cc\nnew file mode 100644\nindex 00000000000..30c591659ee\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/20_util/to_chars/constexpr.cc\n@@ -0,0 +1,172 @@\n+// { dg-options \"-std=gnu++23\" }\n+// { dg-do compile { target c++23 } }\n+\n+#include \n+\n+#ifndef __cpp_lib_constexpr_charconv\n+# error \"Feature-test macro for constexpr charconv missing in \"\n+#elif __cpp_lib_constexpr_charconv != 202202L\n+# error \"Feature-test macro for constexpr charconv has wrong value in \"\n+#endif\n+\n+#include \n+\n+constexpr bool\n+test_base10()\n+{\n+ std::to_chars_result res;\n+ char buf[10] = \"XXXXXXXXX\";\n+ res = std::to_chars(buf, buf+3, 1234);\n+ VERIFY( res.ptr == buf+3 );\n+ VERIFY( res.ec == std::errc::value_too_large );\n+ res = std::to_chars(buf, buf+4, -1234);\n+ VERIFY( res.ptr == buf+4 );\n+ VERIFY( res.ec == std::errc::value_too_large );\n+ res = std::to_chars(buf, buf+4, 1234);\n+ VERIFY( res.ptr == buf+4 );\n+ VERIFY( res.ec == std::errc{} );\n+ VERIFY( buf[0] == '1' );\n+ VERIFY( buf[1] == '2' );\n+ VERIFY( buf[2] == '3' );\n+ VERIFY( buf[3] == '4' );\n+ VERIFY( buf[4] == 'X' );\n+ res = std::to_chars(buf, buf+10, -567, 10);\n+ VERIFY( res.ptr == buf+4 );\n+ VERIFY( res.ec == std::errc{} );\n+ VERIFY( buf[0] == '-' );\n+ VERIFY( buf[1] == '5' );\n+ VERIFY( buf[2] == '6' );\n+ VERIFY( buf[3] == '7' );\n+ VERIFY( buf[4] == 'X' );\n+ return true;\n+}\n+\n+static_assert( test_base10() );\n+\n+constexpr bool\n+test_base16()\n+{\n+ std::to_chars_result res;\n+ char buf[10] = \"XXXXXXXXX\";\n+ res = std::to_chars(buf, buf+3, 0x1234, 16);\n+ VERIFY( res.ptr == buf+3 );\n+ VERIFY( res.ec == std::errc::value_too_large );\n+ res = std::to_chars(buf, buf+4, -0x1234, 16);\n+ VERIFY( res.ptr == buf+4 );\n+ VERIFY( res.ec == std::errc::value_too_large );\n+ res = std::to_chars(buf, buf+4, 0x1234, 16);\n+ VERIFY( res.ptr == buf+4 );\n+ VERIFY( res.ec == std::errc{} );\n+ VERIFY( buf[0] == '1' );\n+ VERIFY( buf[1] == '2' );\n+ VERIFY( buf[2] == '3' );\n+ VERIFY( buf[3] == '4' );\n+ VERIFY( buf[4] == 'X' );\n+ res = std::to_chars(buf, buf+10, -0x567, 16);\n+ VERIFY( res.ptr == buf+4 );\n+ VERIFY( res.ec == std::errc{} );\n+ VERIFY( buf[0] == '-' );\n+ VERIFY( buf[1] == '5' );\n+ VERIFY( buf[2] == '6' );\n+ VERIFY( buf[3] == '7' );\n+ VERIFY( buf[5] == 'X' );\n+ return true;\n+}\n+\n+static_assert( test_base16() );\n+\n+constexpr bool\n+test_base8()\n+{\n+ std::to_chars_result res;\n+ char buf[10] = \"XXXXXXXXX\";\n+ res = std::to_chars(buf, buf+2, 01234, 8);\n+ VERIFY( res.ptr == buf+2 );\n+ VERIFY( res.ec == std::errc::value_too_large );\n+ res = std::to_chars(buf, buf+3, -01234, 8);\n+ VERIFY( res.ptr == buf+3 );\n+ VERIFY( res.ec == std::errc::value_too_large );\n+ res = std::to_chars(buf, buf+4, 01234, 8);\n+ VERIFY( res.ptr == buf+4 );\n+ VERIFY( res.ec == std::errc{} );\n+ VERIFY( buf[0] == '1' );\n+ VERIFY( buf[1] == '2' );\n+ VERIFY( buf[2] == '3' );\n+ VERIFY( buf[3] == '4' );\n+ VERIFY( buf[4] == 'X' );\n+ res = std::to_chars(buf, buf+10, -0567, 8);\n+ VERIFY( res.ptr == buf+4 );\n+ VERIFY( res.ec == std::errc{} );\n+ VERIFY( buf[0] == '-' );\n+ VERIFY( buf[1] == '5' );\n+ VERIFY( buf[2] == '6' );\n+ VERIFY( buf[3] == '7' );\n+ VERIFY( buf[4] == 'X' );\n+ return true;\n+}\n+\n+static_assert( test_base8() );\n+\n+constexpr bool\n+test_base2()\n+{\n+ std::to_chars_result res;\n+ char buf[10] = \"XXXXXXXXX\";\n+ res = std::to_chars(buf, buf+4, 0b10001, 2);\n+ VERIFY( res.ptr == buf+4 );\n+ VERIFY( res.ec == std::errc::value_too_large );\n+ res = std::to_chars(buf, buf+5, -0b10001, 2);\n+ VERIFY( res.ptr == buf+5 );\n+ VERIFY( res.ec == std::errc::value_too_large );\n+ res = std::to_chars(buf, buf+5, 0b10001, 2);\n+ VERIFY( res.ptr == buf+5 );\n+ VERIFY( res.ec == std::errc{} );\n+ VERIFY( buf[0] == '1' );\n+ VERIFY( buf[1] == '0' );\n+ VERIFY( buf[2] == '0' );\n+ VERIFY( buf[3] == '0' );\n+ VERIFY( buf[4] == '1' );\n+ VERIFY( buf[5] == 'X' );\n+ res = std::to_chars(buf, buf+10, -0b11011, 2);\n+ VERIFY( res.ptr == buf+6 );\n+ VERIFY( res.ec == std::errc{} );\n+ VERIFY( buf[0] == '-' );\n+ VERIFY( buf[1] == '1' );\n+ VERIFY( buf[2] == '1' );\n+ VERIFY( buf[3] == '0' );\n+ VERIFY( buf[4] == '1' );\n+ VERIFY( buf[5] == '1' );\n+ VERIFY( buf[6] == 'X' );\n+ return true;\n+}\n+\n+static_assert( test_base2() );\n+\n+constexpr bool\n+test_base36()\n+{\n+ std::to_c 100 26413 100 26261 100 152 693k 4108 --:--:-- --:--:-- --:--:-- 716k hars_result res;\n+ char buf[10] = \"XXXXXXXXX\";\n+ res = std::to_chars(buf, buf+1, 1234, 36);\n+ VERIFY( res.ptr == buf+1 );\n+ VERIFY( res.ec == std::errc::value_too_large );\n+ res = std::to_chars(buf, buf+2, -1234, 36);\n+ VERIFY( res.ptr == buf+2 );\n+ VERIFY( res.ec == std::errc::value_too_large );\n+ res = std::to_chars(buf, buf+3, 1234, 36);\n+ VERIFY( res.ptr == buf+2 );\n+ VERIFY( res.ec == std::errc{} );\n+ VERIFY( buf[0] == 'y' );\n+ VERIFY( buf[1] == 'a' );\n+ VERIFY( buf[3] == 'X' );\n+ res = std::to_chars(buf, buf+10, -567, 36);\n+ VERIFY( res.ptr == buf+3 );\n+ VERIFY( res.ec == std::errc{} );\n+ VERIFY( buf[0] == '-' );\n+ VERIFY( buf[1] == 'f' );\n+ VERIFY( buf[2] == 'r' );\n+ VERIFY( buf[4] == 'X' );\n+ return true;\n+}\n+\n+static_assert( test_base36() );\ndiff --git a/libstdc++-v3/testsuite/20_util/to_chars/version.cc b/libstdc++-v3/testsuite/20_util/to_chars/version.cc\nnew file mode 100644\nindex 00000000000..af06e1bf054\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/20_util/to_chars/version.cc\n@@ -0,0 +1,16 @@\n+// { dg-options \"-std=gnu++23\" }\n+// { dg-do preprocess { target c++23 } }\n+\n+#include \n+\n+#ifndef __cpp_lib_to_chars\n+# error \"Feature-test macro for to_chars missing in \"\n+#elif __cpp_lib_to_chars != 201611L\n+# error \"Feature-test macro for to_chars has wrong value in \"\n+#endif\n+\n+#ifndef __cpp_lib_constexpr_charconv\n+# error \"Feature-test macro for constexpr charconv missing in \"\n+#elif __cpp_lib_constexpr_charconv != 202202L\n+# error \"Feature-test macro for constexpr charconv has wrong value in \"\n+#endif\n","prefixes":["committed"]}+ exit 1 Build step 'Execute shell' marked build as failure Finished: FAILURE