rust
rust copied to clipboard
Fix println! ICE when parsing percent prefix number
This PR fixes #125002 ICE occurring, for example, with println!("%100000", 1) or println!("% 100000", 1).
Test Case/Change Explanation
The return type of Num::from_str has been changed to Option<Self> to handle errors when parsing large integers fails.
- The first
println!in the test case covers the change of the firstNum::from_strusage informat_foreign.rs:426. - The second
println!in the test case covers the change of the secondNum::from_strusage in line 460. - The 3rd to 5th
Num::from_strusages behave the same as before.
The 3rd usage would cause an ICE when num > u16::MAX in the previous version, but this commit does not include a fix for the ICE in println!("{:100000$}"). I think we need to emit an error in the compiler and have more discussion in another issue/PR.
r? @lcnr
rustbot has assigned @lcnr. They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.
Use r? to explicitly pick a reviewer
The job mingw-check-tidy failed! Check out the build log: (web) (plain)
Click to see the possible cause of the failure (guessed by this bot)
Getting action download info
Download action repository 'msys2/[email protected]' (SHA:cc11e9188b693c2b100158c3322424c4cc1dadea)
Download action repository 'actions/checkout@v4' (SHA:0ad4b8fadaa221de15dcec353f45205ec38ea70b)
Download action repository 'actions/upload-artifact@v4' (SHA:65462800fd760344b1a7b4382951275a0abb4808)
Complete job name: PR - mingw-check-tidy
git config --global core.autocrlf false
shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
---
COPY scripts/sccache.sh /scripts/
RUN sh /scripts/sccache.sh
COPY host-x86_64/mingw-check/reuse-requirements.txt /tmp/
RUN pip3 install --no-deps --no-cache-dir --require-hashes -r /tmp/reuse-requirements.txt \
&& pip3 install virtualenv
COPY host-x86_64/mingw-check/validate-toolstate.sh /scripts/
COPY host-x86_64/mingw-check/validate-error-codes.sh /scripts/
# NOTE: intentionally uses python2 for x.py so we can test it still works.
# NOTE: intentionally uses python2 for x.py so we can test it still works.
# validate-toolstate only runs in our CI, so it's ok for it to only support python3.
ENV SCRIPT TIDY_PRINT_DIFF=1 python2.7 ../x.py test \
--stage 0 src/tools/tidy tidyselftest --extra-checks=py:lint
# This file is autogenerated by pip-compile with Python 3.10
# by the following command:
#
# pip-compile --allow-unsafe --generate-hashes reuse-requirements.in
---
#12 [5/8] COPY host-x86_64/mingw-check/reuse-requirements.txt /tmp/
#12 DONE 0.0s
#13 [6/8] RUN pip3 install --no-deps --no-cache-dir --require-hashes -r /tmp/reuse-requirements.txt && pip3 install virtualenv
#13 0.434 Downloading binaryornot-0.4.4-py2.py3-none-any.whl (9.0 kB)
#13 0.452 Collecting boolean-py==4.0
#13 0.459 Downloading boolean.py-4.0-py3-none-any.whl (25 kB)
#13 0.476 Collecting chardet==5.1.0
---
#13 3.692 Building wheels for collected packages: reuse
#13 3.693 Building wheel for reuse (pyproject.toml): started
#13 4.026 Building wheel for reuse (pyproject.toml): finished with status 'done'
#13 4.027 Created wheel for reuse: filename=reuse-1.1.0-cp310-cp310-manylinux_2_35_x86_64.whl size=181117 sha256=f5f58750481f69515c2c0d1d503daf565e2565c370d07fc6aeb95fe3498b4269
#13 4.027 Stored in directory: /tmp/pip-ephem-wheel-cache-e4h_v58t/wheels/c2/3c/b9/1120c2ab4bd82694f7e6f0537dc5b9a085c13e2c69a8d0c76d
#13 4.030 Installing collected packages: boolean-py, binaryornot, setuptools, reuse, python-debian, markupsafe, license-expression, jinja2, chardet
#13 4.053 Attempting uninstall: setuptools
#13 4.053 Found existing installation: setuptools 59.6.0
#13 4.055 Not uninstalling setuptools at /usr/lib/python3/dist-packages, outside environment /usr
#13 4.055 Not uninstalling setuptools at /usr/lib/python3/dist-packages, outside environment /usr
#13 4.055 Can't uninstall 'setuptools'. No files were found to uninstall.
#13 4.754 Successfully installed binaryornot-0.4.4 boolean-py-4.0 chardet-5.1.0 jinja2-3.1.2 license-expression-30.0.0 markupsafe-2.1.1 python-debian-0.1.49 reuse-1.1.0 setuptools-66.0.0
#13 4.755 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
#13 5.277 Collecting virtualenv
#13 5.327 Downloading virtualenv-20.26.1-py3-none-any.whl (3.9 MB)
#13 5.507 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.9/3.9 MB 22.1 MB/s eta 0:00:00
#13 5.547 Collecting distlib<1,>=0.3.7
#13 5.554 Downloading distlib-0.3.8-py2.py3-none-any.whl (468 kB)
#13 5.601 Collecting filelock<4,>=3.12.2
#13 5.608 Downloading filelock-3.14.0-py3-none-any.whl (12 kB)
#13 5.608 Downloading filelock-3.14.0-py3-none-any.whl (12 kB)
#13 5.641 Collecting platformdirs<5,>=3.9.1
#13 5.648 Downloading platformdirs-4.2.1-py3-none-any.whl (17 kB)
#13 5.735 Installing collected packages: distlib, platformdirs, filelock, virtualenv
#13 5.900 Successfully installed distlib-0.3.8 filelock-3.14.0 platformdirs-4.2.1 virtualenv-20.26.1
#13 DONE 6.0s
#14 [7/8] COPY host-x86_64/mingw-check/validate-toolstate.sh /scripts/
#14 DONE 0.0s
---
DirectMap4k: 196544 kB
DirectMap2M: 7143424 kB
DirectMap1G: 11534336 kB
##[endgroup]
Executing TIDY_PRINT_DIFF=1 python2.7 ../x.py test --stage 0 src/tools/tidy tidyselftest --extra-checks=py:lint
+ TIDY_PRINT_DIFF=1 python2.7 ../x.py test --stage 0 src/tools/tidy tidyselftest --extra-checks=py:lint
Finished `dev` profile [unoptimized] target(s) in 0.03s
##[endgroup]
downloading https://ci-artifacts.rust-lang.org/rustc-builds-alt/be7549f82c194c7a5dc8f34ed0541bfebbaf33ea/rust-dev-nightly-x86_64-unknown-linux-gnu.tar.xz
extracting /checkout/obj/build/cache/llvm-be7549f82c194c7a5dc8f34ed0541bfebbaf33ea-true/rust-dev-nightly-x86_64-unknown-linux-gnu.tar.xz to /checkout/obj/build/x86_64-unknown-linux-gnu/ci-llvm
---
Finished `release` profile [optimized] target(s) in 26.55s
##[endgroup]
fmt check
tidy check
tidy error: file `tests/ui/macros/issue-125002.rs` must begin with a descriptive name, consider `{reason}-issue-125002.rs`
tidy error: /checkout/tests/ui/macros/issue-125002.rs: missing trailing newline
removing old virtual environment
removing old virtual environment
creating virtual environment at '/checkout/obj/build/venv' using 'python3.10'
Requirement already satisfied: pip in ./build/venv/lib/python3.10/site-packages (24.0)
Collecting black==23.3.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 7))
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 22.0 MB/s eta 0:00:00
Collecting click==8.1.3 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 34))
Downloading click-8.1.3-py3-none-any.whl (96 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.6/96.6 kB 31.9 MB/s eta 0:00:00
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.6/96.6 kB 31.9 MB/s eta 0:00:00
Collecting importlib-metadata==6.7.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 38))
Downloading importlib_metadata-6.7.0-py3-none-any.whl (22 kB)
Collecting mypy-extensions==1.0.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 42))
Downloading mypy_extensions-1.0.0-py3-none-any.whl (4.7 kB)
Collecting packaging==23.1 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 46))
Downloading packaging-23.1-py3-none-any.whl (48 kB)
Collecting pathspec==0.11.1 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 50))
Downloading pathspec-0.11.1-py3-none-any.whl (29 kB)
Collecting platformdirs==3.6.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 54))
Downloading platformdirs-3.6.0-py3-none-any.whl (16 kB)
Downloading platformdirs-3.6.0-py3-none-any.whl (16 kB)
Collecting ruff==0.0.272 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 58))
Downloading ruff-0.0.272-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB)
Collecting tomli==2.0.1 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 77))
Downloading tomli-2.0.1-py3-none-any.whl (12 kB)
Collecting typed-ast==1.5.4 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 81))
Downloading typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (877 kB)
Downloading typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (877 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 877.7/877.7 kB 79.3 MB/s eta 0:00:00
Collecting typing-extensions==4.6.3 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 107))
Downloading typing_extensions-4.6.3-py3-none-any.whl (31 kB)
Collecting zipp==3.15.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 114))
Downloading zipp-3.15.0-py3-none-any.whl (6.8 kB)
Installing collected packages: zipp, typing-extensions, typed-ast, tomli, ruff, platformdirs, pathspec, packaging, mypy-extensions, click, importlib-metadata, black
Successfully installed black-23.3.0 click-8.1.3 importlib-metadata-6.7.0 mypy-extensions-1.0.0 packaging-23.1 pathspec-0.11.1 platformdirs-3.6.0 ruff-0.0.272 tomli-2.0.1 typed-ast-1.5.4 typing-extensions-4.6.3 zipp-3.15.0
some tidy checks failed
Build completed unsuccessfully in 0:00:58
local time: Sat May 11 09:24:55 UTC 2024
network time: Sat, 11 May 2024 09:24:56 GMT
r? estebank though feel free to reassign if you're also not familiar with this code
@rustbot ready
The job x86_64-gnu-llvm-17 failed! Check out the build log: (web) (plain)
Click to see the possible cause of the failure (guessed by this bot)
#16 exporting to docker image format
#16 sending tarball 30.5s done
#16 DONE 37.0s
##[endgroup]
Setting extra environment values for docker: --env ENABLE_GCC_CODEGEN=1 --env GCC_EXEC_PREFIX=/usr/lib/gcc/
[CI_JOB_NAME=x86_64-gnu-llvm-17]
---
sccache: Starting the server...
##[group]Configure the build
configure: processing command line
configure:
configure: build.configure-args := ['--build=x86_64-unknown-linux-gnu', '--llvm-root=/usr/lib/llvm-17', '--enable-llvm-link-shared', '--set', 'rust.thin-lto-import-instr-limit=10', '--set', 'change-id=99999999', '--enable-verbose-configure', '--enable-sccache', '--disable-manage-submodules', '--enable-locked-deps', '--enable-cargo-native-static', '--set', 'rust.codegen-units-std=1', '--set', 'dist.compression-profile=balanced', '--dist-compression-formats=xz', '--disable-dist-src', '--release-channel=nightly', '--enable-debug-assertions', '--enable-overflow-checks', '--enable-llvm-assertions', '--set', 'rust.verify-llvm-ir', '--set', 'rust.codegen-backends=llvm,cranelift,gcc', '--set', 'llvm.static-libstdcpp', '--enable-new-symbol-mangling']
configure: target.x86_64-unknown-linux-gnu.llvm-config := /usr/lib/llvm-17/bin/llvm-config
configure: llvm.link-shared := True
configure: rust.thin-lto-import-instr-limit := 10
configure: change-id := 99999999
---
Compiling rustc_builtin_macros v0.0.0 (/checkout/compiler/rustc_builtin_macros)
error[E0308]: mismatched types
--> compiler/rustc_builtin_macros/src/format_foreign.rs:424:37
|
402 | let mut width: Option<Num> = None;
...
...
424 | width = at.slice_between(end).map(|num| Num::from_str(num, None));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Option<Num>`, found `Option<Option<Num>>`
|
= note: expected enum `Option<printf::Num>`
found enum `Option<Option<printf::Num>>`
help: use the `?` operator to extract the `Option<Option<printf::Num>>` value, propagating an `Option::None` value to the caller
|
424 | width = at.slice_between(end).map(|num| Num::from_str(num, None))?;
error[E0308]: mismatched types
--> compiler/rustc_builtin_macros/src/format_foreign.rs:458:29
|
|
402 | let mut width: Option<Num> = None;
...
...
458 | width = at.slice_between(end).map(|num| Num::from_str(num, None));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Option<Num>`, found `Option<Option<Num>>`
|
= note: expected enum `Option<printf::Num>`
found enum `Option<Option<printf::Num>>`
help: use the `?` operator to extract the `Option<Option<printf::Num>>` value, propagating an `Option::None` value to the caller
|
458 | width = at.slice_between(end).map(|num| Num::from_str(num, None))?;
error[E0308]: mismatched types
--> compiler/rustc_builtin_macros/src/format_foreign.rs:522:33
|
|
403 | let mut precision: Option<Num> = None;
...
...
522 | precision = at.slice_between(end).map(|num| Num::from_str(num, None));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Option<Num>`, found `Option<Option<Num>>`
|
= note: expected enum `Option<printf::Num>`
found enum `Option<Option<printf::Num>>`
help: use the `?` operator to extract the `Option<Option<printf::Num>>` value, propagating an `Option::None` value to the caller
|
522 | precision = at.slice_between(end).map(|num| Num::from_str(num, None))?;
For more information about this error, try `rustc --explain E0308`.
error: could not compile `rustc_builtin_macros` (lib) due to 3 previous errors
warning: build failed, waiting for other jobs to finish...
Most of the time you have
Option<Option<T>>after amap, what you really wanted is anand_thenthat doesOption<K> -> Option<T>and collapses theNones.
Thanks! I forgot to use and_then to flatten Option<Option<T>>, the second review change is here https://github.com/pymongo/rust/commit/33d2c87c63152375aad48363585134d0a81bdb9b
@bors r+
:pushpin: Commit 582fd1fb539ddea199dbc238946b00465a20620e has been approved by estebank
It is now in the queue for this repository.
:hourglass: Testing commit 582fd1fb539ddea199dbc238946b00465a20620e with merge 1c90b9fe6eac122b4d3965913b3615f47751a4d3...
:sunny: Test successful - checks-actions Approved by: estebank Pushing 1c90b9fe6eac122b4d3965913b3615f47751a4d3 to master...
Finished benchmarking commit (1c90b9fe6eac122b4d3965913b3615f47751a4d3): comparison URL.
Overall result: no relevant changes - no action needed
@rustbot label: -perf-regression
Instruction count
This benchmark run did not return any relevant results for this metric.
Max RSS (memory usage)
Results (primary -0.6%)
This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
| mean | range | count | |
|---|---|---|---|
| Regressions ❌ (primary) |
1.2% | [1.2%, 1.2%] | 1 |
| Regressions ❌ (secondary) |
- | - | 0 |
| Improvements ✅ (primary) |
-2.5% | [-2.5%, -2.5%] | 1 |
| Improvements ✅ (secondary) |
- | - | 0 |
| All ❌✅ (primary) | -0.6% | [-2.5%, 1.2%] | 2 |
Cycles
Results (primary 1.5%)
This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
| mean | range | count | |
|---|---|---|---|
| Regressions ❌ (primary) |
1.5% | [1.5%, 1.5%] | 1 |
| Regressions ❌ (secondary) |
- | - | 0 |
| Improvements ✅ (primary) |
- | - | 0 |
| Improvements ✅ (secondary) |
- | - | 0 |
| All ❌✅ (primary) | 1.5% | [1.5%, 1.5%] | 1 |
Binary size
This benchmark run did not return any relevant results for this metric.
Bootstrap: 669.26s -> 667.741s (-0.23%) Artifact size: 316.04 MiB -> 316.07 MiB (0.01%)