Skip to content

Integer overflow panics in debug mode but is allowed by the verifier #45

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
utaal opened this issue Jan 26, 2022 · 6 comments
Closed

Integer overflow panics in debug mode but is allowed by the verifier #45

utaal opened this issue Jan 26, 2022 · 6 comments

Comments

@utaal
Copy link
Collaborator

utaal commented Jan 26, 2022

Integer overflow is defined to behave as follows by the currently adopted RFC 560 https://github.com/rust-lang/rfcs/blob/master/text/0560-integer-overflow.md

The operations +, -, *, can underflow and overflow. When checking is enabled this will panic. When checking is disabled this will two's complement wrap.

In modern rust, debug_assertions (which includes overflow checking) is enabled when compiling with the debug default configurations. In the release (optimized) default config, debug_assertions is disabled, and the overflowing operations will wrap.
Because of this, integer overflow is never undefined behavior[^1]. Note that this is different from the unchecked_* operations on integers, which are undefined behavior if they overflow, e.g. for u64::unchecked_add.

Verus currently admits overflowing operations which will panic when compiled with debug_assertions. This can be regarded as a soundness issue (verified code should not panic).


How to address this is still up for debate, but it may be worth noting that if we were to introduce verification conditions for integer operations that ensure there's no overflow, we could also replace the native operations with their unchecked_math counterparts, which (apparently) can use LLVM intrinsics that can be faster because they assume no overflow can occur.

/cc @Chris-Hawblitzel

@tjhance
Copy link
Collaborator

tjhance commented Jan 26, 2022

Given:

  • Rust idiomatically discourages overflow; and while it doesn't define overflow as UB, it also does not unambiguously define it to a single behavior
  • Defining overflow to use wraparound will make verification errors difficult to diagnose (because an assertion might fail due to wrap-around, without having an error specifically about overflow)

the points seem in favor that Verus should probably check for no overflow.

@parno
Copy link
Collaborator

parno commented Jan 26, 2022

I agree that developers will (and should) expect verified code not to panic. I also like the notion that we can use the verification of non-overflow to optimize the code. We should try to find more such cases as we develop Verus (e.g., Rust already does a good job of eliminating array bounds checks, but verification should require us to eliminate any need for them at all).

@jaybosamiya
Copy link
Contributor

jaybosamiya commented Jan 26, 2022

+1 to the above comments. Additionally, I would like to note that there already exists constructs in Rust for intentionally-wrapping and intentionally-checked behavior, and that + being checked-at-debug and wrapping-at-release is simply a performance+safety compromise on values that are intended-non-overflowing.

For intentionally-wrapping arithmetic with the exact same ergonomics as + in Rust, using the Wrapping wrapper type is quite convenient.

Relevant docs from there (emphasis mine):

Operations like + on u32 values are intended to never overflow, and in some debug configurations overflow is detected and results in a panic. While most arithmetic falls into this category, some code explicitly expects and relies upon modular arithmetic (e.g., hashing).

Wrapping arithmetic can be achieved either through methods like wrapping_add, or through the Wrapping<T> type, which says that all standard arithmetic operations on the underlying value are intended to have wrapping semantics.

@utaal
Copy link
Collaborator Author

utaal commented Feb 14, 2022

Currently, this passes:

fn test(a: u64) {
    let mut j = a;
    j = j + 2;
    assert(j == a + 2);
}

and this fails

fn test(a: u64) {
    let mut j = a;
    j = j + 2;
    j = j + 2;
    assert(j == a + 4);
}

because of how subexpression substitution works. We should be careful about that when we address this issue.

@utaal
Copy link
Collaborator Author

utaal commented Feb 14, 2022

My current idea for this is that by default we generate verification conditions to ensure arithmetic doesn't overflow (and so we could also potentially use unchecked arithmetic by rewriting math operations during e.g. erasue, and we never panic for overflow in debug mode).

In addition, we can have a flag that disables the overflow check VCs (that is, returns to the current behaviour): this would be intended to be used in conjunction with disabling debug_assertions, so that debug builds do not panic on overflow, but one still cannot rely on the wrapping behaviour for verification (arithmetic operations are still specified to yield an undetermined result when overflowing).

Finally, one should be able to use wrapping operations (or the Wrapping wrapper type), specified to wrap.

@scottmcm
Copy link

which (apparently) can use LLVM intrinsics that can be faster because they assume no overflow can occur.

