Morero oa LLVM o nts'etsapele ts'ebetso e bolokehileng ea buffer ho C++

Baetsi ba morero oa LLVM ba sisintse liphetoho tse ngata tse reretsoeng ho matlafatsa ts'ireletso ea merero ea bohlokoa ea C++ le ho fana ka mokhoa oa ho felisa liphoso tse bakoang ke ho fetella ha li-buffer. Mosebetsi o tsepamisitse maikutlo libakeng tse peli: ho fana ka mohlala oa nts'etsopele o u lumellang hore u sebetse ka mokhoa o sireletsehileng le li-buffers, le ho sebetsa ho thatafatsa tšireletso ea laebrari e tloaelehileng ea libc ++ ea mesebetsi.

Mokhoa o reriloeng o bolokehileng oa lenaneo bakeng sa C++ ke ho sebelisa litlelase tse fanoeng ke laeborari e tloaelehileng ha u sebetsa ka li-buffers ho fapana le ho qhekella litsupa tse se nang letho. Mohlala, ho khothaletsoa ho sebelisa litlelase tsa std::array, std::vector, le std::span, tse tla eketsoa ka cheke ea nako bakeng sa memori e tsoang kantle ho meeli.

Ho loants'a litloaelo tse kotsi tsa mananeo ho clang, ho khothaletsoa ho fana ka litemoso tsa batho ba bokellang lits'ebetso tsohle tsa lipalo tsa pointer, tse ts'oanang le litemoso tsa linter tsa clang-tidy ha u sebelisa folakha ea "cppcoreguidelines-pro-bounds-pointer-arithmetic", tšehetso e tla hlaha tokollo LLVM 16. Ho nolofalletsa litemoso tse joalo, ho tla eketsoa folakha e arohaneng ho clang, e sa sebetseng ka ho sa feleng.

Ho reriloe ho kenya ts'ebetsong mokhoa oa boikhethelo o thata oa ts'ireletso ho libc ++, oo, ha o nolofalitsoe, o tla tšoara maemo a mang a lebisang boitšoarong bo sa hlalosoang ka nako. Mohlala, litlelaseng tsa std::span le std::vector, phihlello e kantle ho meeli e tla beoa leihlo, moo lenaneo le tla senyeha. Bahlahisi ba lumela hore ho eketsa liphetoho tse joalo ho tla boloka libc ++ e lumellana le litekanyetso tsa C ++, kaha khetho ea ho sebetsana le maemo a boitšoaro bo sa hlalosoang e itšetlehile ka baetsi ba laeborari, eo, har'a tse ling, e ka hlalosang boitšoaro bo sa hlalosoang e le ho senyeha ho hlokang lenaneo la ho tsoa.

Licheke tsa nako ea ho sebetsa ho libc++ li reretsoe ho aroloa ka mekhahlelo e ka kenyelletsoang ka bonngoe. Tse ling tsa licheke tse khothalelitsoeng tse sa hlahiseng ts'ebetso e rarahaneng kapa liphetoho tsa ABI li se li kentsoe tšebetsong ka mokhoa o bolokehileng oa libc++.

Ntle le moo, ho reriloe ho lokisa sephutheloana sa lisebelisoa bakeng sa ho lokisa khoutu, ho u lumella ho fetola li-pointers tse se nang letho ka har'a lijana ebe u sebelisa li-handlers tse ling maemong ao sets'oants'o se ke keng sa nka sebaka sa pointer (mohlala, "haeba (array_pointer)" construct e ka fetoleloa ho "haeba (span.data ()"). Liphetoho li ka sebelisoa eseng feela ho mefuta-futa ea sebaka, empa hape le ho ngola li-parameter ka litsupa.

Source: opennet.ru

Eketsa ka tlhaloso