From d5a32d870120109012daaa348ed97992d0e99ebc Mon Sep 17 00:00:00 2001 From: Michael Goulet <michael@errs.io> Date: Fri, 18 Mar 2022 19:51:26 -0700 Subject: [PATCH 1/7] Add known-bug for #94034 --- src/test/ui/hrtb/issue-94034.rs | 96 +++++++++++++++++++++++++++++ src/test/ui/hrtb/issue-94034.stderr | 1 + 2 files changed, 97 insertions(+) create mode 100644 src/test/ui/hrtb/issue-94034.rs create mode 100644 src/test/ui/hrtb/issue-94034.stderr diff --git a/src/test/ui/hrtb/issue-94034.rs b/src/test/ui/hrtb/issue-94034.rs new file mode 100644 index 0000000000000..5239e5db11c96 --- /dev/null +++ b/src/test/ui/hrtb/issue-94034.rs @@ -0,0 +1,96 @@ +// known-bug +// failure-status: 101 +// compile-flags: --edition=2021 --crate-type=lib +// rustc-env:RUST_BACKTRACE=0 + +// normalize-stderr-test "thread 'rustc' panicked.*" -> "thread 'rustc' panicked" +// normalize-stderr-test "note:.*RUST_BACKTRACE=1.*\n" -> "" +// normalize-stderr-test "\nerror: internal compiler error.*\n\n" -> "" +// normalize-stderr-test "note:.*unexpectedly panicked.*\n\n" -> "" +// normalize-stderr-test "note: we would appreciate a bug report.*\n\n" -> "" +// normalize-stderr-test "note: compiler flags.*\n\n" -> "" +// normalize-stderr-test "note: rustc.*running on.*\n\n" -> "" +// normalize-stderr-test "query stack during panic:\n" -> "" +// normalize-stderr-test "we're just showing a limited slice of the query stack\n" -> "" +// normalize-stderr-test "end of query stack\n" -> "" +// normalize-stderr-test "#.*\n" -> "" + +// This should not ICE. + +use std::{ + future::Future, + marker::PhantomData, + pin::Pin, + task::{Context, Poll}, +}; + +mod object { + use super::*; + + pub trait Object<'a> { + type Error; + type Future: Future<Output = Self>; + fn create() -> Self::Future; + } + + impl<'a> Object<'a> for u8 { + type Error = (); + type Future = Pin<Box<dyn Future<Output = Self>>>; + fn create() -> Self::Future { + unimplemented!() + } + } + + impl<'a, E, A: Object<'a, Error = E>> Object<'a> for (A,) { + type Error = (); + type Future = CustomFut<'a, E, A>; + fn create() -> Self::Future { + unimplemented!() + } + } + + pub struct CustomFut<'f, E, A: Object<'f, Error = E>> { + ph: PhantomData<(A::Future,)>, + } + + impl<'f, E, A: Object<'f, Error = E>> Future for CustomFut<'f, E, A> { + type Output = (A,); + fn poll(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<Self::Output> { + unimplemented!() + } + } +} + +mod async_fn { + use super::*; + + pub trait AsyncFn { + type Future: Future<Output = ()>; + fn call(&self) -> Self::Future; + } + + impl<F, Fut> AsyncFn for F + where + F: Fn() -> Fut, + Fut: Future<Output = ()>, + { + type Future = Fut; + fn call(&self) -> Self::Future { + (self)() + } + } +} + +pub async fn test() { + use self::{async_fn::AsyncFn, object::Object}; + + async fn create<T: Object<'static>>() { + T::create().await; + } + + async fn call_async_fn(inner: impl AsyncFn) { + inner.call().await; + } + + call_async_fn(create::<(u8,)>).await; +} diff --git a/src/test/ui/hrtb/issue-94034.stderr b/src/test/ui/hrtb/issue-94034.stderr new file mode 100644 index 0000000000000..1d8329142fc5c --- /dev/null +++ b/src/test/ui/hrtb/issue-94034.stderr @@ -0,0 +1 @@ +thread 'rustc' panicked From 05a467e4ce0000dd5372cbca74c18c001382341a Mon Sep 17 00:00:00 2001 From: David Tolnay <dtolnay@gmail.com> Date: Sun, 3 Apr 2022 19:38:25 -0700 Subject: [PATCH 2/7] Mailmap update --- .mailmap | 250 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 246 insertions(+), 4 deletions(-) diff --git a/.mailmap b/.mailmap index d72e6ebcb65fa..30c3212810cf9 100644 --- a/.mailmap +++ b/.mailmap @@ -7,51 +7,98 @@ Aaron Todd <github@opprobrio.us> Abhishek Chanda <abhishek.becs@gmail.com> Abhishek Chanda <abhishek@cloudscaling.com> +Abhijeet Bhagat <abhijeet.bhagat@gmx.com> +Abroskin Alexander <arkweid@evilmartians.com> Adolfo Ochagavía <aochagavia92@gmail.com> +Adrian Heine né Lang <mail@adrianheine.de> Adrien Tétar <adri-from-59@hotmail.fr> Ahmed Charles <ahmedcharles@gmail.com> <acharles@outlook.com> +Alan Egerton <eggyal@gmail.com> +Alan Stoate <alan.stoate@gmail.com> +Alessandro Decina <alessandro.d@gmail.com> Alex Burka <durka42+github@gmail.com> Alex Burka <aburka@seas.upenn.edu> +Alex Hansen <ahansen2@trinity.edu> Alex Lyon <arcterus@mail.com> <Arcterus@mail.com> Alex Newman <posix4e@gmail.com> Alex HotShot Newman <posix4e@gmail.com> Alex Rønne Petersen <alex@lycus.org> +Alex Vlasov <alex.m.vlasov@gmail.com> +Alex von Gluck IV <kallisti5@unixzen.com> Alexander Light <allight@cs.brown.edu> Alexander Light <scialexlight@gmail.com> +Alexander Ronald Altman <alexanderaltman@me.com> +Alexandre Martin <martin.alex32@hotmail.fr> Alexis Beingessner <a.beingessner@gmail.com> Alfie John <alfie@alfie.wtf> Alfie John <alfiej@fastmail.fm> +Amos Onn <amosonn@gmail.com> +Ana-Maria Mihalache <mihalacheana.maria@yahoo.com> Anatoly Ikorsky <aikorsky@gmail.com> Andre Bogus <bogusandre@gmail.com> +Andrea Ciliberti <meziu210@icloud.com> Andreas Gal <gal@mozilla.com> <andreas.gal@gmail.com> +Andreas Jonson <andjo403@users.noreply.github.com> +Andrew Gauger <andygauge@gmail.com> Andrew Kuchev <0coming.soon@gmail.com> Andrew <0coming.soon@gmail.com> +Andrew Lamb <andrew@nerdnetworks.org> Andrew Poelstra <asp11@sfu.ca> <apoelstra@wpsoftware.net> +Anhad Singh <andypythonappdeveloper@gmail.com> +Antoine Plaskowski <antoine.plaskowski@epitech.eu> Anton Löfgren <anton.lofgren@gmail.com> <alofgren@op5.com> +Araam Borhanian <avborhanian@gmail.com> +Araam Borhanian <avborhanian@gmail.com> <dobbybabee@gmail.com> Areski Belaid <areski@gmail.com> areski <areski@gmail.com> Ariel Ben-Yehuda <arielb1@mail.tau.ac.il> Ariel Ben-Yehuda <ariel.byd@gmail.com> Ariel Ben-Yehuda <arielb1@mail.tau.ac.il> arielb1 <arielb1@mail.tau.ac.il> +Artem Chernyak <artemchernyak@gmail.com> +Arthur Cohen <arthur.cohen@epita.fr> +Arthur Silva <arthurprs@gmail.com> +Arthur Woimbée <arthur.woimbee@gmail.com> +Artyom Pavlov <newpavlov@gmail.com> Austin Seipp <mad.one@gmail.com> <as@hacks.yi.org> +Ayaz Hafiz <ayaz.hafiz.1@gmail.com> Aydin Kim <ladinjin@hanmail.net> aydin.kim <aydin.kim@samsung.com> +Ayush Mishra <ayushmishra2005@gmail.com> +asrar <aszenz@gmail.com> +BaoshanPang <pangbw@gmail.com> Barosl Lee <vcs@barosl.com> Barosl LEE <github@barosl.com> +Bastian Kersting <bastian@cmbt.de> +Bastien Orivel <eijebong@bananium.fr> Ben Alpert <ben@benalpert.com> <spicyjalapeno@gmail.com> -Ben Sago <ogham@users.noreply.github.com> Ben S <ogham@bsago.me> -Ben Sago <ogham@users.noreply.github.com> Ben S <ogham@users.noreply.github.com> +Ben Lewis <benlewisj@gmail.com> +Ben Sago <ogham@users.noreply.github.com> +Ben Sago <ogham@users.noreply.github.com> <ogham@bsago.me> +Ben Striegel <ben.striegel@gmail.com> Benjamin Jackman <ben@jackman.biz> +Benoît Cortier <benoit.cortier@fried-world.eu> Bheesham Persaud <bheesham123@hotmail.com> Bheesham Persaud <bheesham.persaud@live.ca> Björn Steinbrink <bsteinbr@gmail.com> <B.Steinbrink@gmx.de> blake2-ppc <ulrik.sverdrup@gmail.com> <blake2-ppc> +boolean_coercion <booleancoercion@gmail.com> Boris Egorov <jightuse@gmail.com> <egorov@linux.com> +Braden Nelson <moonheart08@users.noreply.github.com> Brandon Sanderson <singingboyo@gmail.com> Brandon Sanderson <singingboyo@hotmail.com> Brett Cannon <brett@python.org> Brett Cannon <brettcannon@users.noreply.github.com> Brian Anderson <banderson@mozilla.com> <andersrb@gmail.com> Brian Anderson <banderson@mozilla.com> <banderson@mozilla.org> +Brian Bowman <seeker14491@gmail.com> +Brian Cain <brian.cain@gmail.com> Brian Dawn <brian.t.dawn@gmail.com> Brian Leibig <brian@brianleibig.com> Brian Leibig <brian.leibig@gmail.com> +Caleb Cartwright <caleb.cartwright@outlook.com> +Caleb Jones <code@calebjones.net> Noah Lev <camelidcamel@gmail.com> Noah Lev <camelidcamel@gmail.com> <37223377+camelid@users.noreply.github.com> +cameron1024 <cameron.studdstreet@gmail.com> +Camille Gillot <gillot.camille@gmail.com> Carl-Anton Ingmarsson <mail@carlanton.se> <ca.ingmarsson@gmail.com> +Carlo Teubner <carlo.teubner@gmail.com> Carol (Nichols || Goulding) <carol.nichols@gmail.com> <193874+carols10cents@users.noreply.github.com> Carol (Nichols || Goulding) <carol.nichols@gmail.com> <carol.nichols@gmail.com> Carol (Nichols || Goulding) <carol.nichols@gmail.com> <cnichols@thinkthroughmath.com> Carol Willing <carolcode@willingconsulting.com> +Chandler Deng <chandde@microsoft.com> Charles Lew <crlf0710@gmail.com> CrLF0710 <crlf0710@gmail.com> Chris C Cerami <chrisccerami@users.noreply.github.com> Chris C Cerami <chrisccerami@gmail.com> +Chris Gregory <czipperz@gmail.com> +Chris Pardy <chrispardy36@gmail.com> Chris Pressey <cpressey@gmail.com> Chris Thorn <chris@thorn.co> Chris Thorn <thorn@thoughtbot.com> Chris Vittal <christopher.vittal@gmail.com> Christopher Vittal <christopher.vittal@gmail.com> @@ -62,29 +109,53 @@ Christian Poveda <git@christianpoveda.xyz> <christianpoveda@protonmail.com> Christian Poveda <git@christianpoveda.xyz> <cn.poveda.ruiz@gmail.com> Christian Poveda <git@christianpoveda.xyz> <z1mvader@protonmail.com> Christian Poveda <git@christianpoveda.xyz> <cpovedar@fnal.gov> +Christian Vallentin <vallentinsource@gmail.com> +Christoffer Buchholz <chris@chrisbuchholz.me> +Christopher Durham <cad97@cad97.com> Clark Gaebel <cg.wowus.cg@gmail.com> <cgaebel@mozilla.com> +Clement Miao <clementmiao@gmail.com> +Clément Renault <renault.cle@gmail.com> +Cliff Dyer <jcd@sdf.org> Clinton Ryan <clint.ryan3@gmail.com> Corey Richardson <corey@octayn.net> Elaine "See More" Nemo <corey@octayn.net> +Crazycolorz5 <Crazycolorz5@gmail.com> +csmoe <35686186+csmoe@users.noreply.github.com> Cyryl Płotnicki <cyplo@cyplo.net> Damien Schoof <damien.schoof@gmail.com> +Dan Robertson <danlrobertson89@gmail.com> +Daniel Campoverde <alx741@riseup.net> Daniel J Rollins <drollins@financialforce.com> +Daniel Mueller <deso@posteo.net> Daniel Ramos <dan@daramos.com> +Daniele D'Orazio <d.dorazio96@gmail.com> +Dante Broggi <34220985+Dante-Broggi@users.noreply.github.com> +David Carlier <devnexen@gmail.com> David Klein <david.klein@baesystemsdetica.com> David Manescu <david.manescu@gmail.com> <dman2626@uni.sydney.edu.au> David Ross <daboross@daboross.net> David Wood <david@davidtw.co> <david.wood@huawei.com> +Deadbeef <ent3rm4n@gmail.com> Deadbeef <ent3rm4n@gmail.com> <fee1-dead-beef@protonmail.com> Derek Chiang <derekchiang93@gmail.com> Derek Chiang (Enchi Jiang) <derekchiang93@gmail.com> +DeveloperC <DeveloperC@protonmail.com> +Devin Ragotzy <devin.ragotzy@gmail.com> +Dharma Saputra Wijaya <dswijj@gmail.com> Diggory Hardy <diggory.hardy@gmail.com> Diggory Hardy <github@dhardy.name> +Dileep Bapat <dileepbapat@gmail.com> Donough Liu <ldm2993593805@163.com> <donoughliu@gmail.com> Donough Liu <ldm2993593805@163.com> DingMing Liu <liudingming@bupt.edu.cn> Dustin Bensing <dustin.bensing@googlemail.com> +DutchGhost <kasper199914@gmail.com> Dylan Braithwaite <dylanbraithwaite1@gmail.com> <mail@dylanb.me> +Dylan DPC <dylan.dpc@gmail.com> +Dylan MacKenzie <ecstaticmorse@gmail.com> Dzmitry Malyshau <kvarkus@gmail.com> E. Dunham <edunham@mozilla.com> edunham <edunham@mozilla.com> +Ed Barnard <eabarnard@gmail.com> Eduard-Mihai Burtescu <edy.burt@gmail.com> Eduardo Bautista <me@eduardobautista.com> <=> Eduardo Bautista <me@eduardobautista.com> <mail@eduardobautista.com> +Eduardo Broto <ebroto@tutanota.com> Elliott Slaughter <elliottslaughter@gmail.com> <eslaughter@mozilla.com> Elly Fong-Jones <elly@leptoquark.net> Eric Holk <eric.holk@gmail.com> <eholk@cs.indiana.edu> @@ -92,46 +163,82 @@ Eric Holk <eric.holk@gmail.com> <eholk@mozilla.com> Eric Holmes <eric@ejholmes.net> Eric Reed <ecreed@cs.washington.edu> <ereed@mozilla.com> Erick Tryzelaar <erick.tryzelaar@gmail.com> <etryzelaar@iqt.org> +Erik Desjardins <erikdesjardins@users.noreply.github.com> +Erik Jensen <erikjensen@rkjnsn.net> +Erin Power <xampprocky@gmail.com> Erin Power <xampprocky@gmail.com> <theaaronepower@gmail.com> Erin Power <xampprocky@gmail.com> <Aaronepower@users.noreply.github.com> +Esteban Küber <esteban@kuber.com.ar> Esteban Küber <esteban@kuber.com.ar> <esteban@commure.com> Esteban Küber <esteban@kuber.com.ar> <estebank@users.noreply.github.com> Esteban Küber <esteban@kuber.com.ar> <github@kuber.com.ar> +Ethan Dagner <napen123@gmail.com> Evgeny Sologubov +F001 <changchun.fan@qq.com> +Fabian Kössel <fkjogu@users.noreply.github.com> Falco Hirschenberger <falco.hirschenberger@gmail.com> <hirschen@itwm.fhg.de> Felix S. Klock II <pnkfelix@pnkfx.org> Felix S Klock II <pnkfelix@pnkfx.org> +Félix Saparelli <felix@passcod.name> Flaper Fesp <flaper87@gmail.com> +Florian Berger <fbergr@gmail.com> Florian Wilkens <mrfloya_github@outlook.com> Florian Wilkens <floya@live.de> +François Mockers <mockersf@gmail.com> Frank Steffahn <fdsteffahn@gmail.com> <frank.steffahn@stu.uni-kiel.de> +Fridtjof Stoldt <xFrednet@gmail.com> +fukatani <nannyakannya@gmail.com> +Fuqiao Xue <xfq.free@gmail.com> Gareth Daniel Smith <garethdanielsmith@gmail.com> gareth <gareth@gareth-N56VM.(none)> Gareth Daniel Smith <garethdanielsmith@gmail.com> Gareth Smith <garethdanielsmith@gmail.com> +Gauri Kholkar <f2013002@goa.bits-pilani.ac.in> Georges Dubus <georges.dubus@gmail.com> <georges.dubus@compiletoi.net> +Giles Cope <gilescope@gmail.com> +Glen De Cauwsemaecker <decauwsemaecker.glen@gmail.com> Graham Fawcett <graham.fawcett@gmail.com> Graham Fawcett <fawcett@uwindsor.ca> Graydon Hoare <graydon@pobox.com> Graydon Hoare <graydon@mozilla.com> +Greg V <greg@unrelenting.technology> +Gregor Peach <gregorpeach@gmail.com> +Grzegorz Bartoszek <grzegorz.bartoszek@thaumatec.com> +Guanqun Lu <guanqun.lu@gmail.com> Guillaume Gomez <guillaume1.gomez@gmail.com> Guillaume Gomez <guillaume1.gomez@gmail.com> ggomez <ggomez@ggo.ifr.lan> Guillaume Gomez <guillaume1.gomez@gmail.com> Guillaume Gomez <ggomez@ggo.ifr.lan> Guillaume Gomez <guillaume1.gomez@gmail.com> Guillaume Gomez <guillaume.gomez@huawei.com> +hamidreza kalbasi <hamidrezakalbasi@protonmail.com> Hanna Kruppe <hanna.kruppe@gmail.com> <robin.kruppe@gmail.com> Heather <heather@cynede.net> <Cynede@Gentoo.org> Heather <heather@cynede.net> <Heather@cynede.net> Herman J. Radtke III <herman@hermanradtke.com> Herman J. Radtke III <hermanradtke@gmail.com> Hirochika Matsumoto <git@hkmatsumoto.com> <matsujika@gmail.com> +Hrvoje Nikšić <hniksic@gmail.com> +Hsiang-Cheng Yang <rick68@users.noreply.github.com> Ian Jackson <ijackson@chiark.greenend.org.uk> <ian.jackson@citrix.com> Ian Jackson <ijackson@chiark.greenend.org.uk> <ijackson+github@slimy.greenend.org.uk> Ian Jackson <ijackson@chiark.greenend.org.uk> <iwj@xenproject.org> +Ibraheem Ahmed <ibrah1440@gmail.com> Ilyong Cho <ilyoan@gmail.com> inquisitivecrystal <22333129+inquisitivecrystal@users.noreply.github.com> +Irina Popa <irinagpopa@gmail.com> Ivan Ivaschenko <defuz.net@gmail.com> +ivan tkachenko <me@ratijas.tk> J. J. Weber <jjweber@gmail.com> +Jack Huey <jack.huey@umassmed.edu> +Jacob <jacob.macritchie@gmail.com> +Jacob Greenfield <xales@naveria.com> Jacob Pratt <jacob@jhpratt.dev> <the.z.cuber@gmail.com> +Jake Vossen <jake@vossen.dev> +Jakob Degen <jakob@degen.com> +Jakob Lautrup Nysom <jako3047@gmail.com> +Jakub Adam Wieczorek <jakub.adam.wieczorek@gmail.com> Jakub Adam Wieczorek <jakub.adam.wieczorek@gmail.com> <jakub.bukaj@yahoo.com> Jakub Adam Wieczorek <jakub.adam.wieczorek@gmail.com> <jakub@jakub.cc> Jakub Adam Wieczorek <jakub.adam.wieczorek@gmail.com> <jakubw@jakubw.net> +James [Undefined] <tpzker@thepuzzlemaker.info> James Deng <cnjamesdeng@gmail.com> <cnJamesDeng@gmail.com> James Hinshelwood <jameshinshelwood1@gmail.com> <james.hinshelwood@bigpayme.com> James Miller <bladeon@gmail.com> <james@aatch.net> James Perry <james.austin.perry@gmail.com> +James Sanderson <zofrex@gmail.com> +Jaro Fietz <jaro.fietz@gmx.de> Jason Fager <jfager@gmail.com> Jason Liquorish <jason@liquori.sh> <Bassetts@users.noreply.github.com> Jason Orendorff <jorendorff@mozilla.com> <jason.orendorff@gmail.com> @@ -140,33 +247,60 @@ Jason Toffaletti <toffaletti@gmail.com> Jason Toffaletti <jason@topsy.com> Jauhien Piatlicki <jauhien@gentoo.org> Jauhien Piatlicki <jpiatlicki@zertisa.com> Jay True <glacjay@gmail.com> Jeremy Letang <letang.jeremy@gmail.com> +Jeremy Sorensen <jeremy.a.sorensen@gmail.com> Jeremy Stucki <dev@jeremystucki.ch> <stucki.jeremy@gmail.com> Jeremy Stucki <dev@jeremystucki.ch> <jeremy@myelin.ch> Jeremy Stucki <dev@jeremystucki.ch> +Jerry Hardee <hardeejj9@gmail.com> +Jesús Rubio <jesusprubio@gmail.com> Jethro Beekman <github@jbeekman.nl> +Jian Zeng <knight42@mail.ustc.edu.cn> Jihyun Yu <j.yu@navercorp.com> <yjh0502@gmail.com> Jihyun Yu <j.yu@navercorp.com> jihyun <jihyun@nablecomm.com> Jihyun Yu <j.yu@navercorp.com> Jihyun Yu <jihyun@nclab.kaist.ac.kr> João Oliveira <hello@jxs.pt> joaoxsouls <joaoxsouls@gmail.com> +joboet <jonasboettiger@icloud.com> Johann Hofmann <git@johann-hofmann.com> Johann <git@johann-hofmann.com> John Clements <clements@racket-lang.org> <clements@brinckerhoff.org> John Hodge <acessdev@gmail.com> John Hodge <tpg@mutabah.net> +John Hörnvall <trolledwoods@gmail.com> John Kåre Alsaker <john.kare.alsaker@gmail.com> John Talling <inrustwetrust@users.noreply.github.com> +John Van Enk <vanenkj@gmail.com> +Jonas Tepe <jonasprogrammer@gmail.com> Jonathan Bailey <jbailey@mozilla.com> <jbailey@jbailey-20809.local> +Jonathan Chan Kwan Yin <sofe2038@gmail.com> +Jonathan L <Xmasreturns@users.noreply.github.com> Jonathan S <gereeter@gmail.com> Jonathan S <gereeter+code@gmail.com> +Jonathan Sieber <mail@strfry.org> Jonathan Turner <probata@hotmail.com> Jorge Aparicio <japaric@linux.com> <japaricious@gmail.com> +Josef Reinhard Brandl <mail@josefbrandl.de> +Joseph Dunne <jd@lambda.tech> Joseph Martin <pythoner6@gmail.com> +Joseph Richey <joerichey@google.com> +Joseph T. Lyons <JosephTLyons@gmail.com> Joseph T. Lyons <JosephTLyons@gmail.com> <josephtlyons@gmail.com> Joseph T. Lyons <JosephTLyons@gmail.com> <JosephTLyons@users.noreply.github.com> +Josh Cotton <jcotton42@outlook.com> +Josh Driver <keeperofdakeys@gmail.com> +Josh Holmer <jholmer.in@gmail.com> Joshua Nelson <jyn514@gmail.com> <joshua@yottadb.com> +Julian Knodt <julianknodt@gmail.com> jumbatm <jumbatm@gmail.com> <30644300+jumbatm@users.noreply.github.com> Junyoung Cho <june0.cho@samsung.com> Jyun-Yan You <jyyou.tw@gmail.com> <jyyou@cs.nctu.edu.tw> +Kalita Alexey <kalita.alexey@outlook.com> +Kampfkarren <boynedmaster@gmail.com> Kang Seonghoon <kang.seonghoon@mearie.org> <public+git@mearie.org> +Karim Snj <karim.snj@gmail.com> +Katze <binary@benary.org> Keegan McAllister <mcallister.keegan@gmail.com> <kmcallister@mozilla.com> +Kerem Kat <keremkat@gmail.com> Kevin Butler <haqkrs@gmail.com> +Kevin Jiang <kwj2104@columbia.edu> +Kornel Lesiński <kornel@geekhood.net> +Krishna Sai Veera Reddy <veerareddy@email.arizona.edu> Kyeongwoon Lee <kyeongwoon.lee@samsung.com> Kyle J Strand <batmanaod@gmail.com> <BatmanAoD@users.noreply.github.com> Kyle J Strand <batmanaod@gmail.com> <kyle.j.strand@gmail.com> @@ -176,57 +310,102 @@ Laurențiu Nicola <lnicola@dend.ro> lcnr <rust@lcnr.de> <bastian_kauschke@hotmail.de> Lee Jeffery <leejeffery@gmail.com> Lee Jeffery <lee@leejeffery.co.uk> Lee Wondong <wdlee91@gmail.com> +lengyijun <sjtu5140809011@gmail.com> Lennart Kudling <github@kudling.de> Léo Lanteri Thauvin <leseulartichaut@gmail.com> Léo Lanteri Thauvin <leseulartichaut@gmail.com> <38361244+LeSeulArtichaut@users.noreply.github.com> Léo Testard <leo.testard@gmail.com> +Leonardo Yvens <leoyvens@gmail.com> +Liigo Zhuang <liigo@qq.com> Lily Ballard <lily@ballards.net> <kevin@sb.org> Lindsey Kuper <lindsey@composition.al> <lindsey@rockstargirl.org> Lindsey Kuper <lindsey@composition.al> <lkuper@mozilla.com> +Liu Dingming <liudingming@bytedance.com> +Loo Maclin <loo.maclin@protonmail.com> +Loïc BRANSTETT <lolo.branstett@numericable.fr> +Lucy <luxx4x@protonmail.com> +Lukas H. <lukaramu@users.noreply.github.com> +Lukas Lueg <lukas.lueg@gmail.com> Luke Metz <luke.metz@students.olin.edu> Luqman Aden <me@luqman.ca> <laden@csclub.uwaterloo.ca> Luqman Aden <me@luqman.ca> <laden@mozilla.com> +Lzu Tao <taolzu@gmail.com> +Maik Klein <maikklein@googlemail.com> +Malo Jaffré <jaffre.malo@gmail.com> Manish Goregaokar <manishsmail@gmail.com> +Mara Bos <m-ou.se@m-ou.se> Marcell Pardavi <marcell.pardavi@gmail.com> +Marcus Klaas de Vries <mail@marcusklaas.nl> Margaret Meyerhofer <mmeyerho@andrew.cmu.edu> <mmeyerho@andrew> +Mark Mansi <markm@cs.wisc.edu> Mark Rousskov <mark.simulacrum@gmail.com> Mark Sinclair <mark.edward.x@gmail.com> Mark Sinclair <mark.edward.x@gmail.com> =Mark Sinclair <=125axel125@gmail.com> +Markus Legner <markus@legner.ch> Markus Westerlind <marwes91@gmail.com> Markus <marwes91@gmail.com> +Martin Carton <cartonmartin+git@gmail.com> +Martin Habovštiak <martin.habovstiak@gmail.com> Martin Hafskjold Thoresen <martinhath@gmail.com> Matej Lach <matej.lach@gmail.com> Matej Ľach <matej.lach@gmail.com> +Mateusz Mikuła <mati865@gmail.com> Mateusz Mikuła <mati865@gmail.com> <mati865@users.noreply.github.com> Mateusz Mikuła <mati865@gmail.com> <matti@marinelayer.io> Matt Brubeck <mbrubeck@limpet.net> <mbrubeck@cs.hmc.edu> Matthew Auld <matthew.auld@intel.com> +Matthew Jasper <mjjasper1@gmail.com> Matthew Kraai <kraai@ftbfs.org> Matthew Kraai <kraai@ftbfs.org> <matt.kraai@abbott.com> Matthew Kraai <kraai@ftbfs.org> <mkraai@its.jnj.com> Matthew McPherrin <matthew@mcpherrin.ca> <matt@mcpherrin.ca> +Matthew Tran <0e4ef622@gmail.com> Matthijs Hofstra <thiezz@gmail.com> +Max Sharnoff <github@max.sharnoff.org> +Max Wase <max.vvase@gmail.com> +Mazdak Farrokhzad <twingoow@gmail.com> +Meade Kincke <thedarkula2049@gmail.com> Melody Horn <melody@boringcactus.com> <mathphreak@gmail.com> +Mendes <pedro.mendes.26@gmail.com> +mental <m3nta1@yahoo.com> +mibac138 <5672750+mibac138@users.noreply.github.com> Michael Williams <m.t.williams@live.com> Michael Woerister <michaelwoerister@posteo> <michaelwoerister@gmail> Michael Woerister <michaelwoerister@posteo> <michaelwoerister@users.noreply.github.com> Michael Woerister <michaelwoerister@posteo> <michaelwoerister@posteo.net> +Michael Zhang <hmperson1@gmail.com> +Michał Krasnoborski <mkrdln@gmail.com> +Michiel De Muynck <michieldemuynck@gmail.com> Mickaël Raybaud-Roig <raybaudroigm@gmail.com> m-r-r <raybaudroigm@gmail.com> +Mikhail Babenko <misha-babenko@yandex.ru> +Milan Landaverde <milanlandaverde@gmail.com> +mjptree <michael.prantl@hotmail.de> Ms2ger <ms2ger@gmail.com> <Ms2ger@gmail.com> +msizanoen1 <qtmlabs@protonmail.com> Mukilan Thiagarajan <mukilanthiagarajan@gmail.com> +Nadrieril Feneanar <Nadrieril@users.noreply.github.com> NAKASHIMA, Makoto <makoto.nksm+github@gmail.com> <makoto.nksm@gmail.com> NAKASHIMA, Makoto <makoto.nksm+github@gmail.com> <makoto.nksm+github@gmail.com> +Nathan Ringo <remexre@gmail.com> Nathan West <Lucretiel@gmail.com> <lucretiel@gmail.com> +Nathan Whitaker <nathan.whitaker01@gmail.com> Nathan Wilson <wilnathan@gmail.com> +Nathaniel Hamovitz <18648574+nhamovitz@users.noreply.github.com> Nathaniel Herman <nherman@post.harvard.edu> Nathaniel Herman <nherman@college.harvard.edu> Neil Pankey <npankey@gmail.com> <neil@wire.im> +Ngo Iok Ui (Wu Yu Wei) <wusyong9104@gmail.com> +Nicholas Baron <nicholas.baron.ten@gmail.com> Nick Platt <platt.nicholas@gmail.com> +Niclas Schwarzlose <15schnic@gmail.com> +Nicolas Abram <abramlujan@gmail.com> Nicole Mazzuca <npmazzuca@gmail.com> Nif Ward <nif.ward@gmail.com> Nika Layzell <nika@thelayzells.com> <michael@thelayzells.com> +Nixon Enraght-Moony <nixon.emoony@gmail.com> +NODA Kai <nodakai@gmail.com> +oliver <16816606+o752d@users.noreply.github.com> Oliver Middleton <olliemail27@gmail.com> <ollie27@users.noreply.github.com> Oliver Scherer <oliver.schneider@kit.edu> <git-spam-no-reply9815368754983@oli-obk.de> Oliver Scherer <oliver.schneider@kit.edu> <git-spam9815368754983@oli-obk.de> Oliver Scherer <oliver.schneider@kit.edu> <github333195615777966@oli-obk.de> -Oliver Scherer <oliver.schneider@kit.edu> <github6541940@oli-obk.de> Oliver Scherer <oliver.schneider@kit.edu> <rust19446194516@oli-obk.de> Oliver Scherer <oliver.schneider@kit.edu> <git-no-reply-9879165716479413131@oli-obk.de> Oliver Scherer <oliver.schneider@kit.edu> <git1984941651981@oli-obk.de> @@ -236,76 +415,139 @@ Oliver Scherer <oliver.schneider@kit.edu> <oli-obk@users.noreply.github.com> Oliver Scherer <oliver.schneider@kit.edu> <public.oliver.schneider@kit.edu> Oliver Scherer <oliver.schneider@kit.edu> <obk8176014uqher834@olio-obk.de> Oliver Scherer <oliver.schneider@kit.edu> +Ömer Sinan Ağacan <omeragacan@gmail.com> +Ophir LOJKINE <pere.jobs@gmail.com> Ožbolt Menegatti <ozbolt.menegatti@gmail.com> gareins <ozbolt.menegatti@gmail.com> +Pankaj Chaudhary <pankajchaudhary172@gmail.com> Paul Faria <paul_faria@ultimatesoftware.com> Paul Faria <Nashenas88@gmail.com> Peer Aramillo Irizar <peer.aramillo.irizar@gmail.com> parir <peer.aramillo.irizar@gmail.com> Peter Elmers <peter.elmers@yahoo.com> <peter.elmers@rice.edu> Peter Liniker <peter.liniker+github@gmail.com> Phil Dawes <phil@phildawes.net> Phil Dawes <pdawes@drw.com> +Phil Hansch <dev@phansch.net> Philipp Brüschweiler <blei42@gmail.com> <blei42@gmail.com> Philipp Brüschweiler <blei42@gmail.com> <bruphili@student.ethz.ch> -Philipp Krones <hello@philkrones.com> flip1995 <hello@philkrones.com> +Philipp Krones <hello@philkrones.com> +Philipp Krones <hello@philkrones.com> <9744647+flip1995@users.noreply.github.com> Philipp Krones <hello@philkrones.com> <philipp.krones@embecosm.com> +Philipp Krones <hello@philkrones.com> <uwdkn@student.kit.edu> Philipp Matthias Schäfer <philipp.matthias.schaefer@posteo.de> +phosphorus <steepout@qq.com> +Pierre Krieger <pierre.krieger1708@gmail.com> pierwill <pierwill@users.noreply.github.com> <19642016+pierwill@users.noreply.github.com> +Pradyumna Rahul <prkinformed@gmail.com> Przemysław Wesołek <jest@go.art.pl> Przemek Wesołek <jest@go.art.pl> +r00ster <r00ster91@protonmail.com> Rafael Ávila de Espíndola <respindola@mozilla.com> Rafael Avila de Espindola <espindola@dream.(none)> +rail <12975677+rail-rain@users.noreply.github.com> Ralph Giles <giles@thaumas.net> Ralph Giles <giles@mozilla.com> Ramkumar Ramachandra <r@artagnon.com> <artagnon@gmail.com> +Raphaël Huchet <rap2hpoutre@users.noreply.github.com> +rChaser53 <tayoshizawa29@gmail.com> +Rémy Rakic <remy.rakic@gmail.com> +Rémy Rakic <remy.rakic@gmail.com> <remy.rakic+github@gmail.com> Renato Riccieri Santos Zannon <renato@rrsz.com.br> Richard Diamond <wichard@vitalitystudios.com> <wichard@hahbee.co> +Ricky Hosfelt <ricky@hosfelt.io> +Ritiek Malhotra <ritiekmalhotra123@gmail.com> Rob Arnold <robarnold@cs.cmu.edu> Rob Arnold <robarnold@cs.cmu.edu> Rob Arnold <robarnold@68-26-94-7.pools.spcsdns.net> Robert Foss <dev@robertfoss.se> robertfoss <dev@robertfoss.se> Robert Gawdzik <rgawdzik@hotmail.com> Robert Gawdzik ☢ <rgawdzik@hotmail.com> +Robert Habermeier <rphmeier@gmail.com> Robert Millar <robert.millar@cantab.net> +Roc Yu <rocyu@protonmail.com> Rohit Joshi <rohitjoshi@users.noreply.github.com> Rohit Joshi <rohit.joshi@capitalone.com> +Roxane Fruytier <roxane.fruytier@hotmail.com> +Rui <xiongmao86dev@sina.com> Russell Johnston <rpjohnst@gmail.com> +Rustin-Liu <rustin.liu@gmail.com> +Rusty Blitzerr <rusty.blitzerr@gmail.com> +RustyYato <krishna.sd.2012@gmail.com> Ruud van Asseldonk <dev@veniogames.com> Ruud van Asseldonk <ruuda@google.com> +Ryan Leung <rleungx@gmail.com> Ryan Scheel <ryan.havvy@gmail.com> +Ryan Sullivant <rsulli55@gmail.com> +Ryan Wiedemann <Ryan1729@gmail.com> S Pradeep Kumar <gohanpra@gmail.com> +Sam Radhakrishnan <sk09idm@gmail.com> +Scott McMurray <scottmcm@users.noreply.github.com> Scott Olson <scott@solson.me> Scott Olson <scott@scott-olson.org> Sean Gillespie <sean.william.g@gmail.com> swgillespie <sean.william.g@gmail.com> +Seiichi Uchida <seuchida@gmail.com> Seonghyun Kim <sh8281.kim@samsung.com> +Shohei Wada <pc@wada314.jp> +Shotaro Yamada <sinkuu@sinkuu.xyz> +Shotaro Yamada <sinkuu@sinkuu.xyz> <sinkuu@users.noreply.github.com> Shyam Sundar B <shyambaskaran@outlook.com> Simon Barber-Dueck <sbarberdueck@gmail.com> Simon BD <simon@server> Simon Sapin <simon@exyr.org> <simon.sapin@exyr.org> Simonas Kazlauskas <git@kazlauskas.me> Simonas Kazlauskas <github@kazlauskas.me> +Siva Prasad <sivaauturic@gmail.com> +Smittyvb <me@smitop.com> +Srinivas Reddy Thatiparthy <thatiparthysreenivas@gmail.com> +Stanislav Tkach <stanislav.tkach@gmail.com> startling <tdixon51793@gmail.com> Stepan Koltsov <stepan.koltsov@gmail.com> Stepan Koltsov <nga@yandex-team.ru> Steve Klabnik <steve@steveklabnik.com> Steven Fackler <sfackler@gmail.com> <sfackler@palantir.com> +Steven Malis <smmalis37@gmail.com> Steven Stewart-Gallus <sstewartgallus00@langara.bc.ca> <sstewartgallus00@mylangara.bc.ca> Stuart Pernsteiner <stuart@pernsteiner.org> Stuart Pernsteiner <spernsteiner@mozilla.com> +Suyash458 <suyash.behera458@gmail.com> +Sébastien Marie <semarie@online.fr> +Takashi Idobe <idobetakashi@gmail.com> +Takayuki Maeda <takoyaki0316@gmail.com> Tamir Duberstein <tamird@gmail.com> Tamir Duberstein <tamird@squareup.com> +Tatsuyuki Ishi <ishitatsuyuki@gmail.com> Tero Hänninen <lgvz@users.noreply.github.com> Tero Hänninen <tejohann@kapsi.fi> +The8472 <git@infinite-source.de> Theo Belaire <theo.belaire@gmail.com> Theo Belaire <tyr.god.of.war.42@gmail.com> +Theodore Luo Wang <wangtheo662@gmail.com> Thiago Pontes <email@thiago.me> thiagopnts <thiagopnts@gmail.com> Thomas Bracht Laumann Jespersen <laumann.thomas@gmail.com> +Tibo Delor <delor.thibault@gmail.com> Ticki <Ticki@users.noreply.github.com> Ticki <@> Tim Brooks <brooks@cern.ch> Tim Brooks <tim.brooks@staples.com> Tim Chevalier <chevalier@alum.wellesley.edu> <catamorphism@gmail.com> +Tim Diekmann <t.diekmann.3dv@gmail.com> +Tim Hutt <tdhutt@gmail.com> Tim JIANG <p90eri@gmail.com> Tim Joseph Dumol <tim@timdumol.com> +Timothy Maloney <tmaloney@pdx.edu> +Tomas Koutsky <tomas@stepnivlk.net> +Torsten Weber <TorstenWeber12@gmail.com> Torsten Weber <TorstenWeber12@gmail.com> <torstenweber12@gmail.com> Trevor Spiteri <tspiteri@ieee.org> <trevor.spiteri@um.edu.mt> Ty Overby <ty@pre-alpha.com> Tyler Mandry <tmandry@gmail.com> <tmandry@google.com> +Tyler Ruckinger <t.ruckinger@gmail.com> Ulrik Sverdrup <bluss@users.noreply.github.com> bluss <bluss@users.noreply.github.com> Ulrik Sverdrup <bluss@users.noreply.github.com> bluss <bluss> Ulrik Sverdrup <bluss@users.noreply.github.com> Ulrik Sverdrup <root@localhost> Vadim Petrochenkov <vadim.petrochenkov@gmail.com> Vadim Petrochenkov <vadim.petrochenkov@gmail.com> petrochenkov <vadim.petrochenkov@gmail.com> +Val Markovic <val@markovic.io> +Valerii Lashmanov <vflashm@gmail.com> Vitali Haravy <HumaneProgrammer@gmail.com> Vitali Haravy <humaneprogrammer@gmail.com> +Vitaly Shukela <vi0oss@gmail.com> +Waffle Maybe <waffle.lapkin@gmail.com> Wesley Wiser <wwiser@gmail.com> <wesleywiser@microsoft.com> whitequark <whitequark@whitequark.org> William Ting <io@williamting.com> <william.h.ting@gmail.com> +Wim Looman <wim@nemo157.com> +Without Boats <woboats@gmail.com> +Without Boats <woboats@gmail.com> <boats@mozilla.com> +Xinye Tao <xy.tao@outlook.com> Xuefeng Wu <benewu@gmail.com> Xuefeng Wu <xfwu@thoughtworks.com> Xuefeng Wu <benewu@gmail.com> XuefengWu <benewu@gmail.com> York Xiang <bombless@126.com> Youngsoo Son <ysson83@gmail.com> <ysoo.son@samsung.com> +Youngsuk Kim <joseph942010@gmail.com> +Yuki Okushi <jtitor@2k36.org> Yuki Okushi <jtitor@2k36.org> <huyuumi.dev@gmail.com> Yuki Okushi <jtitor@2k36.org> <yuki.okushi@huawei.com> +Yuning Zhang <codeworm96@outlook.com> Zach Pomerantz <zmp@umich.edu> Zack Corr <zack@z0w0.me> <zackcorr95@gmail.com> Zack Slayton <zack.slayton@gmail.com> From 3191d27f48d1434877303357ab1ae5b5128d0f6a Mon Sep 17 00:00:00 2001 From: Caio <c410.f3r@gmail.com> Date: Thu, 7 Apr 2022 08:13:41 -0300 Subject: [PATCH 3/7] Kickstart the inner usage of macro_metavar_expr --- compiler/rustc_expand/src/expand.rs | 4 +- compiler/rustc_expand/src/lib.rs | 3 +- library/core/src/lib.rs | 1 + library/core/src/tuple.rs | 140 +++++----------------------- 4 files changed, 28 insertions(+), 120 deletions(-) diff --git a/compiler/rustc_expand/src/expand.rs b/compiler/rustc_expand/src/expand.rs index c3f7f4f27e54c..9b224a733568b 100644 --- a/compiler/rustc_expand/src/expand.rs +++ b/compiler/rustc_expand/src/expand.rs @@ -83,9 +83,7 @@ macro_rules! ast_fragments { } match self { $($(AstFragment::$Kind(ast) => ast.extend(placeholders.iter().flat_map(|id| { - // We are repeating through arguments with `many`, to do that we have to - // mention some macro variable from those arguments even if it's not used. - macro _repeating($flat_map_ast_elt) {} + ${ignore(flat_map_ast_elt)} placeholder(AstFragmentKind::$Kind, *id, None).$make_ast() })),)?)* _ => panic!("unexpected AST fragment kind") diff --git a/compiler/rustc_expand/src/lib.rs b/compiler/rustc_expand/src/lib.rs index cd5bb93de65bd..21078f79f634a 100644 --- a/compiler/rustc_expand/src/lib.rs +++ b/compiler/rustc_expand/src/lib.rs @@ -1,3 +1,4 @@ +#![allow(rustc::potential_query_instability)] #![feature(associated_type_bounds)] #![feature(associated_type_defaults)] #![feature(crate_visibility_modifier)] @@ -5,12 +6,12 @@ #![feature(if_let_guard)] #![feature(let_chains)] #![feature(let_else)] +#![feature(macro_metavar_expr)] #![feature(proc_macro_diagnostic)] #![feature(proc_macro_internals)] #![feature(proc_macro_span)] #![feature(try_blocks)] #![recursion_limit = "256"] -#![allow(rustc::potential_query_instability)] #[macro_use] extern crate rustc_macros; diff --git a/library/core/src/lib.rs b/library/core/src/lib.rs index 660f6d92fe184..6546a5244fd03 100644 --- a/library/core/src/lib.rs +++ b/library/core/src/lib.rs @@ -181,6 +181,7 @@ #![feature(intrinsics)] #![feature(lang_items)] #![feature(link_llvm_intrinsics)] +#![feature(macro_metavar_expr)] #![feature(min_specialization)] #![feature(mixed_integer_ops)] #![feature(must_not_suspend)] diff --git a/library/core/src/tuple.rs b/library/core/src/tuple.rs index 9f8a3a1de4201..fdf58c50e4863 100644 --- a/library/core/src/tuple.rs +++ b/library/core/src/tuple.rs @@ -5,21 +5,17 @@ use crate::cmp::*; // macro for implementing n-ary tuple functions and operations macro_rules! tuple_impls { - ($( - $Tuple:ident { - $(($idx:tt) -> $T:ident)+ - } - )+) => { + ( $( $Tuple:ident( $( $T:ident )+ ) )+ ) => { $( #[stable(feature = "rust1", since = "1.0.0")] impl<$($T:PartialEq),+> PartialEq for ($($T,)+) where last_type!($($T,)+): ?Sized { #[inline] fn eq(&self, other: &($($T,)+)) -> bool { - $(self.$idx == other.$idx)&&+ + $( ${ignore(T)} self.${index()} == other.${index()} )&&+ } #[inline] fn ne(&self, other: &($($T,)+)) -> bool { - $(self.$idx != other.$idx)||+ + $( ${ignore(T)} self.${index()} != other.${index()} )||+ } } @@ -28,26 +24,28 @@ macro_rules! tuple_impls { #[stable(feature = "rust1", since = "1.0.0")] impl<$($T:PartialOrd + PartialEq),+> PartialOrd for ($($T,)+) - where last_type!($($T,)+): ?Sized { + where + last_type!($($T,)+): ?Sized + { #[inline] fn partial_cmp(&self, other: &($($T,)+)) -> Option<Ordering> { - lexical_partial_cmp!($(self.$idx, other.$idx),+) + lexical_partial_cmp!($( ${ignore(T)} self.${index()}, other.${index()} ),+) } #[inline] fn lt(&self, other: &($($T,)+)) -> bool { - lexical_ord!(lt, $(self.$idx, other.$idx),+) + lexical_ord!(lt, $( ${ignore(T)} self.${index()}, other.${index()} ),+) } #[inline] fn le(&self, other: &($($T,)+)) -> bool { - lexical_ord!(le, $(self.$idx, other.$idx),+) + lexical_ord!(le, $( ${ignore(T)} self.${index()}, other.${index()} ),+) } #[inline] fn ge(&self, other: &($($T,)+)) -> bool { - lexical_ord!(ge, $(self.$idx, other.$idx),+) + lexical_ord!(ge, $( ${ignore(T)} self.${index()}, other.${index()} ),+) } #[inline] fn gt(&self, other: &($($T,)+)) -> bool { - lexical_ord!(gt, $(self.$idx, other.$idx),+) + lexical_ord!(gt, $( ${ignore(T)} self.${index()}, other.${index()} ),+) } } @@ -55,7 +53,7 @@ macro_rules! tuple_impls { impl<$($T:Ord),+> Ord for ($($T,)+) where last_type!($($T,)+): ?Sized { #[inline] fn cmp(&self, other: &($($T,)+)) -> Ordering { - lexical_cmp!($(self.$idx, other.$idx),+) + lexical_cmp!($( ${ignore(T)} self.${index()}, other.${index()} ),+) } } @@ -108,106 +106,16 @@ macro_rules! last_type { } tuple_impls! { - Tuple1 { - (0) -> A - } - Tuple2 { - (0) -> A - (1) -> B - } - Tuple3 { - (0) -> A - (1) -> B - (2) -> C - } - Tuple4 { - (0) -> A - (1) -> B - (2) -> C - (3) -> D - } - Tuple5 { - (0) -> A - (1) -> B - (2) -> C - (3) -> D - (4) -> E - } - Tuple6 { - (0) -> A - (1) -> B - (2) -> C - (3) -> D - (4) -> E - (5) -> F - } - Tuple7 { - (0) -> A - (1) -> B - (2) -> C - (3) -> D - (4) -> E - (5) -> F - (6) -> G - } - Tuple8 { - (0) -> A - (1) -> B - (2) -> C - (3) -> D - (4) -> E - (5) -> F - (6) -> G - (7) -> H - } - Tuple9 { - (0) -> A - (1) -> B - (2) -> C - (3) -> D - (4) -> E - (5) -> F - (6) -> G - (7) -> H - (8) -> I - } - Tuple10 { - (0) -> A - (1) -> B - (2) -> C - (3) -> D - (4) -> E - (5) -> F - (6) -> G - (7) -> H - (8) -> I - (9) -> J - } - Tuple11 { - (0) -> A - (1) -> B - (2) -> C - (3) -> D - (4) -> E - (5) -> F - (6) -> G - (7) -> H - (8) -> I - (9) -> J - (10) -> K - } - Tuple12 { - (0) -> A - (1) -> B - (2) -> C - (3) -> D - (4) -> E - (5) -> F - (6) -> G - (7) -> H - (8) -> I - (9) -> J - (10) -> K - (11) -> L - } + Tuple1(A) + Tuple2(A B) + Tuple3(A B C) + Tuple4(A B C D) + Tuple5(A B C D E) + Tuple6(A B C D E F) + Tuple7(A B C D E F G) + Tuple8(A B C D E F G H) + Tuple9(A B C D E F G H I) + Tuple10(A B C D E F G H I J) + Tuple11(A B C D E F G H I J K) + Tuple12(A B C D E F G H I J K L) } From 6a4b44426b7fd04592e618a93378510963ceda11 Mon Sep 17 00:00:00 2001 From: Chris Denton <christophersdenton@gmail.com> Date: Thu, 7 Apr 2022 20:15:16 +0100 Subject: [PATCH 4/7] Windows: Increase a pipe's buffer capacity to 64kb This brings it inline with typical Linux defaults: https://www.man7.org/linux/man-pages/man7/pipe.7.html --- library/std/src/sys/windows/pipe.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/library/std/src/sys/windows/pipe.rs b/library/std/src/sys/windows/pipe.rs index df4f1b24eec26..09d1dd55989e1 100644 --- a/library/std/src/sys/windows/pipe.rs +++ b/library/std/src/sys/windows/pipe.rs @@ -53,6 +53,9 @@ pub struct Pipes { /// with `OVERLAPPED` instances, but also works out ok if it's only ever used /// once at a time (which we do indeed guarantee). pub fn anon_pipe(ours_readable: bool, their_handle_inheritable: bool) -> io::Result<Pipes> { + // A 64kb pipe capacity is the same as a typical Linux default. + const PIPE_BUFFER_CAPACITY: u32 = 64 * 1024; + // Note that we specifically do *not* use `CreatePipe` here because // unfortunately the anonymous pipes returned do not support overlapped // operations. Instead, we create a "hopefully unique" name and create a @@ -91,8 +94,8 @@ pub fn anon_pipe(ours_readable: bool, their_handle_inheritable: bool) -> io::Res | c::PIPE_WAIT | reject_remote_clients_flag, 1, - 4096, - 4096, + PIPE_BUFFER_CAPACITY, + PIPE_BUFFER_CAPACITY, 0, ptr::null_mut(), ); From e0e64a89304de2b34dbafbc6cb354d2be9e67835 Mon Sep 17 00:00:00 2001 From: Jack O'Connor <oconnor663@gmail.com> Date: Thu, 7 Apr 2022 17:56:06 -0700 Subject: [PATCH 5/7] hide an #[allow] directive from the Arc::new_cyclic doc example --- library/alloc/src/sync.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/alloc/src/sync.rs b/library/alloc/src/sync.rs index f8b4d46ac105d..a19999cd72580 100644 --- a/library/alloc/src/sync.rs +++ b/library/alloc/src/sync.rs @@ -369,7 +369,7 @@ impl<T> Arc<T> { /// /// # Example /// ``` - /// #![allow(dead_code)] + /// # #![allow(dead_code)] /// use std::sync::{Arc, Weak}; /// /// struct Gadget { From 66b3ca0b7f66621e09c88f94f6c1151cc1aed845 Mon Sep 17 00:00:00 2001 From: bstrie <865233+bstrie@users.noreply.github.com> Date: Tue, 5 Apr 2022 17:47:40 -0400 Subject: [PATCH 6/7] Promote x86_64-unknown-none to Tier 2 --- .../host-x86_64/dist-various-2/Dockerfile | 1 + src/doc/rustc/src/platform-support.md | 2 +- .../platform-support/x86_64-unknown-none.md | 18 +++++++++++------- src/tools/build-manifest/src/main.rs | 1 + 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/ci/docker/host-x86_64/dist-various-2/Dockerfile b/src/ci/docker/host-x86_64/dist-various-2/Dockerfile index e363c4f79f9cf..a045666ca8aa5 100644 --- a/src/ci/docker/host-x86_64/dist-various-2/Dockerfile +++ b/src/ci/docker/host-x86_64/dist-various-2/Dockerfile @@ -111,6 +111,7 @@ ENV TARGETS=$TARGETS,nvptx64-nvidia-cuda ENV TARGETS=$TARGETS,armv7-unknown-linux-gnueabi ENV TARGETS=$TARGETS,armv7-unknown-linux-musleabi ENV TARGETS=$TARGETS,i686-unknown-freebsd +ENV TARGETS=$TARGETS,x86_64-unknown-none # As per https://bugs.launchpad.net/ubuntu/+source/gcc-defaults/+bug/1300211 # we need asm in the search path for gcc-8 (for gnux32) but not in the search path of the diff --git a/src/doc/rustc/src/platform-support.md b/src/doc/rustc/src/platform-support.md index 8fc5a0d312b06..32def67ed65e3 100644 --- a/src/doc/rustc/src/platform-support.md +++ b/src/doc/rustc/src/platform-support.md @@ -177,6 +177,7 @@ target | std | notes `x86_64-linux-android` | ✓ | 64-bit x86 Android `x86_64-pc-solaris` | ✓ | 64-bit Solaris 10/11, illumos `x86_64-unknown-linux-gnux32` | ✓ | 64-bit Linux (x32 ABI) (kernel 4.15, glibc 2.27) +[`x86_64-unknown-none`](platform-support/x86_64-unknown-none.md) | * | Freestanding/bare-metal x86_64, softfloat `x86_64-unknown-redox` | ✓ | Redox OS [Fortanix ABI]: https://edp.fortanix.com/ @@ -291,7 +292,6 @@ target | std | host | notes `x86_64-unknown-haiku` | ✓ | ✓ | 64-bit Haiku `x86_64-unknown-hermit` | ✓ | | HermitCore `x86_64-unknown-l4re-uclibc` | ? | | -[`x86_64-unknown-none`](platform-support/x86_64-unknown-none.md) | * | | Freestanding/bare-metal x86_64, softfloat `x86_64-unknown-none-linuxkernel` | * | | Linux kernel modules [`x86_64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | 64-bit OpenBSD `x86_64-unknown-uefi` | * | | 64-bit UEFI diff --git a/src/doc/rustc/src/platform-support/x86_64-unknown-none.md b/src/doc/rustc/src/platform-support/x86_64-unknown-none.md index afcc48003b936..bd5fd1d050230 100644 --- a/src/doc/rustc/src/platform-support/x86_64-unknown-none.md +++ b/src/doc/rustc/src/platform-support/x86_64-unknown-none.md @@ -1,6 +1,6 @@ # `x86_64-unknown-none` -**Tier: 3** +**Tier: 2** Freestanding/bare-metal x86-64 binaries in ELF format: firmware, kernels, etc. @@ -32,7 +32,7 @@ You can change this using the `-C code-model=` option to rustc. On `x86_64-unknown-none`, `extern "C"` uses the [standard System V calling convention](https://gitlab.com/x86-psABIs/x86-64-ABI), without red zones. -This target generated binaries in the ELF format. Any alternate formats or +This target generates binaries in the ELF format. Any alternate formats or special considerations for binary layout will require linker options or linker scripts. @@ -49,15 +49,19 @@ target = ["x86_64-unknown-none"] ## Building Rust programs -Rust does not yet ship pre-compiled artifacts for this target. To compile for -this target, you will either need to build Rust with the target enabled (see -"Building the target" above), or build your own copy of `core` by using -`build-std` or similar. +Starting with Rust 1.62, precompiled artifacts are provided via `rustup`: + +```text +# install cross-compile toolchain +rustup target add x86_64-unknown-none +# target flag may be used with any cargo or rustc command +cargo build --target x86_64-unknown-none +``` ## Testing As `x86_64-unknown-none` supports a variety of different environments and does -not support `std`, this target does not support running the Rust testsuite. +not support `std`, this target does not support running the Rust test suite. ## Cross-compilation toolchains and C code diff --git a/src/tools/build-manifest/src/main.rs b/src/tools/build-manifest/src/main.rs index c682879e32330..a1dfbef0601ad 100644 --- a/src/tools/build-manifest/src/main.rs +++ b/src/tools/build-manifest/src/main.rs @@ -152,6 +152,7 @@ static TARGETS: &[&str] = &[ "x86_64-unknown-linux-gnux32", "x86_64-unknown-linux-musl", "x86_64-unknown-netbsd", + "x86_64-unknown-none", "x86_64-unknown-redox", "x86_64-unknown-hermit", ]; From 06788fd7a4c89479dfe28c1e42410778adf41eab Mon Sep 17 00:00:00 2001 From: Cyborus04 <87248184+Cyborus04@users.noreply.github.com> Date: Fri, 1 Apr 2022 20:07:28 -0400 Subject: [PATCH 7/7] add `<[[T; N]]>::flatten`, `<[[T; N]]>::flatten_mut`, and `Vec::<[T; N]>::into_flattened` --- library/alloc/src/lib.rs | 1 + library/alloc/src/vec/mod.rs | 45 +++++++++++++++++++ library/alloc/tests/lib.rs | 1 + library/alloc/tests/vec.rs | 7 +++ library/core/src/slice/mod.rs | 82 +++++++++++++++++++++++++++++++++++ library/core/tests/lib.rs | 1 + library/core/tests/slice.rs | 16 +++++++ 7 files changed, 153 insertions(+) diff --git a/library/alloc/src/lib.rs b/library/alloc/src/lib.rs index 065d071a2e360..69ca33cfc2265 100644 --- a/library/alloc/src/lib.rs +++ b/library/alloc/src/lib.rs @@ -131,6 +131,7 @@ #![feature(trusted_len)] #![feature(trusted_random_access)] #![feature(try_trait_v2)] +#![feature(unchecked_math)] #![feature(unicode_internals)] #![feature(unsize)] // diff --git a/library/alloc/src/vec/mod.rs b/library/alloc/src/vec/mod.rs index 0b62622de819e..74bcac2b5414d 100644 --- a/library/alloc/src/vec/mod.rs +++ b/library/alloc/src/vec/mod.rs @@ -2274,6 +2274,51 @@ impl<T: Clone, A: Allocator> Vec<T, A> { } } +impl<T, A: Allocator, const N: usize> Vec<[T; N], A> { + /// Takes a `Vec<[T; N]>` and flattens it into a `Vec<T>`. + /// + /// # Panics + /// + /// Panics if the length of the resulting vector would overflow a `usize`. + /// + /// This is only possible when flattening a vector of arrays of zero-sized + /// types, and thus tends to be irrelevant in practice. If + /// `size_of::<T>() > 0`, this will never panic. + /// + /// # Examples + /// + /// ``` + /// #![feature(slice_flatten)] + /// + /// let mut vec = vec![[1, 2, 3], [4, 5, 6], [7, 8, 9]]; + /// assert_eq!(vec.pop(), Some([7, 8, 9])); + /// + /// let mut flattened = vec.into_flattened(); + /// assert_eq!(flattened.pop(), Some(6)); + /// ``` + #[unstable(feature = "slice_flatten", issue = "95629")] + pub fn into_flattened(self) -> Vec<T, A> { + let (ptr, len, cap, alloc) = self.into_raw_parts_with_alloc(); + let (new_len, new_cap) = if mem::size_of::<T>() == 0 { + (len.checked_mul(N).expect("vec len overflow"), usize::MAX) + } else { + // SAFETY: + // - `cap * N` cannot overflow because the allocation is already in + // the address space. + // - Each `[T; N]` has `N` valid elements, so there are `len * N` + // valid elements in the allocation. + unsafe { (len.unchecked_mul(N), cap.unchecked_mul(N)) } + }; + // SAFETY: + // - `ptr` was allocated by `self` + // - `ptr` is well-aligned because `[T; N]` has the same alignment as `T`. + // - `new_cap` refers to the same sized allocation as `cap` because + // `new_cap * size_of::<T>()` == `cap * size_of::<[T; N]>()` + // - `len` <= `cap`, so `len * N` <= `cap * N`. + unsafe { Vec::<T, A>::from_raw_parts_in(ptr.cast(), new_len, new_cap, alloc) } + } +} + // This code generalizes `extend_with_{element,default}`. trait ExtendWith<T> { fn next(&mut self) -> T; diff --git a/library/alloc/tests/lib.rs b/library/alloc/tests/lib.rs index abce47e5afe1a..16ceb8e373dcb 100644 --- a/library/alloc/tests/lib.rs +++ b/library/alloc/tests/lib.rs @@ -38,6 +38,7 @@ #![feature(const_str_from_utf8)] #![feature(nonnull_slice_from_raw_parts)] #![feature(panic_update_hook)] +#![feature(slice_flatten)] use std::collections::hash_map::DefaultHasher; use std::hash::{Hash, Hasher}; diff --git a/library/alloc/tests/vec.rs b/library/alloc/tests/vec.rs index 19e39ebf910b5..bc1397146dda9 100644 --- a/library/alloc/tests/vec.rs +++ b/library/alloc/tests/vec.rs @@ -2408,3 +2408,10 @@ fn test_extend_from_within_panicing_clone() { assert_eq!(count.load(Ordering::SeqCst), 4); } + +#[test] +#[should_panic = "vec len overflow"] +fn test_into_flattened_size_overflow() { + let v = vec![[(); usize::MAX]; 2]; + let _ = v.into_flattened(); +} diff --git a/library/core/src/slice/mod.rs b/library/core/src/slice/mod.rs index 77bf5f9dc34e3..e76c31635eae5 100644 --- a/library/core/src/slice/mod.rs +++ b/library/core/src/slice/mod.rs @@ -3994,6 +3994,88 @@ impl<T> [T] { } } +#[cfg(not(bootstrap))] +impl<T, const N: usize> [[T; N]] { + /// Takes a `&[[T; N]]`, and flattens it to a `&[T]`. + /// + /// # Panics + /// + /// This panics if the length of the resulting slice would overflow a `usize`. + /// + /// This is only possible when flattening a slice of arrays of zero-sized + /// types, and thus tends to be irrelevant in practice. If + /// `size_of::<T>() > 0`, this will never panic. + /// + /// # Examples + /// + /// ``` + /// #![feature(slice_flatten)] + /// + /// assert_eq!([[1, 2, 3], [4, 5, 6]].flatten(), &[1, 2, 3, 4, 5, 6]); + /// + /// assert_eq!( + /// [[1, 2, 3], [4, 5, 6]].flatten(), + /// [[1, 2], [3, 4], [5, 6]].flatten(), + /// ); + /// + /// let slice_of_empty_arrays: &[[i32; 0]] = &[[], [], [], [], []]; + /// assert!(slice_of_empty_arrays.flatten().is_empty()); + /// + /// let empty_slice_of_arrays: &[[u32; 10]] = &[]; + /// assert!(empty_slice_of_arrays.flatten().is_empty()); + /// ``` + #[unstable(feature = "slice_flatten", issue = "95629")] + pub fn flatten(&self) -> &[T] { + let len = if crate::mem::size_of::<T>() == 0 { + self.len().checked_mul(N).expect("slice len overflow") + } else { + // SAFETY: `self.len() * N` cannot overflow because `self` is + // already in the address space. + unsafe { self.len().unchecked_mul(N) } + }; + // SAFETY: `[T]` is layout-identical to `[T; N]` + unsafe { from_raw_parts(self.as_ptr().cast(), len) } + } + + /// Takes a `&mut [[T; N]]`, and flattens it to a `&mut [T]`. + /// + /// # Panics + /// + /// This panics if the length of the resulting slice would overflow a `usize`. + /// + /// This is only possible when flattening a slice of arrays of zero-sized + /// types, and thus tends to be irrelevant in practice. If + /// `size_of::<T>() > 0`, this will never panic. + /// + /// # Examples + /// + /// ``` + /// #![feature(slice_flatten)] + /// + /// fn add_5_to_all(slice: &mut [i32]) { + /// for i in slice { + /// *i += 5; + /// } + /// } + /// + /// let mut array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; + /// add_5_to_all(array.flatten_mut()); + /// assert_eq!(array, [[6, 7, 8], [9, 10, 11], [12, 13, 14]]); + /// ``` + #[unstable(feature = "slice_flatten", issue = "95629")] + pub fn flatten_mut(&mut self) -> &mut [T] { + let len = if crate::mem::size_of::<T>() == 0 { + self.len().checked_mul(N).expect("slice len overflow") + } else { + // SAFETY: `self.len() * N` cannot overflow because `self` is + // already in the address space. + unsafe { self.len().unchecked_mul(N) } + }; + // SAFETY: `[T]` is layout-identical to `[T; N]` + unsafe { from_raw_parts_mut(self.as_mut_ptr().cast(), len) } + } +} + trait CloneFromSpec<T> { fn spec_clone_from(&mut self, src: &[T]); } diff --git a/library/core/tests/lib.rs b/library/core/tests/lib.rs index 5f90a76ab74ee..e995565529584 100644 --- a/library/core/tests/lib.rs +++ b/library/core/tests/lib.rs @@ -93,6 +93,7 @@ #![feature(const_array_from_ref)] #![feature(const_slice_from_ref)] #![feature(waker_getters)] +#![feature(slice_flatten)] #![deny(unsafe_op_in_unsafe_fn)] extern crate test; diff --git a/library/core/tests/slice.rs b/library/core/tests/slice.rs index 798fcc3dfde97..ada479147db95 100644 --- a/library/core/tests/slice.rs +++ b/library/core/tests/slice.rs @@ -2504,3 +2504,19 @@ fn test_slice_from_ptr_range() { assert_eq!(slice::from_ptr_range(range), &arr); } } + +#[test] +#[cfg(not(bootstrap))] +#[should_panic = "slice len overflow"] +fn test_flatten_size_overflow() { + let x = &[[(); usize::MAX]; 2][..]; + let _ = x.flatten(); +} + +#[test] +#[cfg(not(bootstrap))] +#[should_panic = "slice len overflow"] +fn test_flatten_mut_size_overflow() { + let x = &mut [[(); usize::MAX]; 2][..]; + let _ = x.flatten_mut(); +}