Skip to content
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

glue_drop and glue_take in bad order #3290

Closed
Vincent-Belliard opened this issue Aug 27, 2012 · 14 comments · Fixed by #12330
Closed

glue_drop and glue_take in bad order #3290

Vincent-Belliard opened this issue Aug 27, 2012 · 14 comments · Fixed by #12330
Labels
A-codegen Area: Code generation E-needs-test Call for participation: An issue has been fixed and does not reproduce, but no test has been added. I-crash Issue: The compiler crashes (SIGSEGV, SIGABRT, etc). Use I-ICE instead when the compiler panics. P-medium Medium priority
Milestone

Comments

@Vincent-Belliard
Copy link
Contributor

When a shared reference is assign, the glue_drop function is called with the old value before the glue_take function is called with the new_value. With an assignment like "self.o = self.o;" the generated program will core.

Of course, it's a silly example. All other examples I tried make a glue_take before calling the assignment (for example if you call a function with the argument "self.o" which will be then assigned) so you should never have this case in a real program.

Maybe it doesn't need to be fixed as it shouldn't happen with a real program.

@nikomatsakis
Copy link
Contributor

A simpler example:

fn main() {
   let mut x = ~3;
   x = x;
   assert *x == 3;
}

That segfaults for me. This should definitely be fixed!

@graydon
Copy link
Contributor

graydon commented Aug 27, 2012

Hm. At some point we had a test for this because I was quite careful to make this work correctly. Wonder when it broke.

@catamorphism
Copy link
Contributor

Still segfaults as of e16f94f

@brson
Copy link
Contributor

brson commented Mar 31, 2013

Not 0.6

@catamorphism
Copy link
Contributor

Still segfaults as of 64963d6 . Nominating for milestone 5, production-ready

@graydon
Copy link
Contributor

graydon commented Jun 20, 2013

accepted for production-ready milestone

@emberian
Copy link
Member

emberian commented Aug 5, 2013

Still crashing

@klutzy
Copy link
Contributor

klutzy commented Sep 2, 2013

Still crashing with 73a28e5

@pnkfelix
Copy link
Member

accepted for P-high

@nrc
Copy link
Member

nrc commented Feb 13, 2014

Working on this

@nrc
Copy link
Member

nrc commented Feb 14, 2014

This no longer reproduces (with NIko's test case). I also tried with a managed pointer because apparently glue take/drop is only used for ref counting now and could not repro that way either. I tried to create a testcase as described in the first comment, but TBH I'm not really sure what was required. I tried a few things nothing crashed. I also examined the llvm ir and the 'problem' is that we never create these drop before take patterns.

Anyone got an idea for how else this bug could be repro'ed (I really don't understand the glue stuff, so I might be missing something obvious)? Otherwise I suggest the bug should be closed.

@thestinger
Copy link
Contributor

I'm not sure if we have a test for this already. Perhaps there's one that was marked as ignored.

@alexcrichton
Copy link
Member

