CONTRIBUTORS | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++- doc/asm.html | 8 ++++---- doc/go1.17.html | 89 +++++++++++++++++++++++++++++++++++------------------ doc/go_spec.html | 1 + misc/cgo/testsanitizers/msan_test.go | 1 + misc/cgo/testsanitizers/testdata/msan8.go | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/cmd/dist/build.go | 7 ++++++- src/cmd/go/internal/modload/buildlist.go | 19 +++++++++++++++++++ src/cmd/go/internal/modload/init.go | 39 ++++++++++++++++++--------------------- src/cmd/go/testdata/script/mod_tidy_lazy_self.txt | 17 ++++++----------- src/cmd/go/testdata/script/mod_vendor_redundant_requirement.txt | 29 +++++++++++++++++++++++++++++ src/cmd/internal/obj/textflag.go | 4 ++-- src/io/fs/fs.go | 2 +- src/make.bash | 12 +++--------- src/make.bat | 20 ++++++++++---------- src/make.rc | 7 +------ src/net/http/transport_test.go | 77 +++++++++++++++++++++++++++++++++++------------------ src/os/exec/lp_windows_test.go | 3 --- src/runtime/cgo/gcc_traceback.c | 20 ++++++++++++++++++++ src/runtime/mfinal.go | 4 ++++ src/runtime/signal_windows.go | 11 +++++++++++ src/runtime/textflag.h | 4 ++-- diff --git a/CONTRIBUTORS b/CONTRIBUTORS index ee50a4c049aa674aa400b6ab99871438c53d37a9..1984d44c53773624a686c0af48bc1055d4fb0e5a 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -33,6 +33,7 @@ Aaron Jacobs Aaron Jensen Aaron Kemp Aaron Patterson +Aaron Sheah Aaron Stein Aaron Torres Aaron Zinman @@ -47,6 +48,7 @@ Adam Harvey Adam Kisala Adam Langley Adam Medzinski +Adam Mitha Adam Shannon Adam Shelton Adam Sindelar @@ -54,6 +56,8 @@ Adam Thomason Adam Williams Adam Woodbeck Adarsh Ravichandran +Adel Rodríguez +Adin Scannell Aditya Harindar Aditya Mukerjee Adrian Hesketh @@ -68,6 +72,7 @@ Afanasev Stanislav Agis Anastasopoulos Agniva De Sarker Ahmed W. Mones +Ahmet Aktürk Ahmet Alp Balkan Ahmet Soormally Ahmy Yulrizka @@ -92,11 +97,13 @@ Alberto Bertogli Alberto Donizetti Alberto García Hierro Alec Benzer +Alejandro García Montoro Aleksa Sarai Aleksandar Dezelin Aleksandr Lukinykh Aleksandr Razumov Alekseev Artem +Aleksei Tirman Alessandro Arzilli Alessandro Baffa Alex A Skinner @@ -165,6 +172,7 @@ Ali Rizvi-Santiago Aliaksandr Valialkin Alice Merrick Alif Rachmawadi +Allan Guwatudde Allan Simon Allen Li Alok Menghrajani @@ -172,6 +180,7 @@ Alwin Doss Aman Gupta Amarjeet Anand Amir Mohammad Saied +Amit Kumar Amr Mohammed Amrut Joshi An Long @@ -185,6 +194,7 @@ André Carvalho André Martins Andre Nathan Andrea Nodari +Andrea Simonini Andrea Spadaccini Andreas Auernhammer Andreas Jellinghaus @@ -244,6 +254,7 @@ Andy Pan Andy Walker Andy Wang Andy Williams +Andy Zhao Andzej Maciusovic Anfernee Yongkun Gui Angelo Bulfone @@ -269,6 +280,7 @@ Anton Kuklin Antonin Amand Antonio Antelo Antonio Bibiano +Antonio Garcia Antonio Huete Jimenez Antonio Murdaca Antonio Troina @@ -292,8 +304,10 @@ Artem Khvastunov Artem Kolin Arthur Fabre Arthur Khashaev +Artur M. Wolff Artyom Pervukhin Arvindh Rajesh Tamilmani +Ashish Bhate Ashish Gandhi Asim Shankar Assel Meher @@ -325,6 +339,7 @@ Baokun Lee Barnaby Keene Bartosz Grzybowski Bartosz Oler +Bassam Ojeil Bastian Ike Ben Burkert Ben Cartwright-Cox @@ -332,6 +347,7 @@ Ben Eitzen Ben Fried Ben Haines Ben Hoyt +Ben Hutchings Ben Kraft Ben Laurie Ben Lubar @@ -430,6 +446,7 @@ Carl Henrik Lunde Carl Jackson Carl Johnson Carl Mastrangelo +Carl Menezes Carl Shapiro Carlisia Campos Carlo Alberto Ferraris @@ -443,6 +460,7 @@ Carlos Iriarte Carlos Souza Carolyn Van Slyck Carrie Bynon +Carson Hoffman Cary Hull Case Nelson Casey Callendrello @@ -462,6 +480,7 @@ Charles Kenney Charles L. Dorian Charles Lee Charles Weill +Charlie Moog Charlotte Brandhorst-Satzkorn Chauncy Cullitan Chen Zhidong @@ -516,6 +535,7 @@ Christopher Nelson Christopher Nielsen Christopher Redden Christopher Swenson +Christopher Thomas <53317512+chrisssthomas@users.noreply.github.com> Christopher Wedgwood Christos Zoulas Christy Perez @@ -541,6 +561,8 @@ Cosmos Nicolaou Costin Chirvasuta Craig Citro Cristian Staretu +Cristo García +cui fliter Cuihtlauac ALVARADO Cuong Manh Le Curtis La Graff @@ -560,6 +582,7 @@ Dan Callahan Dan Harrington Dan Jacques Dan Johnson +Dan McArdle Dan Peterson Dan Pupius Dan Scales @@ -611,6 +634,7 @@ Dave Russell David Anderson David Barnett David Benjamin +David Black David Bond David Brophy David Bürgin <676c7473@gmail.com> @@ -654,6 +678,7 @@ Davor Kapsa Dean Eigenmann <7621705+decanus@users.noreply.github.com> Dean Prichard Deepak Jois +Deepak S Denis Bernard Denis Brandolini Denis Isaev @@ -676,8 +701,10 @@ Dhiru Kholia Dhruvdutt Jadhav Di Xiao Didier Spezia +Diego Medina Diego Siqueira Dieter Plaetinck +Dilyn Corner Dimitri Sokolyuk Dimitri Tcaciuc Dina Garmash @@ -714,6 +741,7 @@ Doug Fawley Douglas Danger Manley Drew Flower Drew Hintz +Drew Richardson Duco van Amstel Duncan Holm Dustin Carlino @@ -735,6 +763,7 @@ Egon Elbre Ehren Kret Eitan Adler Eivind Uggedal +El Mostafa Idrassi Elbert Fliek Eldar Rakhimberdin Elena Grahovac @@ -742,6 +771,7 @@ Eli Bendersky Elias Naur Elliot Morrison-Reed Ellison Leão +Elvina Yakubova Emerson Lin Emil Bektimirov Emil Hessman @@ -767,6 +797,7 @@ Eric Rescorla Eric Roshan-Eisner Eric Rutherford Eric Rykwalder +Eric Wang Erick Tryzelaar Erik Aigner Erik Dubbelboer @@ -778,6 +809,7 @@ Ernest Chiang Erwin Oegema Esko Luontola Ethan Burns +Ethan Hur Ethan Miller Euan Kemp Eugene Formanenko @@ -818,6 +850,7 @@ Felix Cornelius <9767036+fcornelius@users.noreply.github.com> Felix Geisendörfer Felix Kollmann Ferenc Szabo +Fernandez Ludovic Filip Gruszczyński Filip Haglund Filip Stanis @@ -858,6 +891,7 @@ Gabriel Nelle Gabriel Nicolas Avellaneda Gabriel Rosenhouse Gabriel Russell +Gabriel Vasile Gareth Paul Jones Garret Kelly Garrick Evans @@ -891,6 +925,8 @@ Gianguido Sora` Gideon Jan-Wessel Redelinghuys Giles Lean Giovanni Bajo +GitHub User @180909 (70465953) <734461790@qq.com> +GitHub User @6543 (24977596) <6543@obermui.de> GitHub User @aca (50316549) GitHub User @ajnirp (1688456) GitHub User @ajz01 (4744634) @@ -904,10 +940,12 @@ GitHub User @bontequero (2674999) GitHub User @cch123 (384546) GitHub User @chainhelen (7046329) GitHub User @chanxuehong (3416908) +GitHub User @Cluas (10056928) GitHub User @cncal (23520240) GitHub User @DQNEO (188741) GitHub User @Dreamacro (8615343) GitHub User @dupoxy (1143957) +GitHub User @EndlessCheng (7086966) GitHub User @erifan (31343225) GitHub User @esell (9735165) GitHub User @fatedier (7346661) @@ -916,12 +954,15 @@ GitHub User @geedchin (11672310) GitHub User @GrigoriyMikhalkin (3637857) GitHub User @hengwu0 (41297446) <41297446+hengwu0@users.noreply.github.com> GitHub User @hitzhangjie (3725760) +GitHub User @hqpko (13887251) GitHub User @itchyny (375258) GitHub User @jinmiaoluo (39730824) GitHub User @jopbrown (6345470) GitHub User @kazyshr (30496953) GitHub User @kc1212 (1093806) +GitHub User @komisan19 (18901496) GitHub User @Kropekk (13366453) +GitHub User @lhl2617 (33488131) GitHub User @linguohua (3434367) GitHub User @LotusFenn (13775899) GitHub User @ly303550688 (11519839) @@ -936,10 +977,14 @@ GitHub User @OlgaVlPetrova (44112727) GitHub User @pityonline (438222) GitHub User @po3rin (29445112) GitHub User @pokutuna (57545) +GitHub User @povsister (11040951) GitHub User @pytimer (17105586) +GitHub User @qcrao (7698088) GitHub User @ramenjuniti (32011829) GitHub User @saitarunreddy (21041941) +GitHub User @SataQiu (9354727) GitHub User @shogo-ma (9860598) +GitHub User @sivchari (55221074) GitHub User @skanehira (7888591) GitHub User @soolaugust (10558124) GitHub User @surechen (7249331) @@ -947,9 +992,12 @@ GitHub User @tatsumack (4510569) GitHub User @tell-k (26263) GitHub User @tennashi (10219626) GitHub User @uhei (2116845) +GitHub User @uji (49834542) +GitHub User @unbyte (5772358) GitHub User @uropek (39370426) GitHub User @utkarsh-extc (53217283) GitHub User @witchard (4994659) +GitHub User @wolf1996 (5901874) GitHub User @yah01 (12216890) GitHub User @yuanhh (1298735) GitHub User @zikaeroh (48577114) @@ -962,6 +1010,7 @@ Glenn Brown Glenn Lewis Gordon Klaus Gordon Tyler +Grace Han Graham King Graham Miller Grant Griffiths @@ -977,10 +1026,12 @@ Guilherme Caruso Guilherme Garnier Guilherme Goncalves Guilherme Rezende +Guilherme Souza <32180229+gqgs@users.noreply.github.com> Guillaume J. Charmes Guillaume Sottas Günther Noack Guobiao Mei +Guodong Li Guoliang Wang Gustav Paul Gustav Westling @@ -995,6 +1046,7 @@ HAMANO Tsukasa Han-Wen Nienhuys Hang Qian Hanjun Kim +Hanlin He Hanlin Shi Haoran Luo Haosdent Huang @@ -1026,18 +1078,19 @@ Herbie Ong Heschi Kreinick Hidetatsu Yaginuma Hilko Bengen +Himanshu Kishna Srivastava <28himanshu@gmail.com> Hiroaki Nakamura Hiromichi Ema Hironao OTSUBO Hiroshi Ioka Hitoshi Mitake Holden Huang -Songlin Jiang Hong Ruiqi Hongfei Tan Horacio Duran Horst Rutter Hossein Sheikh Attar +Hossein Zolfi Howard Zhang Hsin Tsao Hsin-Ho Yeh @@ -1054,11 +1107,14 @@ Ian Haken Ian Kent Ian Lance Taylor Ian Leue +Ian Mckay Ian Tay +Ian Woolf Ian Zapolsky Ibrahim AshShohail Icarus Sparry Iccha Sethi +Ichinose Shogo Idora Shinatose Ignacio Hagopian Igor Bernstein @@ -1068,6 +1124,7 @@ Igor Vashyst Igor Zhilianin Ikko Ashimine Illya Yalovyy +Ilya Chukov <56119080+Elias506@users.noreply.github.com> Ilya Sinelnikov Ilya Tocar INADA Naoki @@ -1122,6 +1179,7 @@ James Cowgill James Craig Burley James David Chalfant James Eady +James Fennell James Fysh James Gray James Hartig @@ -1178,6 +1236,7 @@ Jason Wangsadinata Javier Kohen Javier Revillas Javier Segura +Jay Chen Jay Conrod Jay Lee Jay Taylor @@ -1200,6 +1259,7 @@ Jeff Johnson Jeff R. Allen Jeff Sickel Jeff Wendling +Jeff Widman Jeffrey H Jelte Fennema Jens Frederich @@ -1210,6 +1270,7 @@ Jeremy Faller Jeremy Jackins Jeremy Jay Jeremy Schlatter +Jero Bado Jeroen Bobbeldijk Jeroen Simonetti Jérôme Doucet @@ -1251,6 +1312,8 @@ Joe Richey Joe Shaw Joe Sylve Joe Tsai +Joel Courtney +Joel Ferrier Joel Sing Joël Stemmer Joel Stemmer @@ -1260,7 +1323,9 @@ Johan Euphrosine Johan Jansson Johan Knutzen Johan Sageryd +Johannes Huning John Asmuth +John Bampton John Beisley John C Barstow John DeNero @@ -1269,6 +1334,7 @@ John Gibb John Gilik John Graham-Cumming John Howard Palevich +John Jago John Jeffery John Jenkins John Leidegren @@ -1320,6 +1386,7 @@ Josa Gesell Jose Luis Vázquez González Joseph Bonneau Joseph Holsten +Joseph Morag Josh Baum Josh Bleecher Snyder Josh Chorlton @@ -1327,12 +1394,14 @@ Josh Deprez Josh Goebel Josh Hoak Josh Holland +Josh Rickmar Josh Roppo Josh Varga Joshua Bezaleel Abednego Joshua Boelter Joshua Chase Joshua Crowgey +Joshua Harshman Joshua M. Clulow Joshua Rubin Josselin Costanzi @@ -1353,6 +1422,7 @@ Julie Qiu Julien Kauffmann Julien Salleyron Julien Schmidt +Julien Tant Julio Montes Jun Zhang Junchen Li @@ -1419,10 +1489,12 @@ Kenta Mori Kerollos Magdy Ketan Parmar Kevan Swanberg +Kevin Albertson Kevin Ballard Kevin Burke Kévin Dunglas Kevin Gillette +Kevin Herro Kevin Kirsche Kevin Klues Kevin Malachowski @@ -1457,6 +1529,7 @@ Koya IWAMURA Kris Kwiatkowski Kris Nova Kris Rousey +Krishna Birla Kristopher Watts Krzysztof Dąbrowski Kshitij Saraogi @@ -1480,6 +1553,7 @@ Lajos Papp Lakshay Garg Lann Martin Lanre Adelowo +Lapo Luchini Larry Clapp Larry Hosken Lars Jeppesen @@ -1496,6 +1570,7 @@ Leigh McCulloch Leo Antunes Leo Rudberg Leon Klingele +Leonard Wang Leonardo Comelli Leonel Quinteros Lev Shamardin @@ -1506,7 +1581,9 @@ Lily Chung Lingchao Xin Lion Yang Liz Rice +Lize Cai Lloyd Dewolf +Lluís Batlle i Rossell Lorenz Bauer Lorenz Brun Lorenz Nickel @@ -1531,6 +1608,7 @@ Lukasz Milewski Luke Champine Luke Curley Luke Granger-Brown +Luke Shumaker Luke Young Luna Duclos Luuk van Dijk @@ -1550,6 +1628,7 @@ Mal Curtis Manfred Touron Manigandan Dharmalingam Manish Goregaokar +Manlio Perillo Manoj Dayaram Mansour Rahimi Manu Garg @@ -1646,6 +1725,8 @@ Matt Joiner Matt Jones Matt Juran Matt Layher +Matt Masurka +Matt Pearring Matt Reiferson Matt Robenolt Matt Strong @@ -1659,9 +1740,12 @@ Matthew Denton Matthew Holt Matthew Horsnell Matthew Waters +Matthias Frei Matthieu Hauglustaine Matthieu Olivier Matthijs Kooijman +Mattias Appelgren +Mauricio Alvarado Max Drosdo.www Max Riveiro Max Schmitt @@ -1677,9 +1761,11 @@ Máximo Cuadros Ortiz Maxwell Krohn Maya Rashish Mayank Kumar +Mehrad Sadeghi <2012.linkinpark@gmail.com> Meir Fischer Meng Zhuo Mhd Sulhan +Mia Zhu Micah Stetson Michael Anthony Knyszek Michael Brandenburg @@ -1730,8 +1816,10 @@ Michal Franc Michał Łowicki Michal Pristas Michal Rostecki +Michal Stokluska Michalis Kargakis Michel Lespinasse +Michel Levieux Michele Di Pede Mickael Kerjean Mickey Reiss @@ -1790,7 +1878,9 @@ Muir Manders Mukesh Sharma Mura Li Mykhailo Lesyk +Nahum Shalman Naman Aggarwal +Naman Gera Nan Deng Nao Yonashiro Naoki Kanatani @@ -1818,6 +1908,7 @@ Neven Sajko Nevins Bartolomeo Niall Sheridan Nic Day +Nicholas Asimov Nicholas Katsaros Nicholas Maniscalco Nicholas Ng @@ -1847,6 +1938,7 @@ Nik Nyby Nikhil Benesch Nikita Gillmann Nikita Kryuchkov +Nikita Melekhin Nikita Vanyasin Niklas Schnelle Niko Dziemba @@ -1858,6 +1950,7 @@ Niranjan Godbole Nishanth Shanmugham Noah Campbell Noah Goldman +Noah Santschi-Cooney Noble Johnson Nodir Turakulov Noel Georgi @@ -1894,6 +1987,7 @@ Pablo Rozas Larraondo Pablo Santiago Blum de Aguiar Padraig Kitterick Pallat Anchaleechamaikorn +Pan Chenglong <1004907659@qq.com> Panos Georgiadis Pantelis Sampaziotis Paolo Giarrusso @@ -1947,6 +2041,7 @@ Paulo Casaretto Paulo Flabiano Smorigo Paulo Gomes Pavel Paulau +Pavel Watson Pavel Zinovkin Pavlo Sumkin Pawel Knap @@ -1954,6 +2049,8 @@ Pawel Szczur Paweł Szulik Pei Xian Chee Pei-Ming Wu +Pen Tree +Peng Gao Percy Wegmann Perry Abbott Petar Dambovaliev @@ -1992,6 +2089,7 @@ Philip Brown Philip Hofer Philip K. Warren Philip Nelson +Philipp Sauter Philipp Stephani Phillip Campbell <15082+phillc@users.noreply.github.com> Pierre Carru @@ -2007,6 +2105,7 @@ Poh Zi How Polina Osadcha Pontus Leitzler Povilas Versockas +Prajwal Koirala <16564273+Prajwal-Koirala@users.noreply.github.com> Prasanga Siripala Prasanna Swaminathan Prashant Agrawal @@ -2027,11 +2126,13 @@ Quim Muntal Quinn Slack Quinten Yearsley Quoc-Viet Nguyen +Rabin Gaire Radek Simko Radek Sohlich Radu Berinde Rafal Jeczalik Raghavendra Nagaraj +Rahul Bajaj Rahul Chaudhry Rahul Wadhwani Raif S. Naffah @@ -2041,12 +2142,14 @@ Rajender Reddy Kompally Ralph Corderoy Ramazan AYYILDIZ Ramesh Dharan +Randy Reddig Raph Levien Raphael Geronimi Raul Silvera Ravil Bikbulatov RaviTeja Pothana Ray Tung +Ray Wu Raymond Kazlauskas Rebecca Stambler Reilly Watson @@ -2066,6 +2169,7 @@ Richard Eric Gavaletz Richard Gibson Richard Miller Richard Musiol +Richard Pickering Richard Ulmer Richard Wilkes Rick Arnold @@ -2124,6 +2228,7 @@ Rowan Worth Rudi Kramer Rui Ueyama Ruixin Bao +Ruslan Andreev Ruslan Nigmatullin Russ Cox Russell Haering @@ -2141,6 +2246,7 @@ Ryan Seys Ryan Slade Ryan Zhang Ryoichi KATO +Ryoya Sekino Ryuji Iwata Ryuma Yoshida Ryuzo Yamamoto @@ -2176,8 +2282,10 @@ Sardorbek Pulatov Sascha Brawer Sasha Lionheart Sasha Sobol +Satoru Kitaguchi Scott Barron Scott Bell +Scott Cotton Scott Crunkleton Scott Ferguson Scott Lawrence @@ -2191,6 +2299,7 @@ Sean Chittenden Sean Christopherson Sean Dolphin Sean Harger +Sean Harrington Sean Hildebrand Sean Liao Sean Rees @@ -2212,6 +2321,7 @@ Sergey Dobrodey Sergey Frolov Sergey Glushchenko Sergey Ivanov +Sergey Kacheev Sergey Lukjanov Sergey Mishin Sergey Mudrik @@ -2223,6 +2333,7 @@ Serhat Giydiren Serhii Aheienko Seth Hoenig Seth Vargo +Shaba Abhiram Shahar Kohanim Shailesh Suryawanshi Shamil Garatuev @@ -2250,9 +2361,13 @@ Shivakumar GN Shivani Singhal Shivansh Rai Shivashis Padhi +Shoshin Nikita +Shota Sugiura Shubham Sharma +Shuhei Takahashi Shun Fan Silvan Jegen +Simão Gomes Viana Simarpreet Singh Simon Drake Simon Ferquel @@ -2267,13 +2382,16 @@ Sina Siadat Sjoerd Siebinga Sokolov Yura Song Gao +Song Lim Songjiayang +Songlin Jiang Soojin Nam Søren L. Hansen Sparrow Li Spencer Kocot Spencer Nelson Spencer Tung +Spenser Black Spring Mc Srdjan Petrovic Sridhar Venkatakrishnan @@ -2324,6 +2442,7 @@ Suyash Suzy Mueller Sven Almgren Sven Blumenstein +Sven Lee Sven Taute Sylvain Zimmer Syohei YOSHIDA @@ -2406,12 +2525,14 @@ Tiwei Bie Tobias Assarsson Tobias Columbus Tobias Klauser +Tobias Kohlbau Toby Burress Todd Kulesza Todd Neal Todd Wang Tom Anthony Tom Bergan +Tom Freudenberg Tom Heng Tom Lanyon Tom Levy @@ -2440,6 +2561,7 @@ Toshiki Shima Totoro W Travis Bischel Travis Cline +Trevor Dixon Trevor Strohman Trey Lawrence Trey Roessig @@ -2463,6 +2585,7 @@ Tzach Shabtay Tzu-Chiao Yeh Tzu-Jung Lee Udalov Max +Uddeshya Singh Ugorji Nwoke Ulf Holm Nielsen Ulrich Kunitz @@ -2475,6 +2598,7 @@ Vadim Grek Vadim Vygonets Val Polouchkine Valentin Vidic +Vaughn Iverson Vee Zhang Vega Garcia Luis Alfonso Venil Noronha @@ -2491,6 +2615,7 @@ Vincent Batts Vincent Vanackere Vinu Rajashekhar Vish Subramanian +Vishal Dalwadi Vishvananda Ishaya Visweswara R Vitaly Zdanevich @@ -2542,6 +2667,7 @@ Willem van der Schyff William Chan William Chang William Josephson +William Langford William Orr William Poussier Wisdom Omuya @@ -2550,6 +2676,7 @@ Xi Ruoyao Xia Bin Xiangdong Ji Xiaodong Liu +Xing Gao <18340825824@163.com> Xing Xing Xingqang Bai Xu Fei @@ -2571,6 +2698,7 @@ Yasha Bubnov Yasser Abdolmaleki Yasuharu Goto Yasuhiro Matsumoto +Yasutaka Shinzaki Yasuyuki Oka Yazen Shunnar Yestin Sun @@ -2583,14 +2711,18 @@ Yorman Arias Yoshiyuki Kanno Yoshiyuki Mineo Yosuke Akatsuka +Youfu Zhang Yu Heng Zhang Yu Xuan Zhang +Yu, Li-Yu Yuichi Kishimoto Yuichi Nishiwaki Yuji Yaginuma +Yuki Ito Yuki OKUSHI Yuki Yugui Sonoda Yukihiro Nishinaka <6elpinal@gmail.com> +YunQiang Su Yury Smolsky Yusuke Kagiwada Yuusei Kuwana @@ -2599,6 +2731,7 @@ Yves Junqueira Zac Bergquist Zach Bintliff Zach Gershman +Zach Hoffman Zach Jones Zachary Amsden Zachary Gershman @@ -2617,6 +2750,7 @@ Zhou Peng Ziad Hatahet Ziheng Liu Zorion Arrizabalaga +Zvonimir Pavlinovic Zyad A. Ali Максадбек Ахмедов Максим Федосеев diff --git a/doc/asm.html b/doc/asm.html index d5788000861a7afea9c621077dc49e849c2674f9..51f85eb94822a4a900bfbb205f5cbcc709e5a2f8 100644 --- a/doc/asm.html +++ b/doc/asm.html @@ -166,7 +166,7 @@ SB: Static base pointer: global symbols.
  • -SP: Stack pointer: top of stack. +SP: Stack pointer: the highest address within the local stack frame.
  • @@ -216,7 +216,7 @@

    The SP pseudo-register is a virtual stack pointer used to refer to frame-local variables and the arguments being prepared for function calls. -It points to the top of the local stack frame, so references should use negative offsets +It points to the highest address within the local stack frame, so references should use negative offsets in the range [−framesize, 0): x-8(SP), y-4(SP), and so on.

    @@ -409,7 +409,7 @@
    (For TEXT items.) Don't insert the preamble to check if the stack must be split. The frame for the routine, plus anything it calls, must fit in the -spare space at the top of the stack segment. +spare space remaining in the current stack segment. Used to protect routines such as the stack splitting code itself.
  • @@ -460,7 +460,7 @@
  • TOPFRAME = 2048
    (For TEXT items.) -Function is the top of the call stack. Traceback should stop at this function. +Function is the outermost frame of the call stack. Traceback should stop at this function.
  • diff --git a/doc/go1.17.html b/doc/go1.17.html index 48811e6b679747040d7c858161d18eb72b31f34f..b65d13a0403885892c9545eee49160582725b872 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -14,13 +14,13 @@ -

    DRAFT RELEASE NOTES — Introduction to Go 1.17

    +

    Introduction to Go 1.17

    - - Go 1.17 is not yet released. These are work-in-progress - release notes. Go 1.17 is expected to be released in August 2021. - + The latest Go release, version 1.17, arrives six months after Go 1.16. + Most of its changes are in the implementation of the toolchain, runtime, and libraries. + As always, the release maintains the Go 1 promise of compatibility. + We expect almost all Go programs to continue to compile and run as before.

    Changes to the language

    @@ -134,35 +134,54 @@

    Tools

    Go command

    -

    Lazy module loading

    + +

    Pruned module graphs in go 1.17 modules

    + If a module specifies go 1.17 or higher, the module + graph includes only the immediate dependencies of + other go 1.17 modules, not their full transitive + dependencies. (See Module graph pruning + for more detail.) +

    + +

    + For the go command to correctly resolve transitive imports using + the pruned module graph, the go.mod file for each module needs to + include more detail about the transitive dependencies relevant to that module. If a module specifies go 1.17 or higher in its - go.mod file, its transitive requirements are now loaded lazily, - avoiding the need to download or read go.mod files for - otherwise-irrelevant dependencies. To support lazy loading, in Go 1.17 modules - the go command maintains explicit requirements in - the go.mod file for every dependency that provides any package - transitively imported by any package or test within the module. - See the design - document for more detail. - + go.mod file, its go.mod file now contains an + explicit require + directive for every module that provides a transitively-imported package. + (In previous versions, the go.mod file typically only included + explicit requirements for directly-imported packages.) +

    + +

    + Since the expanded go.mod file needed for module graph pruning + includes all of the dependencies needed to load the imports of any package in + the main module, if the main module specifies + go 1.17 or higher the go tool no longer + reads (or even downloads) go.mod files for dependencies if they + are not needed in order to complete the requested command. + (See Lazy loading.)

    - Because the number of additional explicit requirements in the go.mod file may - be substantial, in a Go 1.17 module the newly-added requirements - on indirect dependencies are maintained in a - separate require block from the block containing direct - dependencies. + Because the number of explicit requirements may be substantially larger in an + expanded Go 1.17 go.mod file, the newly-added requirements + on indirect dependencies in a go 1.17 + module are maintained in a separate require block from the block + containing direct dependencies.

    - To facilitate the upgrade to lazy loading, the - go mod tidy subcommand now supports - a -go flag to set or change the go version in - the go.mod file. To enable lazy loading for an existing module - without changing the selected versions of its dependencies, run: + To facilitate the upgrade to Go 1.17 pruned module graphs, the + go mod tidy + subcommand now supports a -go flag to set or change + the go version in the go.mod file. To convert + the go.mod file for an existing module to Go 1.17 without + changing the selected versions of its dependencies, run:

    @@ -199,10 +218,10 @@   features.
     

    - The go mod graph subcommand also - supports the -go flag, which causes it to report the graph as - seen by the indicated Go version, showing dependencies that may otherwise be - pruned out by lazy loading. + The go mod graph + subcommand also supports the -go flag, which causes it to report + the graph as seen by the indicated Go version, showing dependencies that may + otherwise be pruned out.

    Module deprecation comments

    @@ -270,7 +289,8 @@

    vendor contents

    If the main module specifies go 1.17 or higher, - go mod vendor now annotates + go mod vendor + now annotates vendor/modules.txt with the go version indicated by each vendored module in its own go.mod file. The annotated version is used when building the module's packages from vendored source code. @@ -466,6 +486,15 @@ Go function values are not directly comparable, but this change could reveal bugs in code that uses reflect or unsafe.Pointer to bypass this language restriction and compare functions by code pointer. +

    + + + +

    + When the linker uses external linking mode, which is the default + when linking a program that uses cgo, and the linker is invoked + with a -I option, the option will now be passed to the + external linker as a -Wl,--dynamic-linker option.

    Core library

    diff --git a/doc/go_spec.html b/doc/go_spec.html index 0e14a1f3b63188cbb945f22ad8896eb0f9b35268..fd5fee46eb220c1111d8aa33853037f751d4bdbb 100644 --- a/doc/go_spec.html +++ b/doc/go_spec.html @@ -4329,6 +4329,7 @@
     s := make([]byte, 2, 4)
     s0 := (*[0]byte)(s)      // s0 != nil
    +s1 := (*[1]byte)(s[1:])  // &s1[0] == &s[1]
     s2 := (*[2]byte)(s)      // &s2[0] == &s[0]
     s4 := (*[4]byte)(s)      // panics: len([4]byte) > len(s)
     
    diff --git a/misc/cgo/testsanitizers/msan_test.go b/misc/cgo/testsanitizers/msan_test.go
    index 2a3494fbfc1d3f4eff846a0f9582440c49e1db97..5ee9947a58504faa5f94e22b6419a7c46e882948 100644
    --- a/misc/cgo/testsanitizers/msan_test.go
    +++ b/misc/cgo/testsanitizers/msan_test.go
    @@ -42,6 +42,7 @@ 		{src: "msan4.go"},
     		{src: "msan5.go"},
     		{src: "msan6.go"},
     		{src: "msan7.go"},
    +		{src: "msan8.go"},
     		{src: "msan_fail.go", wantErr: true},
     	}
     	for _, tc := range cases {
    diff --git a/misc/cgo/testsanitizers/testdata/msan8.go b/misc/cgo/testsanitizers/testdata/msan8.go
    new file mode 100644
    index 0000000000000000000000000000000000000000..1cb5c5677fa758711ae44a6d04e3fdcccbe6c00e
    --- /dev/null
    +++ b/misc/cgo/testsanitizers/testdata/msan8.go
    @@ -0,0 +1,109 @@
    +// Copyright 2021 The Go Authors. All rights reserved.
    +// Use of this source code is governed by a BSD-style
    +// license that can be found in the LICENSE file.
    +
    +package main
    +
    +/*
    +#include 
    +#include 
    +#include 
    +
    +#include 
    +
    +// cgoTracebackArg is the type of the argument passed to msanGoTraceback.
    +struct cgoTracebackArg {
    +	uintptr_t context;
    +	uintptr_t sigContext;
    +	uintptr_t* buf;
    +	uintptr_t max;
    +};
    +
    +// msanGoTraceback is registered as the cgo traceback function.
    +// This will be called when a signal occurs.
    +void msanGoTraceback(void* parg) {
    +	struct cgoTracebackArg* arg = (struct cgoTracebackArg*)(parg);
    +        arg->buf[0] = 0;
    +}
    +
    +// msanGoWait will be called with all registers undefined as far as
    +// msan is concerned. It just waits for a signal.
    +// Because the registers are msan-undefined, the signal handler will
    +// be invoked with all registers msan-undefined.
    +__attribute__((noinline))
    +void msanGoWait(unsigned long a1, unsigned long a2, unsigned long a3, unsigned long a4, unsigned long a5, unsigned long a6) {
    +	sigset_t mask;
    +
    +	sigemptyset(&mask);
    +        sigsuspend(&mask);
    +}
    +
    +// msanGoSignalThread is the thread ID of the msanGoLoop thread.
    +static pthread_t msanGoSignalThread;
    +
    +// msanGoSignalThreadSet is used to record that msanGoSignalThread
    +// has been initialized. This is accessed atomically.
    +static int32_t msanGoSignalThreadSet;
    +
    +// uninit is explicitly poisoned, so that we can make all registers
    +// undefined by calling msanGoWait.
    +static unsigned long uninit;
    +
    +// msanGoLoop loops calling msanGoWait, with the arguments passed
    +// such that msan thinks that they are undefined. msan permits
    +// undefined values to be used as long as they are not used to
    +// for conditionals or for memory access.
    +void msanGoLoop() {
    +	int i;
    +
    +	msanGoSignalThread = pthread_self();
    +        __atomic_store_n(&msanGoSignalThreadSet, 1, __ATOMIC_SEQ_CST);
    +
    +	// Force uninit to be undefined for msan.
    +	__msan_poison(&uninit, sizeof uninit);
    +	for (i = 0; i < 100; i++) {
    +		msanGoWait(uninit, uninit, uninit, uninit, uninit, uninit);
    +        }
    +}
    +
    +// msanGoReady returns whether msanGoSignalThread is set.
    +int msanGoReady() {
    +	return __atomic_load_n(&msanGoSignalThreadSet, __ATOMIC_SEQ_CST) != 0;
    +}
    +
    +// msanGoSendSignal sends a signal to the msanGoLoop thread.
    +void msanGoSendSignal() {
    +	pthread_kill(msanGoSignalThread, SIGWINCH);
    +}
    +*/
    +import "C"
    +
    +import (
    +	"runtime"
    +	"time"
    +)
    +
    +func main() {
    +	runtime.SetCgoTraceback(0, C.msanGoTraceback, nil, nil)
    +
    +	c := make(chan bool)
    +	go func() {
    +		defer func() { c <- true }()
    +		C.msanGoLoop()
    +	}()
    +
    +	for C.msanGoReady() == 0 {
    +		time.Sleep(time.Microsecond)
    +	}
    +
    +loop:
    +	for {
    +		select {
    +		case <-c:
    +			break loop
    +		default:
    +			C.msanGoSendSignal()
    +			time.Sleep(time.Microsecond)
    +		}
    +	}
    +}
    diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go
    index 1abb03bcc56b2a881df3b82fcd81481a28f173d1..bec17696f3040acd6f78750f3306c1d3bbeba102 100644
    --- a/src/cmd/dist/build.go
    +++ b/src/cmd/dist/build.go
    @@ -1263,13 +1263,18 @@ func cmdbootstrap() {
     	timelog("start", "dist bootstrap")
     	defer timelog("end", "dist bootstrap")
     
    -	var noBanner bool
    +	var noBanner, noClean bool
     	var debug bool
     	flag.BoolVar(&rebuildall, "a", rebuildall, "rebuild all")
     	flag.BoolVar(&debug, "d", debug, "enable debugging of bootstrap process")
     	flag.BoolVar(&noBanner, "no-banner", noBanner, "do not print banner")
    +	flag.BoolVar(&noClean, "no-clean", noClean, "print deprecation warning")
     
     	xflagparse(0)
    +
    +	if noClean {
    +		xprintf("warning: --no-clean is deprecated and has no effect; use 'go install std cmd' instead\n")
    +	}
     
     	// Set GOPATH to an internal directory. We shouldn't actually
     	// need to store files here, since the toolchain won't
    diff --git a/src/cmd/go/internal/modload/buildlist.go b/src/cmd/go/internal/modload/buildlist.go
    index 604a57b4373b28051b0fdf0235b1e52f9051d9c3..bf6956731676d39e66e74642f6a43b40607d619a 100644
    --- a/src/cmd/go/internal/modload/buildlist.go
    +++ b/src/cmd/go/internal/modload/buildlist.go
    @@ -191,6 +191,19 @@ 	}
     	return "", false
     }
     
    +// hasRedundantRoot returns true if the root list contains multiple requirements
    +// of the same module or a requirement on any version of the main module.
    +// Redundant requirements should be pruned, but they may influence version
    +// selection.
    +func (rs *Requirements) hasRedundantRoot() bool {
    +	for i, m := range rs.rootModules {
    +		if m.Path == Target.Path || (i > 0 && m.Path == rs.rootModules[i-1].Path) {
    +			return true
    +		}
    +	}
    +	return false
    +}
    +
     // Graph returns the graph of module requirements loaded from the current
     // root modules (as reported by RootModules).
     //
    @@ -882,6 +895,12 @@ 		// each path has only one version, so roots is also sorted by module path
     		// and (trivially) version.
     
     		if !rootsUpgraded {
    +			if cfg.BuildMod != "mod" {
    +				// The only changes to the root set (if any) were to remove duplicates.
    +				// The requirements are consistent (if perhaps redundant), so keep the
    +				// original rs to preserve its ModuleGraph.
    +				return rs, nil
    +			}
     			// The root set has converged: every root going into this iteration was
     			// already at its selected version, although we have have removed other
     			// (redundant) roots for the same path.
    diff --git a/src/cmd/go/internal/modload/init.go b/src/cmd/go/internal/modload/init.go
    index a8cbd9fe16d1862d673de85f4f9e301461ab07d3..45f724d5e3658f5d21d757d7a955b24af6b89be9 100644
    --- a/src/cmd/go/internal/modload/init.go
    +++ b/src/cmd/go/internal/modload/init.go
    @@ -449,13 +449,22 @@ 		base.Fatalf("go: %v", err)
     	}
     
     	setDefaultBuildMod() // possibly enable automatic vendoring
    -	rs = requirementsFromModFile(ctx)
    -
    +	rs = requirementsFromModFile()
     	if cfg.BuildMod == "vendor" {
     		readVendorList()
     		checkVendorConsistency()
     		rs.initVendor(vendorList)
     	}
    +	if rs.hasRedundantRoot() {
    +		// If any module path appears more than once in the roots, we know that the
    +		// go.mod file needs to be updated even though we have not yet loaded any
    +		// transitive dependencies.
    +		rs, err = updateRoots(ctx, rs.direct, rs, nil, nil, false)
    +		if err != nil {
    +			base.Fatalf("go: %v", err)
    +		}
    +	}
    +
     	if index.goVersionV == "" {
     		// TODO(#45551): Do something more principled instead of checking
     		// cfg.CmdName directly here.
    @@ -530,7 +539,12 @@ 	if err != nil {
     		base.Fatalf("go: %v", err)
     	}
     
    -	commitRequirements(ctx, modFileGoVersion(), requirementsFromModFile(ctx))
    +	rs := requirementsFromModFile()
    +	rs, err = updateRoots(ctx, rs.direct, rs, nil, nil, false)
    +	if err != nil {
    +		base.Fatalf("go: %v", err)
    +	}
    +	commitRequirements(ctx, modFileGoVersion(), rs)
     
     	// Suggest running 'go mod tidy' unless the project is empty. Even if we
     	// imported all the correct requirements above, we're probably missing
    @@ -641,9 +655,8 @@ }
     
     // requirementsFromModFile returns the set of non-excluded requirements from
     // the global modFile.
    -func requirementsFromModFile(ctx context.Context) *Requirements {
    +func requirementsFromModFile() *Requirements {
     	roots := make([]module.Version, 0, len(modFile.Require))
    -	mPathCount := map[string]int{Target.Path: 1}
     	direct := map[string]bool{}
     	for _, r := range modFile.Require {
     		if index != nil && index.exclude[r.Mod] {
    @@ -656,28 +669,12 @@ 			continue
     		}
     
     		roots = append(roots, r.Mod)
    -		mPathCount[r.Mod.Path]++
     		if !r.Indirect {
     			direct[r.Mod.Path] = true
     		}
     	}
     	module.Sort(roots)
     	rs := newRequirements(modDepthFromGoVersion(modFileGoVersion()), roots, direct)
    -
    -	// If any module path appears more than once in the roots, we know that the
    -	// go.mod file needs to be updated even though we have not yet loaded any
    -	// transitive dependencies.
    -	for _, n := range mPathCount {
    -		if n > 1 {
    -			var err error
    -			rs, err = updateRoots(ctx, rs.direct, rs, nil, nil, false)
    -			if err != nil {
    -				base.Fatalf("go: %v", err)
    -			}
    -			break
    -		}
    -	}
    -
     	return rs
     }
     
    diff --git a/src/cmd/go/testdata/script/mod_tidy_lazy_self.txt b/src/cmd/go/testdata/script/mod_tidy_lazy_self.txt
    index ffcea186035574da7373494a69c3dc3ce050298c..9abbabd2ebe47345e3e1cbe9067a9e98fcf76b7f 100644
    --- a/src/cmd/go/testdata/script/mod_tidy_lazy_self.txt
    +++ b/src/cmd/go/testdata/script/mod_tidy_lazy_self.txt
    @@ -2,18 +2,13 @@ # Regression test for https://golang.org/issue/46078:
     # 'go mod tidy' should not panic if the main module initially
     # requires an older version of itself.
     
    +# A module may require an older version of itself without error. This is
    +# inconsistent (the required version is never selected), but we still get
    +# a reproducible build list.
    +go list -m all
    +stdout '^golang.org/issue/46078$'
     
    -# A module that explicitly requires an older version of itself should be
    -# rejected as inconsistent: we enforce that every explicit requirement is the
    -# selected version of its module path, but the selected version of the main
    -# module is always itself — not some explicit version.
    -
    -! go list -m all
    -stderr '^go: updates to go\.mod needed; to update it:\n\tgo mod tidy$'
    -
    -
    -# The suggested 'go mod tidy' command should succeed (not crash).
    -
    +# 'go mod tidy' should fix this (and not crash).
     go mod tidy
     
     
    diff --git a/src/cmd/go/testdata/script/mod_vendor_redundant_requirement.txt b/src/cmd/go/testdata/script/mod_vendor_redundant_requirement.txt
    new file mode 100644
    index 0000000000000000000000000000000000000000..3f6f5c5276b9752f9445840181aa9689801731f5
    --- /dev/null
    +++ b/src/cmd/go/testdata/script/mod_vendor_redundant_requirement.txt
    @@ -0,0 +1,29 @@
    +# 'go list -mod=vendor' should succeed even when go.mod contains redundant
    +# requirements. Verifies #47565.
    +go list -mod=vendor
    +
    +-- go.mod --
    +module m
    +
    +go 1.17
    +
    +require example.com/m v0.0.0
    +require example.com/m v0.0.0
    +
    +replace example.com/m v0.0.0 => ./m
    +-- m/go.mod --
    +module example.com/m
    +
    +go 1.17
    +-- m/m.go --
    +package m
    +-- use.go --
    +package use
    +
    +import _ "example.com/m"
    +-- vendor/example.com/m/m.go --
    +package m
    +-- vendor/modules.txt --
    +# example.com/m v0.0.0 => ./m
    +## explicit; go 1.17
    +example.com/m
    diff --git a/src/cmd/internal/obj/textflag.go b/src/cmd/internal/obj/textflag.go
    index 881e1922031d8780a127cf8fdc85476b1b90de0a..5ae75027c2f2b544f7b7eb91d3f03fe7d33a7353 100644
    --- a/src/cmd/internal/obj/textflag.go
    +++ b/src/cmd/internal/obj/textflag.go
    @@ -49,8 +49,8 @@
     	// Function can call reflect.Type.Method or reflect.Type.MethodByName.
     	REFLECTMETHOD = 1024
     
    -	// Function is the top of the call stack. Call stack unwinders should stop
    -	// at this function.
    +	// Function is the outermost frame of the call stack. Call stack unwinders
    +	// should stop at this function.
     	TOPFRAME = 2048
     
     	// Function is an ABI wrapper.
    diff --git a/src/io/fs/fs.go b/src/io/fs/fs.go
    index e1be32478e02986b59ba7f57945df7cfdd784391..e603afadb0b1b166e646ed0be6a11c98333fb798 100644
    --- a/src/io/fs/fs.go
    +++ b/src/io/fs/fs.go
    @@ -86,7 +86,7 @@ // (using the ReadDir function or a ReadDirFile's ReadDir method).
     type DirEntry interface {
     	// Name returns the name of the file (or subdirectory) described by the entry.
     	// This name is only the final element of the path (the base name), not the entire path.
    -	// For example, Name would return "hello.go" not "/home/gopher/hello.go".
    +	// For example, Name would return "hello.go" not "home/gopher/hello.go".
     	Name() string
     
     	// IsDir reports whether the entry describes a directory.
    diff --git a/src/make.bash b/src/make.bash
    index 4fb13f62758d7910d837225ab195ff49897ce96c..7986125a06ffc652016aef3252a24f6337379ea9 100755
    --- a/src/make.bash
    +++ b/src/make.bash
    @@ -130,8 +130,8 @@ if [ "$(uname -s)" = "GNU/kFreeBSD" ]; then
     	export CGO_ENABLED=0
     fi
     
    -# Test which linker/loader our system is using
    -if type readelf >/dev/null 2>&1; then
    +# Test which linker/loader our system is using, if GO_LDSO is not set.
    +if [ -z "$GO_LDSO" ] && type readelf >/dev/null 2>&1; then
     	if echo "int main() { return 0; }" | ${CC:-cc} -o ./test-musl-ldso -x c - >/dev/null 2>&1; then
     		LDSO=$(readelf -l ./test-musl-ldso | grep 'interpreter:' | sed -e 's/^.*interpreter: \(.*\)[]]/\1/') >/dev/null 2>&1
     		[ -z "$LDSO" ] || export GO_LDSO="$LDSO"
    @@ -203,16 +203,10 @@ 	mv cmd/dist/dist "$GOTOOLDIR"/dist
     	exit 0
     fi
     
    -buildall="-a"
    -if [ "$1" = "--no-clean" ]; then
    -	buildall=""
    -	shift
    -fi
    -
     # Run dist bootstrap to complete make.bash.
     # Bootstrap installs a proper cmd/dist, built with the new toolchain.
     # Throw ours, built with Go 1.4, away after bootstrap.
    -./cmd/dist/dist bootstrap $buildall $vflag $GO_DISTFLAGS "$@"
    +./cmd/dist/dist bootstrap -a $vflag $GO_DISTFLAGS "$@"
     rm -f ./cmd/dist/dist
     
     # DO NOT ADD ANY NEW CODE HERE.
    diff --git a/src/make.bat b/src/make.bat
    index b4a8e7084905e5487559779842596f35d89335e0..8f2825b09a935fe36cc6cb67baa230eeed9e5977 100644
    --- a/src/make.bat
    +++ b/src/make.bat
    @@ -112,20 +112,20 @@ if x%2==x--dist-tool goto copydist
     if x%3==x--dist-tool goto copydist
     if x%4==x--dist-tool goto copydist
     
    -set buildall=-a
    -if x%1==x--no-clean set buildall=
    -if x%2==x--no-clean set buildall=
    -if x%3==x--no-clean set buildall=
    -if x%4==x--no-clean set buildall=
    -if x%1==x--no-banner set buildall=%buildall% --no-banner
    -if x%2==x--no-banner set buildall=%buildall% --no-banner
    -if x%3==x--no-banner set buildall=%buildall% --no-banner
    -if x%4==x--no-banner set buildall=%buildall% --no-banner
    +set bootstrapflags=
    +if x%1==x--no-clean set bootstrapflags=--no-clean
    +if x%2==x--no-clean set bootstrapflags=--no-clean
    +if x%3==x--no-clean set bootstrapflags=--no-clean
    +if x%4==x--no-clean set bootstrapflags=--no-clean
    +if x%1==x--no-banner set bootstrapflags=%bootstrapflags% --no-banner
    +if x%2==x--no-banner set bootstrapflags=%bootstrapflags% --no-banner
    +if x%3==x--no-banner set bootstrapflags=%bootstrapflags% --no-banner
    +if x%4==x--no-banner set bootstrapflags=%bootstrapflags% --no-banner
     
     :: Run dist bootstrap to complete make.bash.
     :: Bootstrap installs a proper cmd/dist, built with the new toolchain.
     :: Throw ours, built with Go 1.4, away after bootstrap.
    -.\cmd\dist\dist.exe bootstrap %vflag% %buildall%
    +.\cmd\dist\dist.exe bootstrap -a %vflag% %bootstrapflags%
     if errorlevel 1 goto fail
     del .\cmd\dist\dist.exe
     goto end
    diff --git a/src/make.rc b/src/make.rc
    index f5e57e975561839c3e3c1ac7bd24e5d03b2219b6..7bdc7dea1c1eefde25478f71b970b2466512b41c 100755
    --- a/src/make.rc
    +++ b/src/make.rc
    @@ -92,15 +92,10 @@ 	mv cmd/dist/dist $GOTOOLDIR/dist
     	exit
     }
     
    -buildall = -a
    -if(~ $1 --no-clean) {
    -	buildall = ()
    -	shift
    -}
     # Run dist bootstrap to complete make.bash.
     # Bootstrap installs a proper cmd/dist, built with the new toolchain.
     # Throw ours, built with Go 1.4, away after bootstrap.
    -./cmd/dist/dist bootstrap $vflag $buildall $*
    +./cmd/dist/dist bootstrap -a $vflag $*
     rm -f ./cmd/dist/dist
     
     # DO NOT ADD ANY NEW CODE HERE.
    diff --git a/src/net/http/transport_test.go b/src/net/http/transport_test.go
    index 690e0c299d2b353489dc63c4eaeff58b3f817dbe..eeaa49264450de6785415669622801410d8abca9 100644
    --- a/src/net/http/transport_test.go
    +++ b/src/net/http/transport_test.go
    @@ -6441,10 +6441,11 @@ // Issue 41600
     // Test that a new request which uses the connection of an active request
     // cannot cause it to be canceled as well.
     func TestCancelRequestWhenSharingConnection(t *testing.T) {
    -	if testing.Short() {
    -		t.Skip("skipping in short mode")
    -	}
    +	reqc := make(chan chan struct{}, 2)
     	ts := httptest.NewServer(HandlerFunc(func(w ResponseWriter, req *Request) {
    +		ch := make(chan struct{}, 1)
    +		reqc <- ch
    +		<-ch
     		w.Header().Add("Content-Length", "0")
     	}))
     	defer ts.Close()
    @@ -6456,34 +6457,58 @@ 	transport.MaxConnsPerHost = 1
     
     	var wg sync.WaitGroup
     
    -	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
    +	wg.Add(1)
    +	putidlec := make(chan chan struct{})
    +	go func() {
    +		defer wg.Done()
    +		ctx := httptrace.WithClientTrace(context.Background(), &httptrace.ClientTrace{
    +			PutIdleConn: func(error) {
    +				// Signal that the idle conn has been returned to the pool,
    +				// and wait for the order to proceed.
    +				ch := make(chan struct{})
    +				putidlec <- ch
    +				<-ch
    +			},
    +		})
    +		req, _ := NewRequestWithContext(ctx, "GET", ts.URL, nil)
    +		res, err := client.Do(req)
    +		if err == nil {
    +			res.Body.Close()
    +		}
    +		if err != nil {
    +			t.Errorf("request 1: got err %v, want nil", err)
    +		}
    +	}()
     
    -	for i := 0; i < 10; i++ {
    -		wg.Add(1)
    -		go func() {
    -			defer wg.Done()
    -			for ctx.Err() == nil {
    -				reqctx, reqcancel := context.WithCancel(ctx)
    -				go reqcancel()
    -				req, _ := NewRequestWithContext(reqctx, "GET", ts.URL, nil)
    -				res, err := client.Do(req)
    -				if err == nil {
    -					res.Body.Close()
    -				}
    -			}
    -		}()
    -	}
    +	// Wait for the first request to receive a response and return the
    +	// connection to the idle pool.
    +	r1c := <-reqc
    +	close(r1c)
    +	idlec := <-putidlec
     
    -	for ctx.Err() == nil {
    -		req, _ := NewRequest("GET", ts.URL, nil)
    -		if res, err := client.Do(req); err != nil {
    -			t.Errorf("unexpected: %p %v", req, err)
    -			break
    -		} else {
    +	wg.Add(1)
    +	cancelctx, cancel := context.WithCancel(context.Background())
    +	go func() {
    +		defer wg.Done()
    +		req, _ := NewRequestWithContext(cancelctx, "GET", ts.URL, nil)
    +		res, err := client.Do(req)
    +		if err == nil {
     			res.Body.Close()
     		}
    -	}
    +		if !errors.Is(err, context.Canceled) {
    +			t.Errorf("request 2: got err %v, want Canceled", err)
    +		}
    +	}()
     
    +	// Wait for the second request to arrive at the server, and then cancel
    +	// the request context.
    +	r2c := <-reqc
     	cancel()
    +
    +	// Give the cancelation a moment to take effect, and then unblock the first request.
    +	time.Sleep(1 * time.Millisecond)
    +	close(idlec)
    +
    +	close(r2c)
     	wg.Wait()
     }
    diff --git a/src/os/exec/lp_windows_test.go b/src/os/exec/lp_windows_test.go
    index f834ffede03609eb6fdb6de000cea871cf8ec201..bbf6a9b7f13b5ef5ac412c7eabac6dca3b56f11e 100644
    --- a/src/os/exec/lp_windows_test.go
    +++ b/src/os/exec/lp_windows_test.go
    @@ -312,9 +312,6 @@
     	// Run all tests.
     	for i, test := range lookPathTests {
     		t.Run(fmt.Sprint(i), func(t *testing.T) {
    -			if i == 16 {
    -				t.Skip("golang.org/issue/44379")
    -			}
     			dir := filepath.Join(tmp, "d"+strconv.Itoa(i))
     			err := os.Mkdir(dir, 0700)
     			if err != nil {
    diff --git a/src/runtime/cgo/gcc_traceback.c b/src/runtime/cgo/gcc_traceback.c
    index d86331c583a674cc6d2fa89bbb582ba439999c0c..6e9470c43c24ada65f16ac115f4a51c41c97de94 100644
    --- a/src/runtime/cgo/gcc_traceback.c
    +++ b/src/runtime/cgo/gcc_traceback.c
    @@ -7,6 +7,14 @@
     #include 
     #include "libcgo.h"
     
    +#ifndef __has_feature
    +#define __has_feature(x) 0
    +#endif
    +
    +#if __has_feature(memory_sanitizer)
    +#include 
    +#endif
    +
     // Call the user's traceback function and then call sigtramp.
     // The runtime signal handler will jump to this code.
     // We do it this way so that the user's traceback function will be called
    @@ -19,6 +27,18 @@ 	arg.Context = 0;
     	arg.SigContext = (uintptr_t)(context);
     	arg.Buf = cgoCallers;
     	arg.Max = 32; // must match len(runtime.cgoCallers)
    +
    +#if __has_feature(memory_sanitizer)
    +        // This function is called directly from the signal handler.
    +        // The arguments are passed in registers, so whether msan
    +        // considers cgoCallers to be initialized depends on whether
    +        // it considers the appropriate register to be initialized.
    +        // That can cause false reports in rare cases.
    +        // Explicitly unpoison the memory to avoid that.
    +        // See issue #47543 for more details.
    +        __msan_unpoison(&arg, sizeof arg);
    +#endif
    +
     	(*cgoTraceback)(&arg);
     	sigtramp(sig, info, context);
     }
    diff --git a/src/runtime/mfinal.go b/src/runtime/mfinal.go
    index fd318d49a8d20475713b0b0482fb811a79b2fea3..c134a0f22d8e6f49d3b102218b4c92a0d6412437 100644
    --- a/src/runtime/mfinal.go
    +++ b/src/runtime/mfinal.go
    @@ -466,6 +466,10 @@ //
     // Without the KeepAlive call, the finalizer could run at the start of
     // syscall.Read, closing the file descriptor before syscall.Read makes
     // the actual system call.
    +//
    +// Note: KeepAlive should only be used to prevent finalizers from
    +// running prematurely. In particular, when used with unsafe.Pointer,
    +// the rules for valid uses of unsafe.Pointer still apply.
     func KeepAlive(x interface{}) {
     	// Introduce a use of x that the compiler can't eliminate.
     	// This makes sure x is alive on entry. We need x to be alive
    diff --git a/src/runtime/signal_windows.go b/src/runtime/signal_windows.go
    index f2ce24d735cf1c20ebc29ff797edeca05d866ca0..b720ddcf164ea51482ddaca0dd58f080dda6d433 100644
    --- a/src/runtime/signal_windows.go
    +++ b/src/runtime/signal_windows.go
    @@ -183,6 +183,17 @@ 	if testingWER {
     		return _EXCEPTION_CONTINUE_SEARCH
     	}
     
    +	// VEH is called before SEH, but arm64 MSVC DLLs use SEH to trap
    +	// illegal instructions during runtime initialization to determine
    +	// CPU features, so if we make it to the last handler and we're
    +	// arm64 and it's an illegal instruction and this is coming from
    +	// non-Go code, then assume it's this runtime probing happen, and
    +	// pass that onward to SEH.
    +	if GOARCH == "arm64" && info.exceptioncode == _EXCEPTION_ILLEGAL_INSTRUCTION &&
    +		(r.ip() < firstmoduledata.text || firstmoduledata.etext < r.ip()) {
    +		return _EXCEPTION_CONTINUE_SEARCH
    +	}
    +
     	winthrow(info, r, gp)
     	return 0 // not reached
     }
    diff --git a/src/runtime/textflag.h b/src/runtime/textflag.h
    index e727208cd03a0b5f693edaedb4861da5b85add2c..214075e360ceb623daa53cdd8313cdd5473435af 100644
    --- a/src/runtime/textflag.h
    +++ b/src/runtime/textflag.h
    @@ -32,8 +32,8 @@ // TODO(mwhudson): only implemented for ppc64x at present.
     #define NOFRAME 512
     // Function can call reflect.Type.Method or reflect.Type.MethodByName.
     #define REFLECTMETHOD 1024
    -// Function is the top of the call stack. Call stack unwinders should stop
    -// at this function.
    +// Function is the outermost frame of the call stack. Call stack unwinders
    +// should stop at this function.
     #define TOPFRAME 2048
     // Function is an ABI wrapper.
     #define ABIWRAPPER 4096