I know this is an old PR, but to elaborate on this a bit: I don't know that any of the instructions are directly faster with the no-wrap flags (at least on normal chips -- if you have a 1s-complement machine things might be weirder).

The difference, from what I've seen, is entirely in the optimizations that are only legal because of the lack of overflow. As a trivial example, x * 2 / 2 is only x if that first overflow is known not to overflow. (And while that code might look weird on its own, it's exactly what happens in my_slice_of_u16().iter().len(), for example.)

Chris-Hawblitzel added a commit that referenced this issue Jan 30, 2025
182b7c2bb More precise gitignore patterns
fc5bf6b40 Release 0.2.29
4e85487ba Merge pull request #103 from dtolnay/macrosemi
1290d70ed Preserve semicolon on braced statement-position macros
78b9b4003 Merge pull request #102 from dtolnay/floatdot
281784a84 Revert "Avoid trailing '.' on non-macro float literals"
99d37c538 Release 0.2.28
2f398b377 Merge pull request #101 from dtolnay/skiprelease
e8c63d461 Skip `cargo test --release` on old rustc
f191a5ba0 Merge pull request #100 from dtolnay/closurebailout
490d479ee Disregard bailouts inside of closure bodies
ee1a762a5 Increase expression depth in test_precedence
c56aafcc3 Fix scan_right out of sync with syn
d6296ce3b Merge pull request #98 from dtolnay/permutations
78609985e Make permutations test compatible with Rust pre-1.65
0ee28e66b Add precedence permutations test
8ac4fd32e Merge pull request #97 from dtolnay/matcharm
0f7da1218 Print match arm with paren instead of brace if invalid as stmt
24712df07 Simplify match-arm spacing
9c2bb02eb Propagate fixup information inside closure body
465fa06c7 Merge pull request #96 from dtolnay/postbreak
4c613674b Support multi-char post_break
4d65c3ce7 Merge pull request #95 from dtolnay/parseablestmt
d6d84246e Fix some parseable_as_stmt edge cases
f2117b8a5 Merge pull request #94 from dtolnay/parseablestmt
9ff53194a Convert parseable_as_stmt to non-recursive
fda4495f4 Merge pull request #93 from dtolnay/matcharm
2b7442837 Deduplicate match-arm terminator logic
f3cba4ad7 Merge pull request #92 from dtolnay/rangerange
7e125a2b9 Separate consecutive ranges with a space
74772cb86 Merge pull request #91 from dtolnay/up
487078d22 Resolve unnecessary_lazy_evaluations clippy lints
65012eca6 Raise required compiler to Rust 1.62
ebefa9de8 Merge pull request #90 from dtolnay/synprecedence
1cfd65ab1 Synchronize precedence implementation from syn 2.0.96
277a63bb8 Ignore bool_to_int_with_if pedantic clippy lint
57258305f Update non_exhaustive_omitted_patterns false positive link
882f0ed68 Release 0.2.27
0ddbeab0e Merge pull request #89 from dtolnay/floatdot
988425d32 Avoid trailing '.' on non-macro float literals
5478bcf19 Release 0.2.26
1dd1aaec1 Merge pull request #88 from dtolnay/precedence
5b476dfa4 Wire up fixups for precedence
3dd7a2351 Fix imported syn code compilation
3ea1499d0 Copy precedence implementation from syn 2.0.95
b359ab075 Look into Group expressions for statement termination
6623df065 Properly space and indent const arguments in blocks
9d24e92a3 Simplify printing of Stmt::Local box ends
ba264e3b2 Automatically brace the body in closures with return type
d3b30dbdd Improve small block spacing around diverge expressions
8e5ae6779 Factor our expression small block printing
8c7a11cf2 Merge pull request #87 from dtolnay/exprinpath
bf0ca9544 Share logic for wrapping const expression in braces in path
a947562f5 Rename subexpr -> prefix_subexpr
02584e4f3 Prevent upload-artifact step from causing CI failure
50de5c67a Release 0.2.25
06791ead0 Merge pull request #85 from dtolnay/externsafe
db38f770c Print safe and explicitly unsafe foreign items
91ebe48d5 Merge pull request #84 from dtolnay/buildenv
265ab3b51 Use $CARGO_PKG_VERSION from buildscript exec-time instead of build-time
c6f081535 Release 0.2.24
4ca0f7623 Merge pull request #83 from dtolnay/precisecapture
3381c6447 Pretty print TypeParamBound::PreciseCapture
a1701f793 Release 0.2.23
b4919cf22 Merge pull request #82 from dtolnay/rawaddr
eb15c0c14 Pretty print Expr::RawAddr
75e1f4fb4 Ignore ref_option pedantic clippy lint
c28d8ea50 Release 0.2.22
dd76fd613 Merge pull request #80 from dtolnay/precisecapture
b54cd1266 Pretty-print precise capture syntax (`use<>`)
61bd508ab Upload CI Cargo.lock for reproducing failures
ea2044e13 Release 0.2.21
11c45ff3a Merge pull request #79 from dtolnay/tailcall
d2881c32e Pretty-print tail calls (`become`)
53aac3023 Merge pull request #78 from dtolnay/rustfmtbug
cff71f363 Revert "Work around rustfmt 'rewriting static' bug"
8584223d1 Resolve single_match_else pedantic clippy lint
93f207864 Merge pull request #76 from dtolnay/rustfmtbug
39a3f7501 Work around rustfmt 'rewriting static' bug
060a8adf6 Update rustfmt output to nightly-2024-06-24
8f7bb3afe Raise minimum supported compiler to 1.61
22da86d97 Update unstable rustc_parse code to nightly-2024-06-06
179974cc9 Release 0.2.20
132140492 Merge pull request #73 from dtolnay/checkcfg
c24065683 Resolve unexpected_cfgs warning
096eac9c6 Update rustc initialization to nightly-2024-04-17
e0d74e690 Release 0.2.19
8e800f6fd Merge pull request #72 from dtolnay/assign
a6aa3903d Fix line placement for field assignment with multiline value
659fde697 Release 0.2.18
fadd0dfa9 Merge pull request #71 from dtolnay/cstr
1ad491d82 Support C-string literal syntax
86ac6a949 Raise required compiler to rust 1.60
cf2ecc110 Fix typo in readme and crate-level documentation
45f047f2a Explicitly install a Rust toolchain for cargo-outdated job
0875d2df6 Release 0.2.17
7f0aef1c7 Merge pull request #70 from dtolnay/selfas
a89930441 Preserve braces in 'use path::to::{self as rename}'
d8b35956b Revert "Temporarily disable prettyplease-update-examples in CI"
c49b5fec0 Temporarily disable prettyplease-update-examples in CI
2b6085fb8 Update test suite to nightly-2024-03-06
d54ac4680 Merge pull request #66 from dtolnay/exhaustive
bcbb5fc44 Pick up changes to non_exhaustive_omitted_patterns lint
380c7b8c5 Release 0.2.16
7b9b35074 Pull in proc-macro2 sccache fix
987bea1eb Merge pull request #65 from dtolnay/testmatchguard
e5e951130 Add test of parenthesization of struct lit in match guard
ae86c8ce7 Merge pull request #64 from dtolnay/grouped
acdc42ebf Look into invisible delimiters to determine exterior struct lit
b2f30c7f3 Merge pull request #63 from dtolnay/structcond
157544394 Add test of automatic parenthesization of braced structs in cond
11ebfab3c Format with new rustfmt that handles let-else
91033e81b Give a variable name before passing boolean arg
93aa5b31b Resolve get_first clippy lint
1e8e67e83 Test docs.rs documentation build in CI
10b1e419c Release 0.2.15
550c3296a Merge pull request #60 from dtolnay/iflet
8ad4602ea Update cargo-expand products
d8f127fbe Improve indentation of if-let and while-let expressions
44f5a4a82 Update actions/checkout@v3 -> v4
823914d11 Release 0.2.14
df04af8b0 Merge pull request #59 from dtolnay/constverbatim
4b8b6ef80 Support generics on const item
c3b96858f Parse const item inside verbatim trait item
80b4ef3bb Release 0.2.13
4ec51afc3 Merge pull request #58 from dtolnay/unnamedfields
b5aabc5b0 Support unnamed struct/union type syntax
1bd9b57a0 Release 0.2.12
b97e38da5 Opt in to generate-link-to-definition when building on docs.rs
17dc0a9a7 Release 0.2.11
0142ff4f7 Merge pull request #56 from dtolnay/letelse
ba428ece9 Improve let-else formatting
7120cbe8d Select a single docs.rs build target
8e9d001a4 Release 0.2.10
73eae68e5 Update deps to a proc-macro2 that works on current nightly
f44639ce9 Add CI job using minimal-versions
6f7a9eebd Merge pull request #54 from dtolnay/verbatimattr
596ceaf8d Preserve attributes on verbatim Expr
4a2318ec7 Release 0.2.9
1593a0c0f Recognize ellipsis placeholder in all verbatim nodes
82d41ab2a Release 0.2.8
ad3755e8d Merge pull request #53 from dtolnay/closurebrace
4484fe0bf Prevent brace insertion from changing meaning of expression
046164941 Reduce visibility of requires_terminator
0aa895b7e Release 0.2.7
c32ce5c9a Merge pull request #51 from dtolnay/macros
9b42ba611 Format some standard library macros better
f69383aff Release 0.2.6
8c82f67c6 Merge pull request #49 from dtolnay/macrorulessemi
f4c9eac76 Fix semicolon on macro_rules written with parentheses
606490c15 Release 0.2.5
587525c3d Merge pull request #47 from dtolnay/builtin
12505bf21 Support builtin# expr syntax
ea7c3dde0 Fix new unused_mut detected by nightly-2023-04-30
f23278a76 Update fuzz crate gitignore to ignore coverage dir
9204b588b Release 0.2.4
858ee6041 Fix printing of path generics in trait part of qpath
b0e14e3b0 Release 0.2.3
6fd3bc1e0 Turn on verbatim feature when built by Rust playground
68f001b7d Merge pull request #45 from dtolnay/armexpr
083de82f7 Improve formatting of line-wrapped match arms
c08cb35f8 Release 0.2.2
801c67e9d Pull in all syn verbatim parsing fixes
330d8923b Fix linkage name for the build script
9925e2929 Support TraitItem::Verbatim containing visibility or defaultness
6d6618fbf Support ImplItem::Verbatim containing const without init
bf0d92f59 Rename flexible impl data structure to match the other verbatim types
47ff683fb Support ForeignItem::Verbatim containing static with init
d7c3d9a40 Support ForeignItem::Verbatim containing fn with body
78f42b4ae Support verbatim type in various items
abf4c2dfd Support empty variants on all verbatim items
7859fc1b9 Let each verbatim variant take care of the trailing linebreak
e80d246a7 Release 0.2.1
756ca8e3a Support ImplItem::Verbatim containing fn without body
af0ca9e1d Support Pat::Verbatim containing box pattern
bad0ffdf0 Support Pat::Verbatim containing const block pattern
c353ce4ab Support Item::Verbatim containing macros 2.0 definition
97d06b7e4 Support Item::Verbatim containing impl block
91f77eb7d Support Item::Verbatim containing const with no init expr
6d0c81226 Support Item::Verbatim containing static with no init expr
ca8a08193 Turn StaticMutability match into exhaustive match
1c0229b7f Factor out a function for printing static mutability
dbf29c35b Support Item::Verbatim containing untyped static
918f087c2 Support Item::Verbatim containing function without body
fbd724a82 Release 0.2.0
45aff6155 Re-enable cargo outdated CI
178a5290f Merge pull request #43 from dtolnay/syn
03793736b Update to syn 2
c1eaf472d Merge pull request #42 from dtolnay/fuzz
cef5aa1f8 Check fuzz target compilation in CI
4b92465f0 Add fuzz target
5b97e8c1a Use exhaustive expr matches in the stmt printer
b22d89f0b Touch up is_short_ident
9566d1533 Convert some expr matches to exhaustive in test mode
1fa676cdd Temporarily defer syn upgrade from failing cargo outdated job
29d859477 Improve formatting of unsafe blocks using small_block
bffb4eb57 Merge pull request #38 from dtolnay/spanlocation
a8c938191 Print location when prettyplease-update fails to parse file
4b5a35858 Resolve collapsible_if clippy lint
3c2be1af5 Simplify using PathArguments::is_none
240ec7c4b Merge pull request #37 from dtolnay/pathkind
e9d45ffb1 Override choice of colons token in angle bracketed path args
e7b61dcee Remove misleading comment copied from syn
81780e0eb Release 0.1.25
d754bf9bd Simpler finding of last generic param
f12245c05 Merge pull request #36 from dtolnay/genericorder
1c6a69387 Fix printing of trailing comma after reordered generic params
208e46f02 Release 0.1.24
f7fb52035 Set html_root_url
5d4bd38ee Ignore let_underscore_untyped pedantic clippy lint
9c2ccf4ae Reuse all the compiler's locale resources
0e5047408 More concise construction of file path mapping
5f98a8347 Update test suite to nightly-2023-02-23
471fe8dfb Revert "Enable type layout randomization in CI on nightly"
ef7636fdc Enable type layout randomization in CI on nightly
97b378b89 Support a manual trigger on CI workflow
a158e6f77 Release 0.1.23
88079f576 Merge pull request #33 from wada314/master
c1709d0e2 Reflecting the review comments.
efa202add little more formatting
408ae4d5e Fix the type alias's `where` clause position according to the updated rust syntax (see rust issue #89122)
e07d1bfc4 Fix -lLLVM-15-rust-1.68.0-nightly link error
26f813955 Fix 'crate rustc_ast_pretty required to be available in rlib format'
cb56bca9f Opt out -Zrustdoc-scrape-examples on docs.rs
65fac699e Prevent actions duplication on noop merge commits
5b9c28640 Sync license text with rust-lang repos
384a7be35 Release 0.1.22
7bee2576d Update build status badge
afd1507a8 Prevent build.rs rerunning unnecessarily on all source changes
230b38165 Time out workflows after 45 minutes
57ef1a2f3 Release 0.1.21
f187a3379 Merge pull request #32 from dtolnay/nestedcomment
88e689b7f Handle doc comments containing comment end characters
81cb7a9aa Resolve unnecessary_cast clippy lint
385e50509 Release 0.1.20
d00b46b85 Merge pull request #30 from dtolnay/commavariadic
9176eaeca Fix comma before variadic
cd747734a Remove default package.readme metadata from Cargo.toml
ecbc00c13 GitHub Workflows security hardening
dd3960c83 Release 0.1.19
412d2fc28 Merge pull request #28 from dtolnay/elseif
2ab84dc65 Add a sponsors link
b23346b7a Fix indentation of multi-line 'else if'
68f8ef707 Release 0.1.18
372913cf2 Update keywords in crates.io metadata
a706fc246 Add categories to crates.io metadata
d026d91b8 Sort package entries in Cargo.toml
6f5dc623c Release 0.1.17
ad4309e3f Center align table columns
ea63e116b Checkmark to green heart
7f9d6fd0f Release 0.1.16
802efdda7 Merge pull request #26 from dtolnay/emptyangle
ecfe618f4 Strip off empty angle bracketed generic arguments