With a test case checked in, it looks like this can be closed (unless there's another subtler bug going on here).

@nikomatsakis
Copy link
Contributor

I made a big effort to get this right as part of #3511 -- and totally forgot to write tests!

bors added a commit that referenced this issue Feb 18, 2014
@bors bors closed this as completed in 8334915 Feb 18, 2014
RalfJung pushed a commit to RalfJung/rust that referenced this issue Feb 17, 2024
Stop recommending cargo clean in README

Miri has used the `target/miri` subdirectory since 2021 to keep itself separate from non-miri builds, so this should not be necessary.

See commit 6a18683

Since the items are no longer a sequence of steps to do in order ("first, make sure that ..."), switch to an unordered list while we're at it.

Closes rust-lang#3289
jaisnan pushed a commit to jaisnan/rust-dev that referenced this issue Jul 29, 2024
Update Rust toolchain from nightly-2024-06-22 to nightly-2024-06-23
without any other source changes.
This is an automatically generated pull request. If any of the CI checks
fail, manual intervention is required. In such a case, review the
changes at https://github.com/rust-lang/rust from
rust-lang@c1b336c
up to
rust-lang@3cb521a.
The log for this commit range is:
rust-lang@3cb521a434 Auto merge of
rust-lang#126761 - GuillaumeGomez:unsafe_extern_blocks, r=spastorino
rust-lang@a0f01c3c10 Auto merge of
rust-lang#126838 - matthiaskrgr:rollup-qkop22o, r=matthiaskrgr
rust-lang@dc9a08f535 Rollup merge of
rust-lang#126552 - fee1-dead-contrib:rmfx, r=compiler-errors
rust-lang@162120b4fa Rollup merge of
rust-lang#126318 - Kobzol:bootstrap-perf, r=onur-ozkan
rust-lang@f3ced9d540 Rollup merge of
rust-lang#126140 - eduardosm:stabilize-fs_try_exists, r=Amanieu
rust-lang@f944afe380 Auto merge of
rust-lang#116113 - kpreid:arcmut, r=dtolnay
rust-lang@88c3db57e4 Generalize
`{Rc,Arc}::make_mut()` to unsized types.
rust-lang@a9a4830d25 Replace
`WriteCloneIntoRaw` with `CloneToUninit`.
rust-lang@ec201b8650 Add
`core::clone::CloneToUninit`.
rust-lang@81da6a6d40 Make `effects` an
incomplete feature
rust-lang@ac47dbad50 Auto merge of
rust-lang#126824 - GuillaumeGomez:rollup-sybv8o7, r=GuillaumeGomez
rust-lang@d265538016 Rollup merge of
rust-lang#126823 - GuillaumeGomez:migrate-run-make-inline-always-many-cgu,
r=Kobzol
rust-lang@25bcc7d130 Rollup merge of
rust-lang#126731 - Kobzol:bootstrap-cmd-refactor, r=onur-ozkan
rust-lang@399c5cabdd Rollup merge of
rust-lang#126723 - estebank:dot-dot-dot, r=Nadrieril
rust-lang@3ed2cd74b5 Rollup merge of
rust-lang#126686 - fmease:dump-preds-n-item-bounds, r=compiler-errors
rust-lang@07e8b3ac01 Rollup merge of
rust-lang#126555 - beetrees:f16-inline-asm-arm, r=Amanieu
rust-lang@d03d6c0fea Auto merge of
rust-lang#126750 - scottmcm:less-unlikely, r=jhpratt
rust-lang@e7dfd4a913 Migrate
`run-make/inline-always-many-cgu` to `rmake.rs`
rust-lang@d9962bb4d8 Make `read_dir`
method take a mutable callback
rust-lang@f1b0d54ca9 Auto merge of
rust-lang#126816 - weihanglo:update-cargo, r=weihanglo
rust-lang@0bd58d8122 Apply review
comments.
rust-lang@250586cb2e Wrap std `Output` in
`CommandOutput`
rust-lang@f0aceed540 Auto merge of
rust-lang#126817 - workingjubilee:rollup-0rg0k55, r=workingjubilee
rust-lang@38bd7a0fcb Add
`#[rustc_dump_{predicates,item_bounds}]`
rust-lang@1916b3d57f Rollup merge of
rust-lang#126811 - compiler-errors:tidy-ftl, r=estebank
rust-lang@539090e5cd Rollup merge of
rust-lang#126809 - estebank:wording-tweak, r=oli-obk
rust-lang@b9ab6c3501 Rollup merge of
rust-lang#126798 - miguelfrde:master, r=tmandry
rust-lang@9498d5cf2f Rollup merge of
rust-lang#126787 - Strophox:get-bytes, r=RalfJung
rust-lang@1f9793f1aa Rollup merge of
rust-lang#126722 - adwinwhite:ptr_fn_abi, r=celinval
rust-lang@84b0922565 Rollup merge of
rust-lang#126712 - Oneirical:bootest-constestllation, r=jieyouxu
rust-lang@e7956cd994 Rollup merge of
rust-lang#126530 - beetrees:f16-inline-asm-riscv, r=Amanieu
rust-lang@10e1f5d212 Auto merge of
rust-lang#124101 - the8472:pidfd-methods, r=cuviper
rust-lang@2c65a24b8c Update cargo
rust-lang@fcae62649e Auto merge of
rust-lang#126758 - spastorino:avoid-safe-outside-unsafe-blocks, r=compiler-errors
rust-lang@ffd72b1700 Fix remaining cases
rust-lang@ea681ef281 Add a tidy rule to
make sure that diagnostics don't end in periods
rust-lang@8abf149bde to extract a pidfd
we must consume the child
rust-lang@0787c7308c Add PidFd::{kill,
wait, try_wait}
rust-lang@5d5892e966 Remove stray `.`
from error message
rust-lang@d94a40516e
[fuchsia-test-runner] Remove usage of kw_only
rust-lang@771e44ebd3 Add `f16` inline ASM
support for RISC-V
rust-lang@753fb070bb Add `f16` inline ASM
support for 32-bit ARM
rust-lang@22831ed117 Do not allow safe
usafe on static and fn items
rust-lang@a6a83d3d4e bless tests
rust-lang@b512bf6f77 add as_ptr to trait
AllocBytes, fix 2 impls; add pub fn get_bytes_unchecked_raw in
allocation.rs; add pub fn get_alloc_bytes_unchecked_raw[_mut] in
memory.rs
rust-lang@02aaea1803 update intrinsic
const param counting
rust-lang@3b14b756d8 Remove
`feature(effects)` from the standard library
rust-lang@a314f7363a Stop using
`unlikely` in `strict_*` methods
rust-lang@225796a2df Add method to get
`FnAbi` of function pointer
rust-lang@630c3adb14 Add regression test
for `unsafe_extern_blocks`
rust-lang@bb9a3ef90c Implement
`unsafe_extern_blocks` feature in rustdoc
rust-lang@3c0a4bc915 rewrite
crate-name-priority to rmake
rust-lang@bc12972bcd Slightly refactor
the dumping of HIR analysis data
rust-lang@3fe4d134dd Appease `clippy`
rust-lang@c15293407f Remove unused import
rust-lang@5c4318d02c Implement `run_cmd`
in terms of `run_tracked`
rust-lang@0de7b92cc6 Remove
`run_delaying_failure`
rust-lang@e933cfb13c Remove
`run_quiet_delaying_failure`
rust-lang@949e667d3f Remove `run_quiet`
rust-lang@a12f541a18 Implement new
command execution logic
rust-lang@9fd7784b97 Fix `...` in
multline code-skips in suggestions
rust-lang@f22b5afa6a rewrite
error-writing-dependencies to rmake
rust-lang@75ee1d74a9 rewrite
relocation-model to rmake
rust-lang@87d2e61428 Add `x perf` command
for profiling the compiler using `rustc-perf`
rust-lang@fd44aca2aa Copy `rustc-fake`
binary when building the `rustc-perf` tool
rust-lang@9e0b76201b Add `RustcPerf`
bootstrap tool
rust-lang@9ec178df0b Add `cargo_args` to
`ToolBuild`
rust-lang@6a04dfe78c Rename
`std::fs::try_exists` to `std::fs::exists` and stabilize fs_try_exists

Co-authored-by: celinval <35149715+celinval@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-codegen Area: Code generation E-needs-test Call for participation: An issue has been fixed and does not reproduce, but no test has been added. I-crash Issue: The compiler crashes (SIGSEGV, SIGABRT, etc). Use I-ICE instead when the compiler panics. P-medium Medium priority
Projects
None yet
Development

Successfully merging a pull request may close this issue.