[Migrated] Panicking in a #[track_caller] function fails to compile
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Rust
- Sterne
- 3.4k
- Forks
- 125
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
Issue automatically imported from old repo: https://github.com/EmbarkStudios/rust-gpu/issues/1058
Old labels: t: bug
Originally creatd by beepster4096 on 2023-05-03T02:22:13Z
Expected Behaviour
Successful compilation
Example & Steps To Reproduce
#![no_std]
#[track_caller]
fn panic() {
panic!("owo")
}
#[spirv_std::spirv(fragment)]
pub fn main() {
panic();
}
produces
error: function pointer types are not allowed
-->
C:\Users\DrMeepster\.rustup\toolchains\nightly-2023-03-04-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\fmt\mod.rs:401:5
|
401 | pub const fn new_v1(pieces: &'a [&'static str], args: &'a [ArgumentV1<'a>]) -> Arguments<'a> {
| ^
|
error: cannot cast between pointer types
from `*struct core::option::Option<&[core::fmt::rt::v1::Argument]> { *[struct core::fmt::rt::v1::Argument { position: u32,
format: struct core::fmt::rt::v1::FormatSpec { precision: struct core::fmt::rt::v1::Count { u32, u32 }, width: struct
core::fmt::rt::v1::Count { u32, u32 }, flags: u32, fill: u32, align: u8 } }], u32 }`
to `**struct fn(&[&'static str], &[core::fmt::ArgumentV1<'_>]) -> core::fmt::Arguments<'_>
{core::fmt::Arguments::<'_>::new_v1} { }`
-->
C:\Users\DrMeepster\.rustup\toolchains\nightly-2023-03-04-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\fmt\mod.rs:405:34
|
405 | Arguments { pieces, fmt: None, args }
| ^
|
error: cannot cast between pointer types
from `*[struct &str { *[u8], u32 }; 1]`
to `*[struct &str { *[u8], u32 }]`
-->
C:\Users\DrMeepster\.rustup\toolchains\nightly-2023-03-04-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\panic.rs:57:38
|
57 | $crate::panicking::panic_fmt($crate::const_format_args!($($t)+))
| ^
|
error: cannot cast between pointer types
from `*struct ! { }`
to `*[struct core::fmt::ArgumentV1<'_> { value: *struct core::fmt::Opaque { }, formatter: *fn(*struct core::fmt::Opaque { },
*struct core::fmt::Formatter<'_> { buf: struct &mut dyn core::fmt::Write { *struct dyn core::fmt::Write { }, *[u32; 3] }, width:
struct core::option::Option<usize> { u32, u32 }, precision: struct core::option::Option<usize> { u32, u32 }, flags: u32, fill: u32,
align: u8 }) -> bool }]`
-->
C:\Users\DrMeepster\.rustup\toolchains\nightly-2023-03-04-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\panic.rs:57:38
|
57 | $crate::panicking::panic_fmt($crate::const_format_args!($($t)+))
| ^
|
System Info
- Rust: 1.69.0-nightly (44cfafe2f 2023-03-03)
- OS: Windows 11 10.0.22621
- GPU: NVIDIA GeForce RTX 3070 Laptop
Backtrace
Backtrace
error: function pointer types are not allowed
-->
C:\Users\DrMeepster\.rustup\toolchains\nightly-2023-03-04-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\fmt\mod.rs:401:5
|
401 | pub const fn new_v1(pieces: &'a [&'static str], args: &'a [ArgumentV1<'a>]) -> Arguments<'a> {
| ^
|
= note: used by `core::fmt::ArgumentV1<'_>`
= note: used by unnamed global (%31)
= note: used by unnamed global (%32)
= note: used by `&[core::fmt::ArgumentV1<'_>]`
= note: used by `core::fmt::Arguments<'_>`
note: used from within `gpu::panic`
-->
C:\Users\DrMeepster\.rustup\toolchains\nightly-2023-03-04-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\panic.rs:57:38
|
57 | $crate::panicking::panic_fmt($crate::const_format_args!($($t)+))
| ^
note: called by `gpu::main`
--> gpu\src\lib.rs:10:5
|
10 | panic();
| ^
note: called by `main`
--> gpu\src\lib.rs:8:1
|
8 | #[spirv_std::spirv(fragment)]
| ^
error: cannot cast between pointer types
from `*struct core::option::Option<&[core::fmt::rt::v1::Argument]> { *[struct core::fmt::rt::v1::Argument { position: u32,
format: struct core::fmt::rt::v1::FormatSpec { precision: struct core::fmt::rt::v1::Count { u32, u32 }, width: struct
core::fmt::rt::v1::Count { u32, u32 }, flags: u32, fill: u32, align: u8 } }], u32 }`
to `**struct fn(&[&'static str], &[core::fmt::ArgumentV1<'_>]) -> core::fmt::Arguments<'_>
{core::fmt::Arguments::<'_>::new_v1} { }`
-->
C:\Users\DrMeepster\.rustup\toolchains\nightly-2023-03-04-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\fmt\mod.rs:405:34
|
405 | Arguments { pieces, fmt: None, args }
| ^
|
note: used from within `<core::fmt::Arguments>::new_v1`
-->
C:\Users\DrMeepster\.rustup\toolchains\nightly-2023-03-04-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\fmt\mod.rs:405:34
|
405 | Arguments { pieces, fmt: None, args }
| ^
note: called by `gpu::panic`
-->
C:\Users\DrMeepster\.rustup\toolchains\nightly-2023-03-04-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\panic.rs:57:38
|
57 | $crate::panicking::panic_fmt($crate::const_format_args!($($t)+))
| ^
note: called by `gpu::main`
--> gpu\src\lib.rs:10:5
|
10 | panic();
| ^
note: called by `main`
--> gpu\src\lib.rs:8:1
|
8 | #[spirv_std::spirv(fragment)]
| ^
error: cannot cast between pointer types
from `*[struct &str { *[u8], u32 }; 1]`
to `*[struct &str { *[u8], u32 }]`
-->
C:\Users\DrMeepster\.rustup\toolchains\nightly-2023-03-04-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\panic.rs:57:38
|
57 | $crate::panicking::panic_fmt($crate::const_format_args!($($t)+))
| ^
|
note: used from within `gpu::panic`
-->
C:\Users\DrMeepster\.rustup\toolchains\nightly-2023-03-04-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\panic.rs:57:38
|
57 | $crate::panicking::panic_fmt($crate::const_format_args!($($t)+))
| ^
note: called by `gpu::main`
--> gpu\src\lib.rs:10:5
|
10 | panic();
| ^
note: called by `main`
--> gpu\src\lib.rs:8:1
|
8 | #[spirv_std::spirv(fragment)]
| ^
error: cannot cast between pointer types
from `*struct ! { }`
to `*[struct core::fmt::ArgumentV1<'_> { value: *struct core::fmt::Opaque { }, formatter: *fn(*struct core::fmt::Opaque { },
*struct core::fmt::Formatter<'_> { buf: struct &mut dyn core::fmt::Write { *struct dyn core::fmt::Write { }, *[u32; 3] }, width:
struct core::option::Option<usize> { u32, u32 }, precision: struct core::option::Option<usize> { u32, u32 }, flags: u32, fill: u32,
align: u8 }) -> bool }]`
-->
C:\Users\DrMeepster\.rustup\toolchains\nightly-2023-03-04-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\panic.rs:57:38
|
57 | $crate::panicking::panic_fmt($crate::const_format_args!($($t)+))
| ^
|
note: used from within `gpu::panic`
-->
C:\Users\DrMeepster\.rustup\toolchains\nightly-2023-03-04-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\panic.rs:57:38
|
57 | $crate::panicking::panic_fmt($crate::const_format_args!($($t)+))
| ^
note: called by `gpu::main`
--> gpu\src\lib.rs:10:5
|
10 | panic();
| ^
note: called by `main`
--> gpu\src\lib.rs:8:1
|
8 | #[spirv_std::spirv(fragment)]
| ^
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, das Beispiel in gpu/src/lib.rs zu reproduzieren, und vergleiche die ausgegebenen Diagnosen im Zusammenhang mit #[track_caller], core::fmt::mod.rs und core::panic.rs. Verfolge den Fehler vom spirv-Fragment-Einstiegspunkt durch die Kompilierung zurück; abgeschlossen ist dies, wenn das Beispiel ohne die gemeldeten Funktionszeiger- und Pointer-Cast-Fehler erfolgreich kompiliert.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- rust
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 42/100