git-subtree-dir: dependencies/prettyplease
git-subtree-split: 182b7c2bb1b3758cb652c74fef8f8ebd1b244ec8
utaal pushed a commit that referenced this issue Jan 31, 2025
182b7c2bb More precise gitignore patterns
fc5bf6b40 Release 0.2.29
4e85487ba Merge pull request #103 from dtolnay/macrosemi
1290d70ed Preserve semicolon on braced statement-position macros
78b9b4003 Merge pull request #102 from dtolnay/floatdot
281784a84 Revert "Avoid trailing '.' on non-macro float literals"
99d37c538 Release 0.2.28
2f398b377 Merge pull request #101 from dtolnay/skiprelease
e8c63d461 Skip `cargo test --release` on old rustc
f191a5ba0 Merge pull request #100 from dtolnay/closurebailout
490d479ee Disregard bailouts inside of closure bodies
ee1a762a5 Increase expression depth in test_precedence
c56aafcc3 Fix scan_right out of sync with syn
d6296ce3b Merge pull request #98 from dtolnay/permutations
78609985e Make permutations test compatible with Rust pre-1.65
0ee28e66b Add precedence permutations test
8ac4fd32e Merge pull request #97 from dtolnay/matcharm
0f7da1218 Print match arm with paren instead of brace if invalid as stmt
24712df07 Simplify match-arm spacing
9c2bb02eb Propagate fixup information inside closure body
465fa06c7 Merge pull request #96 from dtolnay/postbreak
4c613674b Support multi-char post_break
4d65c3ce7 Merge pull request #95 from dtolnay/parseablestmt
d6d84246e Fix some parseable_as_stmt edge cases
f2117b8a5 Merge pull request #94 from dtolnay/parseablestmt
9ff53194a Convert parseable_as_stmt to non-recursive
fda4495f4 Merge pull request #93 from dtolnay/matcharm
2b7442837 Deduplicate match-arm terminator logic
f3cba4ad7 Merge pull request #92 from dtolnay/rangerange
7e125a2b9 Separate consecutive ranges with a space
74772cb86 Merge pull request #91 from dtolnay/up
487078d22 Resolve unnecessary_lazy_evaluations clippy lints
65012eca6 Raise required compiler to Rust 1.62
ebefa9de8 Merge pull request #90 from dtolnay/synprecedence
1cfd65ab1 Synchronize precedence implementation from syn 2.0.96
277a63bb8 Ignore bool_to_int_with_if pedantic clippy lint
57258305f Update non_exhaustive_omitted_patterns false positive link
882f0ed68 Release 0.2.27
0ddbeab0e Merge pull request #89 from dtolnay/floatdot
988425d32 Avoid trailing '.' on non-macro float literals
5478bcf19 Release 0.2.26
1dd1aaec1 Merge pull request #88 from dtolnay/precedence
5b476dfa4 Wire up fixups for precedence
3dd7a2351 Fix imported syn code compilation
3ea1499d0 Copy precedence implementation from syn 2.0.95
b359ab075 Look into Group expressions for statement termination
6623df065 Properly space and indent const arguments in blocks
9d24e92a3 Simplify printing of Stmt::Local box ends
ba264e3b2 Automatically brace the body in closures with return type
d3b30dbdd Improve small block spacing around diverge expressions
8e5ae6779 Factor our expression small block printing
8c7a11cf2 Merge pull request #87 from dtolnay/exprinpath
bf0ca9544 Share logic for wrapping const expression in braces in path
a947562f5 Rename subexpr -> prefix_subexpr
02584e4f3 Prevent upload-artifact step from causing CI failure
50de5c67a Release 0.2.25
06791ead0 Merge pull request #85 from dtolnay/externsafe
db38f770c Print safe and explicitly unsafe foreign items
91ebe48d5 Merge pull request #84 from dtolnay/buildenv
265ab3b51 Use $CARGO_PKG_VERSION from buildscript exec-time instead of build-time
c6f081535 Release 0.2.24
4ca0f7623 Merge pull request #83 from dtolnay/precisecapture
3381c6447 Pretty print TypeParamBound::PreciseCapture
a1701f793 Release 0.2.23
b4919cf22 Merge pull request #82 from dtolnay/rawaddr
eb15c0c14 Pretty print Expr::RawAddr
75e1f4fb4 Ignore ref_option pedantic clippy lint
c28d8ea50 Release 0.2.22
dd76fd613 Merge pull request #80 from dtolnay/precisecapture
b54cd1266 Pretty-print precise capture syntax (`use<>`)
61bd508ab Upload CI Cargo.lock for reproducing failures
ea2044e13 Release 0.2.21
11c45ff3a Merge pull request #79 from dtolnay/tailcall
d2881c32e Pretty-print tail calls (`become`)
53aac3023 Merge pull request #78 from dtolnay/rustfmtbug
cff71f363 Revert "Work around rustfmt 'rewriting static' bug"
8584223d1 Resolve single_match_else pedantic clippy lint
93f207864 Merge pull request #76 from dtolnay/rustfmtbug
39a3f7501 Work around rustfmt 'rewriting static' bug
060a8adf6 Update rustfmt output to nightly-2024-06-24
8f7bb3afe Raise minimum supported compiler to 1.61
22da86d97 Update unstable rustc_parse code to nightly-2024-06-06
179974cc9 Release 0.2.20
132140492 Merge pull request #73 from dtolnay/checkcfg
c24065683 Resolve unexpected_cfgs warning
096eac9c6 Update rustc initialization to nightly-2024-04-17
e0d74e690 Release 0.2.19
8e800f6fd Merge pull request #72 from dtolnay/assign
a6aa3903d Fix line placement for field assignment with multiline value
659fde697 Release 0.2.18
fadd0dfa9 Merge pull request #71 from dtolnay/cstr
1ad491d82 Support C-string literal syntax
86ac6a949 Raise required compiler to rust 1.60
cf2ecc110 Fix typo in readme and crate-level documentation
45f047f2a Explicitly install a Rust toolchain for cargo-outdated job
0875d2df6 Release 0.2.17
7f0aef1c7 Merge pull request #70 from dtolnay/selfas
a89930441 Preserve braces in 'use path::to::{self as rename}'
d8b35956b Revert "Temporarily disable prettyplease-update-examples in CI"
c49b5fec0 Temporarily disable prettyplease-update-examples in CI
2b6085fb8 Update test suite to nightly-2024-03-06
d54ac4680 Merge pull request #66 from dtolnay/exhaustive
bcbb5fc44 Pick up changes to non_exhaustive_omitted_patterns lint
380c7b8c5 Release 0.2.16
7b9b35074 Pull in proc-macro2 sccache fix
987bea1eb Merge pull request #65 from dtolnay/testmatchguard
e5e951130 Add test of parenthesization of struct lit in match guard
ae86c8ce7 Merge pull request #64 from dtolnay/grouped
acdc42ebf Look into invisible delimiters to determine exterior struct lit
b2f30c7f3 Merge pull request #63 from dtolnay/structcond
157544394 Add test of automatic parenthesization of braced structs in cond
11ebfab3c Format with new rustfmt that handles let-else
91033e81b Give a variable name before passing boolean arg
93aa5b31b Resolve get_first clippy lint
1e8e67e83 Test docs.rs documentation build in CI
10b1e419c Release 0.2.15
550c3296a Merge pull request #60 from dtolnay/iflet
8ad4602ea Update cargo-expand products
d8f127fbe Improve indentation of if-let and while-let expressions
44f5a4a82 Update actions/checkout@v3 -> v4
823914d11 Release 0.2.14
df04af8b0 Merge pull request #59 from dtolnay/constverbatim
4b8b6ef80 Support generics on const item
c3b96858f Parse const item inside verbatim trait item
80b4ef3bb Release 0.2.13
4ec51afc3 Merge pull request #58 from dtolnay/unnamedfields
b5aabc5b0 Support unnamed struct/union type syntax
1bd9b57a0 Release 0.2.12
b97e38da5 Opt in to generate-link-to-definition when building on docs.rs
17dc0a9a7 Release 0.2.11
0142ff4f7 Merge pull request #56 from dtolnay/letelse
ba428ece9 Improve let-else formatting
7120cbe8d Select a single docs.rs build target
8e9d001a4 Release 0.2.10
73eae68e5 Update deps to a proc-macro2 that works on current nightly
f44639ce9 Add CI job using minimal-versions
6f7a9eebd Merge pull request #54 from dtolnay/verbatimattr
596ceaf8d Preserve attributes on verbatim Expr
4a2318ec7 Release 0.2.9
1593a0c0f Recognize ellipsis placeholder in all verbatim nodes
82d41ab2a Release 0.2.8
ad3755e8d Merge pull request #53 from dtolnay/closurebrace
4484fe0bf Prevent brace insertion from changing meaning of expression
046164941 Reduce visibility of requires_terminator
0aa895b7e Release 0.2.7
c32ce5c9a Merge pull request #51 from dtolnay/macros
9b42ba611 Format some standard library macros better
f69383aff Release 0.2.6
8c82f67c6 Merge pull request #49 from dtolnay/macrorulessemi
f4c9eac76 Fix semicolon on macro_rules written with parentheses
606490c15 Release 0.2.5
587525c3d Merge pull request #47 from dtolnay/builtin
12505bf21 Support builtin# expr syntax
ea7c3dde0 Fix new unused_mut detected by nightly-2023-04-30
f23278a76 Update fuzz crate gitignore to ignore coverage dir
9204b588b Release 0.2.4
858ee6041 Fix printing of path generics in trait part of qpath
b0e14e3b0 Release 0.2.3
6fd3bc1e0 Turn on verbatim feature when built by Rust playground
68f001b7d Merge pull request #45 from dtolnay/armexpr
083de82f7 Improve formatting of line-wrapped match arms
c08cb35f8 Release 0.2.2
801c67e9d Pull in all syn verbatim parsing fixes
330d8923b Fix linkage name for the build script
9925e2929 Support TraitItem::Verbatim containing visibility or defaultness
6d6618fbf Support ImplItem::Verbatim containing const without init
bf0d92f59 Rename flexible impl data structure to match the other verbatim types
47ff683fb Support ForeignItem::Verbatim containing static with init
d7c3d9a40 Support ForeignItem::Verbatim containing fn with body
78f42b4ae Support verbatim type in various items
abf4c2dfd Support empty variants on all verbatim items
7859fc1b9 Let each verbatim variant take care of the trailing linebreak
e80d246a7 Release 0.2.1
756ca8e3a Support ImplItem::Verbatim containing fn without body
af0ca9e1d Support Pat::Verbatim containing box pattern
bad0ffdf0 Support Pat::Verbatim containing const block pattern
c353ce4ab Support Item::Verbatim containing macros 2.0 definition
97d06b7e4 Support Item::Verbatim containing impl block
91f77eb7d Support Item::Verbatim containing const with no init expr
6d0c81226 Support Item::Verbatim containing static with no init expr
ca8a08193 Turn StaticMutability match into exhaustive match
1c0229b7f Factor out a function for printing static mutability
dbf29c35b Support Item::Verbatim containing untyped static
918f087c2 Support Item::Verbatim containing function without body
fbd724a82 Release 0.2.0
45aff6155 Re-enable cargo outdated CI
178a5290f Merge pull request #43 from dtolnay/syn
03793736b Update to syn 2
c1eaf472d Merge pull request #42 from dtolnay/fuzz
cef5aa1f8 Check fuzz target compilation in CI
4b92465f0 Add fuzz target
5b97e8c1a Use exhaustive expr matches in the stmt printer
b22d89f0b Touch up is_short_ident
9566d1533 Convert some expr matches to exhaustive in test mode
1fa676cdd Temporarily defer syn upgrade from failing cargo outdated job
29d859477 Improve formatting of unsafe blocks using small_block
bffb4eb57 Merge pull request #38 from dtolnay/spanlocation
a8c938191 Print location when prettyplease-update fails to parse file
4b5a35858 Resolve collapsible_if clippy lint
3c2be1af5 Simplify using PathArguments::is_none
240ec7c4b Merge pull request #37 from dtolnay/pathkind
e9d45ffb1 Override choice of colons token in angle bracketed path args
e7b61dcee Remove misleading comment copied from syn
81780e0eb Release 0.1.25
d754bf9bd Simpler finding of last generic param
f12245c05 Merge pull request #36 from dtolnay/genericorder
1c6a69387 Fix printing of trailing comma after reordered generic params
208e46f02 Release 0.1.24
f7fb52035 Set html_root_url
5d4bd38ee Ignore let_underscore_untyped pedantic clippy lint
9c2ccf4ae Reuse all the compiler's locale resources
0e5047408 More concise construction of file path mapping
5f98a8347 Update test suite to nightly-2023-02-23
471fe8dfb Revert "Enable type layout randomization in CI on nightly"
ef7636fdc Enable type layout randomization in CI on nightly
97b378b89 Support a manual trigger on CI workflow
a158e6f77 Release 0.1.23
88079f576 Merge pull request #33 from wada314/master
c1709d0e2 Reflecting the review comments.
efa202add little more formatting
408ae4d5e Fix the type alias's `where` clause position according to the updated rust syntax (see rust issue #89122)
e07d1bfc4 Fix -lLLVM-15-rust-1.68.0-nightly link error
26f813955 Fix 'crate rustc_ast_pretty required to be available in rlib format'
cb56bca9f Opt out -Zrustdoc-scrape-examples on docs.rs
65fac699e Prevent actions duplication on noop merge commits
5b9c28640 Sync license text with rust-lang repos
384a7be35 Release 0.1.22
7bee2576d Update build status badge
afd1507a8 Prevent build.rs rerunning unnecessarily on all source changes
230b38165 Time out workflows after 45 minutes
57ef1a2f3 Release 0.1.21
f187a3379 Merge pull request #32 from dtolnay/nestedcomment
88e689b7f Handle doc comments containing comment end characters
81cb7a9aa Resolve unnecessary_cast clippy lint
385e50509 Release 0.1.20
d00b46b85 Merge pull request #30 from dtolnay/commavariadic
9176eaeca Fix comma before variadic
cd747734a Remove default package.readme metadata from Cargo.toml
ecbc00c13 GitHub Workflows security hardening
dd3960c83 Release 0.1.19
412d2fc28 Merge pull request #28 from dtolnay/elseif
2ab84dc65 Add a sponsors link
b23346b7a Fix indentation of multi-line 'else if'
68f8ef707 Release 0.1.18
372913cf2 Update keywords in crates.io metadata
a706fc246 Add categories to crates.io metadata
d026d91b8 Sort package entries in Cargo.toml
6f5dc623c Release 0.1.17
ad4309e3f Center align table columns
ea63e116b Checkmark to green heart
7f9d6fd0f Release 0.1.16
802efdda7 Merge pull request #26 from dtolnay/emptyangle
ecfe618f4 Strip off empty angle bracketed generic arguments

git-subtree-dir: dependencies/prettyplease
git-subtree-split: 182b7c2bb1b3758cb652c74fef8f8ebd1b244ec8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants