Tar éis sé mhí d'fhorbairt curtha i láthair scaoileadh tionscadail LLVM 10.0 — Uirlisí atá comhoiriúnach le GCC (tiomsaitheoirí, optimizers agus gineadóirí cód), cláir a thiomsú i gcód giotán idirmheánach de threoracha fíorúla cosúil le RISC (meaisín fíorúil íseal-leibhéil le córas optamaithe il-leibhéil). Is féidir an pseudocode a ghintear a thiontú trí úsáid a bhaint as tiomsaitheoir JIT go treoracha meaisín go díreach ag an am a dhéantar an clár.
I measc na ngnéithe nua in LLVM 10.0 tá tacaíocht do C ++ Coincheapa, ní ritheann Clang mar phróiseas ar leith a thuilleadh, tacaíocht do sheiceálacha CFG (garda sreafa rialaithe) do Windows, agus tacaíocht do chumais nua LAP.
Tacaíocht breise le haghaidh "coincheapa", síneadh teimpléad C++ a áireofar sa chéad chaighdeán eile, códainm C++2a (curtha ar siúl ag an bhratach -std=c++2a).
Ligeann coincheapa duit sraith de cheanglais pharaiméadar teimpléid a shainiú a chuireann teorainn, ag am tiomsaithe, leis an sraith argóintí ar féidir glacadh leo mar pharaiméadair teimpléid. Is féidir na coincheapa a úsáid chun neamhréireachtaí loighciúla a sheachaint idir airíonna na gcineálacha sonraí a úsáidtear laistigh den teimpléad agus airíonna cineál sonraí na bparaiméadar ionchuir.
teimpléad
coincheap EqualityComparable = éilíonn(T a, T b) {
{ a == b } -> std::boolean;
{ a != b } -> std::boolean;
};
De réir réamhshocraithe, cuirtear deireadh le seoladh próisis ar leith (“clang -cc1”) ina ndéantar tiomsú. Déantar an tiomsú anois sa phríomhphróiseas, agus is féidir an rogha "-fno-integrated-cc1" a úsáid chun an sean-iompar a chur ar ais.
Modhanna diagnóiseacha nua:
Tugann "-Wc99-designator" agus "-Wreorder-init-list" rabhadh gan tosaigh a úsáid C99 i mód C++ i gcásanna ina bhfuil siad ceart in C99 ach nach bhfuil siad i C++20.
"-Wsizeof-array-div" - gabhann sé cásanna amhail "int arr[10]; …méid(arr) / méid(gearr)…” (ba cheart go mbeadh “méid(arr) / sizeof(int)”)).
Tugann "-Wxor-used-as-po" - rabhadh nach n-úsáidfear tógálacha amhail úsáid an oibreora "^" (xor) in oibríochtaí ar féidir iad a mheascadh le léiriú (2^16).
Tugann "-Wfinal-dtor-non-final-class" - rabhadh faoi aicmí nach bhfuil marcáilte leis an sonróir "deiridh", ach a bhfuil destructor leis an tréith "deiridh".
Is grúpa rabhaidh é "-Wtautological-bitwise-compare" chun comparáidí tautological a dhiagnóiseadh idir oibríocht bitwise agus tairiseach, agus chun comparáidí fíorfhíor a shainaithint ina gcuirtear an oibríocht bitwise OR i bhfeidhm ar uimhir neamhdhiúltach.
Tugann "-Wbitwise-conditional-parentheses" rabhadh maidir le fadhbanna nuair a dhéantar na hoibreoirí loighciúla AGUS (&) agus OR(|) a mheascadh leis an oibreoir coinníollach (?:).
Is analóg é “-Wmisleading- indentation” den tseiceáil den ainm céanna ó GCC, a thugann foláireamh faoi sloinn eangaithe amhail is gur cuid de bhloc más/eile/le haghaidh/am atá siad, ach i ndáiríre níl siad san áireamh sa bhloc seo .
Nuair a shonraítear “-Wextra”, cumasaítear an tseiceáil “-Wdeprecated-copy”, rabhadh faoi úsáid na dtógálaithe
"bogadh" agus "cóipeáil" i ranganna le sainmhíniú sainráite scriostóra.
Leathnaíodh na seiceálacha "-Wtautological-overlap-compare", "-Wsizeof-pointer-div", "-Wtautological-compare", "-Wrange-loop-analysis".
Díchumasaítear na seiceálacha "-Wbitwise-op-parentheses" agus "-Wlogical-op-parentheses" de réir réamhshocraithe.
I gcód C agus C++, ní cheadaítear oibríochtaí uimhríochtúla pointeora ach amháin in eagair. Gabhann an Sanitizer Iompraíochta Neamhshainithe sa mhód "-fsanitize=pointer-overflow" cásanna mar fhritháireamh neamh-nialasach a chur le pointeoir nialasach nó pointeoir nialasach a chruthú nuair a bhíonn slánuimhir á dhealú ó phointeoir neamh-null.
Déantar an mód "-fsanitize=implicit-conversion" (Sláintitheoir Tiontaithe Intuigthe) a oiriúnú chun fadhbanna le hoibríochtaí incriminte agus laghdaithe a aithint do chineálacha a bhfuil méid beagán níos lú acu ná an cineál "int".
Agus ailtireachtaí sprice x86 á roghnú "-march=skylake-avx512", "-march= icelake-client", "-march= icelake-server", "-march= cascadelake" agus "-march=cooperlake" de réir réamhshocraithe i veicteoirithe The tá stop ag cód úsáid a bhaint as cláir zmm 512-giotán, ach amháin i gcás ina bhfuil siad in iúl go díreach sa chód foinse. Is é an chúis atá leis ná go laghdaítear minicíocht an LAP nuair a bhíonn oibríochtaí 512-giotán á ndéanamh, rud a d'fhéadfadh tionchar diúltach a bheith aige ar fheidhmíocht fhoriomlán. Chun an t-iompar nua a athrú, soláthraítear an rogha "-mprefer-vector-width=512".
Tá iompar na brataí “-flax-vector-conversions” cosúil le GCC: tá cosc ar thiontú intuigthe veicteora giotán idir veicteoirí slánuimhir agus snámhphointe. Chun deireadh a chur leis an teorannú seo, tá sé beartaithe an bhratach a úsáid
"-flax-vector-conversions=all" arb é an réamhshocrú é.
Tacaíocht fheabhsaithe do CPUanna MIPS de theaghlach Octeon. Cuireadh "octeon+" leis an liosta de chineálacha bailí LAP.
Nuair a chuirtear le chéile i gcód idirmheánach WebAssembly, glaoitear an t-optimizer wasm-opt go huathoibríoch, má tá sé ar fáil sa chóras.
I gcás córais atá bunaithe ar ailtireacht RISC-V, ceadaítear úsáid a bhaint as cláir a stórálann luachanna snámhphointe i mbloic choinníollacha d’ionsáiteáin inlíne cóimeálaí.
Cuireadh bratacha tiomsaitheora nua leis: "-fgnuc-version" chun luach an leagain a shocrú do "__GNUC__" agus macraí comhchosúla; "-fmacro-prefix-map=OLD=NEW" chun an réimír eolaire OLD a chur in ionad NUA i macraí mar "__FILE__"; "-fpatchable-function-entry=N[,M]" chun líon áirithe treoracha NOP a ghiniúint roimh phointe iontrála na feidhme agus ina dhiaidh. Le haghaidh RISC-V
tacaíocht bhreise do na bratacha "-ffixed-xX", "-mcmodel=medany" agus "-mcmodel=medlow".
Tacaíocht bhreise leis an aitreabúid '__attribute__((target("branch-protection=..."))), a bhfuil a éifeacht cosúil leis an rogha -mbranch-cosaint.
Ar ardán Windows, agus an bhratach “-cfguard” á shonrú, cuirtear i bhfeidhm seiceálacha sláine sreafa forghníomhaithe (Garda Sreabhadh Rialaithe) le haghaidh glaonna feidhme indíreacha. Chun ionadú seiceála a dhíchumasú, is féidir leat an bhratach “-cfguard-nochecks” nó an modhnóir “__declspec(guard(nocf))” a úsáid.
Tá iompar an aitreabúid gnu_inline cosúil le GCC i gcásanna ina n-úsáidtear é gan an eochairfhocal "seachtrach".
Leathnaíodh na cumais a bhaineann le tacaíocht OpenCL agus CUDA. Tacaíocht bhreise do ghnéithe nua OpenMP 5.0.
Tá rogha Chaighdeánach curtha leis an bhfóntas clang-format, a ligeann duit an leagan den chaighdeán C++ a úsáidtear nuair a bhíonn an cód parsála agus formáidithe á chinneadh (Is déanaí, Auto, c++03, c++11, c++14, c++17, c++20 ).
Tá seiceálacha nua curtha leis an anailísí statach: alpha.cplusplus.PlacementNew chun a chinneadh an bhfuil dóthain spáis stórála, fuchsia.HandleChecker chun sceitheanna a bhaineann le láimhseálaithe Fuchsia a bhrath, security.insecureAPI.decodeValueOfObjCType chun ró-shreabhadh maolánach féideartha a bhrath nuair a úsáidtear [NSCoder decodebCtalypepe :ag:] .
Tá an Sanitizer Iompraíochta Neamhshainithe (UBSan) tar éis a sheiceálacha thar maoil pointeora a leathnú chun cur i bhfeidhm fritháirimh neamh-nialais ar threoraí NULLComment a ghabháil nó cur le fritháireamh pointeoir NULLComment dá bharr.
I linter clang-slachtmhar curtha leis cuid mhór de na seiceálacha nua.
Go dtí an creat Attributor Tá leas iomlán a bhaint idir nósanna imeachta agus anailíseoirí nua curtha leis. Tá staid 19 airí éagsúla tuartha, lena n-áirítear 12 airí 12 LLVM IR agus 7 airí teibí amhail beocht.
Cuireadh feidhmeanna matamaitice maitrís nua isteach sa tiomsaitheoir (Intreacha), a chuirtear in ionad treoracha éifeachtacha veicteoirí le linn tiomsaithe.
Tá go leor feabhsuithe déanta ar na hinnill le haghaidh ailtireachtaí X86, AArch64, ARM, SystemZ, MIPS, AMDGPU agus PowerPC. Cuireadh tacaíocht LAP leis
Cortex-A65, Cortex-A65AE, Neoverse E1 agus Neoverse N1. Le haghaidh ARMv8.1-M, tá an próiseas giniúna cód optamaithe (mar shampla, tá an chuma ar thacaíocht do lúba a bhfuil forchostais íosta acu) agus cuireadh tacaíocht d’uathvectorization leis an síneadh MVE. Tacaíocht feabhsaithe CPU MIPS Octeon. Le haghaidh PowerPC, cumasaítear fo-ghnáthaimh matamaitice a veicteorú trí úsáid a bhaint as leabharlann MASSV (Fochóras Luasghéaraithe Matamaitice), feabhsaítear giniúint cód, agus baintear leas as rochtain chuimhne ó lúba. Maidir le x86, athraíodh láimhseáil na gcineálacha veicteora v2i32, v4i16, v2i16, v8i8, v4i8 agus v2i8.
Gineadóir cód feabhsaithe do WebAssembly. Tacaíocht bhreise do threoracha TLS (Stóráil Thread-Local) agus atomic.fence. Tá méadú suntasach tagtha ar thacaíocht SIMD. Tá an cumas anois ag comhaid oibiachta WebAssembly úsáid a bhaint as sínithe feidhm illuacha.
Úsáidtear an anailíseoir nuair a bhíonn lúba á bpróiseáil Cuimhne SSA, a ligeann duit spleáchais a shainiú idir oibríochtaí cuimhne éagsúla. Is féidir le MemorySSA am tiomsaithe agus forghníomhaithe a laghdú nó is féidir é a úsáid in ionad AliasSetTracker gan caillteanas feidhmíochta.
Tá feabhas suntasach tagtha ar thacaíocht don fhormáid DWARF v5 ag dífhabhtóir LLDB. Tacaíocht fheabhsaithe le tógáil le MinGW
agus cumas tosaigh breise chun earraí inrite Windows a dhífhabhtú le haghaidh ailtireachtaí ARM agus ARM64. Cur síos breise ar na roghanna a thairgtear nuair a bhíonn ionchur uathchríochnaithe trí chluaisín a bhrú.
Leathnaithe Cumais nascóirí LLD. Tacaíocht fheabhsaithe don fhormáid ELF, lena n-áirítear comhoiriúnacht iomlán na dteimpléad glob leis an nascóir GNU a chinntiú, ag cur tacaíocht le haghaidh rannóga dífhabhtaithe comhbhrúite ".zdebug", ag cur an mhaoin PT_GNU_PROPERTY chun an roinn .note.gnu.property a shainiú (is féidir é a úsáid sa todhchaí Eithne Linux),
Tá na modhanna “-z noseparate-code”, “-z separate-code” agus “-z separate-loadable-deighleoga” curtha i bhfeidhm. Tacaíocht fheabhsaithe do MinGW agus WebAssembly.