Sakin GCC 11 compiler suite

Bayan shekara guda na haɓakawa, an fitar da GCC 11.1 mai haɗawa kyauta, babban sakin farko a sabon reshe na GCC 11.x. Dangane da sabon tsarin lambar lambar saki, an yi amfani da sigar 11.0 a cikin tsarin ci gaba, kuma jim kaɗan kafin a fito da GCC 11.1, reshen GCC 12.0 ya riga ya rabu, wanda daga ciki za a samar da babban sakin na gaba, GCC 12.1.

GCC 11.1 sananne ne don canjin sa zuwa amfani da tsarin fayil ɗin gyara kuskuren DWARF 5 ta tsohuwa, tsohowar haɗa ma'aunin C++17 ("-std=gnu++17"), gagarumin ci gaba a cikin tallafi ga C++20 daidaitattun, goyon bayan gwaji don C ++ 23, haɓakawa da suka danganci daidaitattun harshe na C na gaba (C2x), sababbin haɓaka aikin aiki.

Babban canje-canje:

  • An canza yanayin tsoho na C++ don amfani da ma'aunin C++17 (-std=gnu++17) maimakon C++14 da aka bayar a baya. Yana yiwuwa a zaɓi zaɓin sabon ɗabi'ar C ++ 17 yayin sarrafa samfuran da ke amfani da wasu samfura azaman siga (-fno-new-ttp-matching).
  • Supportara tallafi don haɓaka kayan aikin kayan aikin AddressSanitizer, wanda ke ba ku damar tantance gaskiyar samun wuraren ƙwaƙwalwar ajiya, wuce iyakokin abin da aka keɓe, da wasu nau'ikan kurakurai yayin aiki tare da ƙwaƙwalwar ajiya. Haɓakar kayan aikin a halin yanzu yana samuwa ne kawai don gine-ginen AArch64 kuma ana mai da hankali kan amfani yayin tattara kernel na Linux. Don ba da damar haɓaka kayan masarufi na AddressSanitizer lokacin gina abubuwan haɗin sararin mai amfani, an ƙara tuta "-fsanitize=hwaddress" da tutar kernel "-fsanitize=kernel-hwaddress".
  • Lokacin samar da bayanan gyara kuskure, ana amfani da tsarin DWARF 5 ta tsohuwa, wanda, idan aka kwatanta da sigogin da suka gabata, yana ba da damar samar da ƙarin 25% ƙarin bayanan kuskure. Cikakken tallafi don DWARF 5 yana buƙatar aƙalla sigar binutils 2.35.2. Ana tallafawa tsarin DWARF 5 a cikin kayan aikin gyara kuskure tun GDB 8.0, valgrind 3.17.0, elfutils 0.172 da dwz 0.14. Don ƙirƙirar fayilolin gyara kuskure ta amfani da wasu nau'ikan DWARF, zaku iya amfani da zaɓuɓɓukan "-gdwarf-2", "-gdwarf-3" da "-gdwarf-4".
  • Abubuwan da ake buƙata don masu tarawa waɗanda za a iya amfani da su don gina GCC an ƙara su. Dole ne mai tarawa yanzu ya goyi bayan ma'aunin C++11 (a da ana buƙatar C++98), watau. Idan GCC 10 ya isa ya gina GCC 3.4, to aƙalla GCC 11 ana buƙatar gina GCC 4.8.
  • Suna da wurin fayiloli don adana juji, fayilolin wucin gadi da ƙarin bayanan da suka wajaba don inganta LTO an canza su. Irin waɗannan fayilolin a yanzu ana adana su koyaushe a cikin kundin adireshi na yanzu sai dai idan an canza hanyar a sarari ta hanyar zaɓin "-dumpbase", "-dumpdir" da "-save-temps=*".
  • Goyon bayan tsarin binaryar BRIG don amfani tare da HSAIL (Harshen Tsarin Tsarin Tsarin Tsarin Tsarin Tsara Tsakanin Harshe) an soke shi kuma nan ba da jimawa ba za a cire shi.
  • An faɗaɗa ƙarfin yanayin ThreadSanitizer (-fsanitize=thread), wanda aka tsara don gano yanayin tsere lokacin raba bayanai iri ɗaya daga zaren daban-daban na aikace-aikacen zaren da yawa. Sabuwar sakin yana ƙara tallafi don madadin lokacin gudu da mahalli, da kuma goyan baya ga kayan aikin gyara kurakurai na KCSAN (Kernel Concurrency Sanitizer), wanda aka ƙera don gano yanayin tsere a cikin kwaya ta Linux. An ƙara sabbin zaɓuɓɓuka "-param tsan-distinguiish-volatile" da "-param tsan-instrument-func-entry-exit".
  • Lambobin ginshiƙi a cikin saƙonnin bincike yanzu suna nuna ba ƙidayar byte daga farkon layin ba, amma a zahiri lambobin ginshiƙi waɗanda ke yin la'akari da haruffan byte da yawa da haruffa waɗanda ke ɗaukar matsayi da yawa a cikin layin (misali, halin 🙂 yana ɗaukar matsayi biyu kuma an sanya shi cikin 4 bytes). Hakanan, haruffan shafin yanzu ana ɗaukar su azaman takamaiman adadin sarari (mai daidaitawa ta zaɓi -ftabstop, tsoho 8). Don dawo da tsohuwar ɗabi'a, an gabatar da zaɓin “-fdiagnostics-column-unit=byte”, kuma don tantance ƙimar farko (lamba daga 0 ko 1) - zaɓin “-fdiagnostics-column-origin=”.
  • Vectorizer yana yin la'akari da duk abubuwan da ke cikin aikin kuma yana ƙara ikon sarrafawa da ke da alaƙa da tsaka-tsaki da nassoshi zuwa tubalan da suka gabata a cikin jadawali mai sarrafawa (CFG, jadawali mai gudana).
  • Mai ingantawa yana aiwatar da ikon jujjuya jerin ayyuka na sharadi waɗanda ke kwatanta mabambanta iri ɗaya zuwa magana mai sauyawa. Za a iya shigar da kalmar sauya daga baya ta amfani da umarnin gwaji na bit (an ƙara zaɓin "-fbit-tests" don sarrafa irin wannan jujjuyawar).
  • Ingantattun ingantattun abubuwan ingantawa tsakanin hanyoyin sadarwa. An ƙara sabon izinin IPA-modref (-fipa-modref) don bibiyar illolin lokacin kiran ayyuka da haɓaka daidaiton bincike. Ingantattun aiwatar da izinin wucewar IPA-ICF (-fipa-icf), wanda ke rage yawan ƙwaƙwalwar ajiya yayin haɗawa kuma yana ƙara adadin ayyukan haɗin kai waɗanda aka haɗa tubalan lamba iri ɗaya. A cikin IPA-CP (Interprocedural akai-akai yadawa) wucewa, an inganta aikin tsinkaya, la'akari da iyakokin da aka sani da siffofi na madaukai.
  • A cikin Haɓaka Lokaci (LTO), an inganta tsarin bytecode don rage girma da haɓaka saurin sarrafawa. Rage yawan amfani da ƙwaƙwalwar ajiya yayin lokacin ɗaurewa.
  • A cikin ingantacciyar hanyar ingantawa dangane da sakamakon bayanin martabar lambar (PGO - Ingantaccen bayanin martaba), wanda ke ba da damar samar da mafi kyawun lamba dangane da nazarin fasalin aiwatarwa, girman fayiloli tare da bayanan GCOV yana raguwa saboda ƙarin marufi na sifili counters. . Inganta yanayin "-fprofile-values" ta hanyar kiyaye ƙarin sigogi akan kira kai tsaye.
  • Aiwatar da ma'auni na OpenMP 5.0 (Open Multi-Processing), wanda ke bayyana API da hanyoyin yin amfani da hanyoyin shirye-shirye masu kama da juna akan tsarin multi-core da matasan (CPU+GPU/DSP) tare da haɗin ƙwaƙwalwar ajiya da raka'a vectorization (SIMD), yana da ya ci gaba. Ƙara goyon baya na farko don raba umarnin da ikon yin amfani da madaukai iri-iri a cikin ginin OpenMP. An aiwatar da goyan bayan OMP_TARGET_OFFLOAD sauyin yanayi.
  • An inganta aiwatar da ƙayyadaddun ƙayyadaddun shirye-shirye na OpenACC 2.6 da aka bayar don C, C++ da Harsunan Fortran, wanda ke bayyana kayan aikin sauke ayyukan akan GPUs da na'urori na musamman, kamar NVIDIA PTX.
  • Don harsunan C, an aiwatar da sabon sifa "no_stack_protector", wanda aka tsara don yiwa alama ayyuka waɗanda bai kamata a kunna kariyar tari ba ("-fstack-protector"). An fadada sifa na "malloc" don tallafawa gano nau'i-nau'i na kira don rarrabawa da 'yantar da ƙwaƙwalwar ajiya (allocator / diallocator), wanda aka yi amfani da shi a cikin ma'auni na tsaye don gano kurakurai na yau da kullum a cikin aiki tare da ƙwaƙwalwar ajiya (ƙwaƙwalwar ƙwaƙwalwar ajiya, amfani bayan yantar da su). kira sau biyu zuwa aikin kyauta, da sauransu) kuma a cikin gargaɗin mai tarawa “-Wmismatched-dealloc”, “-Wmismatched-new-delete” da “-Wfree-nonheap-abu”, yana ba da labari game da rashin daidaituwa tsakanin ma’amalar ƙwaƙwalwar ajiya da ayyukan rarraba ƙwaƙwalwar ajiya.
  • An ƙara sabbin gargaɗi don yaren C:
    • "-Wmismatched-dealloc" (wanda aka kunna ta tsohuwa) - yayi kashedin game da ayyukan mu'amalar žwažwalwar ajiya wanda ke amfani da mai nuni wanda bai dace da ayyukan rabon žwažwalwa ba.
    • "-Wsizeof-array-div" (an kunna lokacin da "-Wall" aka ƙayyade) - Yayi kashedin game da rarraba girman masu aiki biyu idan mai rarraba bai dace da girman rukunin tsararru ba.
    • "-Wstringop-overread" (wanda aka kunna ta tsohuwa) - yayi kashedin game da kiran aikin kirtani wanda ke karanta bayanai daga wani yanki a wajen iyakar tsararru.
    • "-Wtsan" (wanda aka kunna ta tsohuwa) - Yayi kashedin game da amfani da fasali (kamar std :: atomic_thread_fence) waɗanda basu da tallafi a cikin ThreadSanitizer.
    • "-Warray-parameter" da "-Wvla-parameter" (an kunna lokacin da aka ƙayyade "-Wall") - yayi kashedin game da wuce gona da iri tare da bayanan da ba su dace ba na gardama masu alaƙa da ƙayyadaddun tsararru- da madaukai masu tsayi.
    • Gargadin "-Wuninitialized" yanzu yana gano ƙoƙarin karantawa daga ƙayyadaddun ƙwaƙwalwar ajiyar da ba a fara ba.
    • Gargadin "-Wfree-nonheap-object" yana faɗaɗa ma'anar lokuta inda ake kiran ayyukan ma'amalar ƙwaƙwalwar ajiya tare da ma'anar da ba a samu ta ayyukan rarraba ƙwaƙwalwar ajiya mai ƙarfi ba.
    • Gargadin "-Wmaybe-uninitialized" ya faɗaɗa gano masu nunin wucewa zuwa ayyuka waɗanda ke nufin wuraren ƙwaƙwalwar ajiya da ba a buɗe ba.
  • Don yaren C, an aiwatar da wani ɓangare na sabbin fasalulluka waɗanda aka haɓaka cikin tsarin ma'aunin C2X (wanda aka kunna ta hanyar tantance -std=c2x da -std=gnu2x): macros BOOL_MAX da BOOL_WIDTH, nuni na zaɓi na sunayen sigogin da ba a yi amfani da su ba a cikin aiki ma'anoni (kamar a cikin C ++), sifa "[ [nodiscard]]", mai aiwatarwa "__has_c_attribute", macros FLT_IS_IEC_60559, DBL_IS_IEC_60559, LDBL_IS_IEC_60559, __STDC_WANT_IEC_60559, FLT_IS_IEC. BL_SNAN, DEC_INFINITY da DEC _NAN, NaN=macros don FloatN, _FloatNx da _DecimalN, ikon tantance alamomin tsalle kafin bayyanawa da kuma ƙarshen bayanan fili.
  • Don C ++, an aiwatar da wani ɓangare na canje-canje da sabbin abubuwan da aka gabatar a cikin ma'aunin C ++20, gami da ayyukan kama-da-wane “consteval Virtual”, ɓarna-destructors don ƙarshen tsarin rayuwa na abubuwa, amfani da aji na enum da ƙididdige girman tsararru a cikin "sabon" magana.
  • Don C++, an ƙara goyan bayan gwaji don wasu haɓakawa da ake haɓaka don ma'aunin C++23 na gaba (-std=c++23, -std=gnu++23, -std=c++2b, -std=gnu + 2b). Misali, a yanzu akwai goyan baya ga ainihin suffix "zu" don ƙimar girman_t da aka sa hannu.
  • libstdc++ ya inganta tallafi don ma'aunin C++17, gami da gabatarwar std :: daga_chars da std :: to_chars don nau'ikan ma'ana masu iyo. An aiwatar da sabbin abubuwa na ma'aunin C ++20, gami da std :: bit_cast, std :: source_location, ayyukan atomic jira da sanarwa, , , , , da kuma abubuwan gaba C ++ misali 23 (std :: to_underlying, std :: is_scoped_enum). Ƙara goyan bayan gwaji don nau'ikan don sarrafa bayanan layi ɗaya (SIMD, Nau'in Daidaita Bayanan). An ƙaddamar da aiwatar da std ::uniform_int_distribution.
  • An cire alamar ingancin alpha daga libgccjit, ɗakin karatu da aka raba don shigar da janareta na lamba a cikin wasu matakai da amfani da shi don tsara haɗin JIT na bytecode zuwa lambar injin. An ƙara ikon gina libgccjit don MinGW.
  • Ƙarin tallafi don gine-ginen AArch64 Armv8-R (-march=armv8-r). Don gine-ginen AArch64 da ARM, an ƙara tallafi ga masu sarrafawa (parameters -mcpu da -mtune): Arm Cortex-A78 (cortex-a78), Arm Cortex-A78AE (cortex-a78ae), Arm Cortex-A78C (cortex-a78c) , Arm Cortex- X1 (cortex-x1), Arm Neoverse V1 (neoverse-v1) da Arm Neoverse N2 (neoverse-n2). Fujitsu A64FX (a64fx) da Arm Cortex-R82 (cortex-r82) CPUs kuma an ƙara su, suna tallafawa gine-ginen AArch64 kawai.
  • Supportara tallafi don amfani da Armv8.3-a (AArch64/AArch32), SVE (AArch64), SVE2 (AArch64) da MVE (AArch32 M-profile) umarnin SIMD don sarrafa sarrafa ayyukan da ke yin ƙari, ragi, ninkawa da bambance-bambancen ƙari/ragi sama sama. hadaddun lambobi. Ƙara goyon baya na farko don autovectorization don ARM ta amfani da saitin koyarwar MVE.
  • Don dandamali na ARM, an ba da cikakken saiti na ayyukan C mai haɗawa (Intrinsics), maye gurbinsu da ƙarin umarnin vector (SIMD), yana rufe duk umarnin NEON da aka rubuta a cikin ƙayyadaddun ACLE Q3 2020.
  • An ƙara goyan bayan gfx908 GPU zuwa ga baya don ƙirƙirar lamba don AMD GPUs dangane da microarchitecture na GCN.
  • Ƙara goyon baya ga sababbin na'urori masu sarrafawa da sabon saiti na umarni da aka aiwatar a cikinsu:
    • Intel Sapphire Rapids (-march = sapphirapids, yana ba da damar tallafi don MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, SERIALIZE, PTWRITE, WAITPKG, TSXLDTRK, AMX-TILE, AMX-TILE8, AMX-NIMX-TILE16, AMX-NIMX-TILEXNUMX, AMX-NIMFXNUMX da AMX-NIMF.
    • Intel Alderlake (-march=alderlake, yana ba da damar goyan baya ga CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, KEYLOCKER, AVX-VNNI da umarnin HRESET).
    • Intel Rocketlake (-march = rocketlake, kama da Rocket Lake ba tare da tallafin SGX ba).
    • AMD Zen 3 (-march = znver3).
  • Don tsarin IA-32/x86-64 dangane da na'urori masu sarrafawa na Intel, an ƙara goyan bayan sabon umarnin sarrafawa TSXLDTRK, SERIALIZE, HRESET, UINTRKEYLOCKER, AMX-TILE, AMX-INT8, AMX-BF16, AVX-VNNI.
  • Ƙara goyon baya don "-march = x86-64-v[234]" tutoci don zaɓar matakan gine-gine x86-64 (v2 - ya rufe SSE4.2, SSSE3, POPCNT da CMPXCHG16B kari; v3 - AVX2 da MOVBE; v4 - AVX-512 ) .
  • Ƙara goyon baya don tsarin RISC-V tare da babban oda ta byte. An ƙara "-misa-spec=*" zaɓi don zaɓar sigar ƙayyadaddun ƙayyadaddun tsarin koyarwa na RISC-V. Ƙara tallafi don AddressSanitizer da kariyar tari ta amfani da alamun canary.
  • Ci gaba da inganta yanayin bincike na "-fanalyzer", wanda ke aiwatar da bincike mai zurfi tsakanin albarkatun hanyoyin hanyoyin aiwatar da code da kwararar bayanai a cikin shirin. Yanayin yana da ikon gano matsaloli a matakin haɗawa, kamar kira sau biyu zuwa aikin kyauta () don yanki ɗaya na ƙwaƙwalwar ajiya, leaks ɗin bayanin fayil, ɓarke ​​​​da wucewar ma'anoni mara amfani, samun damar ƴantattun tubalan ƙwaƙwalwar ajiya, ta amfani da ƙimar da ba a fara ba, da sauransu. A cikin sabon sigar:
    • An sake rubuta lambar don bin diddigin yanayin shirin gaba ɗaya. Matsaloli tare da bincika manyan fayilolin C an warware su.
    • Ƙara goyon bayan C++ na farko.
    • Rarraba ƙwaƙwalwar ajiya da bincike na ma'amala an cire su daga takamaiman malloc da ayyuka na kyauta, kuma yanzu yana goyan bayan sabo/share da sabo[]/ share[].
    • Ƙara sabbin gargaɗi: -Wanalyzer-shift-count-negative, -Wanalyzer-shift-count-overflow, -Wanalyzer-rubuta-zuwa-const da -Wanalyzer-rubuta-zuwa-string-na zahiri.
    • An ƙara sabbin zaɓukan gyara kuskure -fdump-analyzer-json da -fno-analyzer-yiwuwar.
    • An aiwatar da ikon ƙaddamar da mai nazari ta hanyar plugins don GCC (misali, an shirya plugin don bincika kuskuren amfani da kulle duniya (GIL) a cikin CPython).

source: budenet.ru

Add a comment