Kei te whakawhanake te kaupapa LLVM i nga taputapu mo te mahi me nga kaitarai i roto i te C++

Ko nga kaiwhakawhanake o te kaupapa LLVM he maha nga whakarereketanga e whai ana ki te whakapakari i te haumarutanga o nga kaupapa C++ miihana-nui me te whakarato huarahi ki te whakakore i nga hapa i puta mai i te nui o nga kaitarai. Ko te mahi e arotahi ana ki nga waahanga e rua: te whakarato i tetahi tauira whanaketanga e taea ai te mahi haumaru me nga kaitarai, me te mahi ki te whakapakari i te haumarutanga o te whare pukapuka paerewa o te libc++.

Ko te tauira hötaka haumaru e whakaarohia ana mo C++ ko te whakamahi i nga karaehe e whakaratohia ana e te whare pukapuka paerewa i te wa e mahi ana me nga kaitarai, kaua ki te raweke i nga tohu tohu. Hei tauira, e whakaarohia ana kia whakamahia nga akomanga std::array, std::vector me std::span, ka taapirihia he haki-waahi mo te mahara kua tohatohahia.

Hei karo i nga mahi whakaroroharatanga kino i roto i te clang, e whakaarohia ana kia whakaatu i nga whakatupato whakahiato mo nga mahi taurangi tohu tohu katoa, he rite ki te whakaputanga whakamohiotanga o nga poroporo i te wa e whakamahi ana i te haki "cppcoreguidelines-pro-bounds-pointer-arithmetic", tautoko e puta i roto i te tukunga LLVM 16. Hei whakaahei i aua whakatupato, ka taapirihia he haki motuhake ki te tangi, kaore i te kaha ma te taunoa.

Kua whakamaheretia ki te whakatinana i tetahi aratau whakamarumaru pai ake i roto i te libc++, ina ka whakahohea, ka mau etahi ahuatanga i te wa whakahaere e arai atu ai ki te whanonga kore taupatupatu. Hei tauira, i roto i nga karaehe std::span me std::vector, ka aro turukihia te uru mahara ki waho, a ki te kitea, ka pakaru te papatono. E whakapono ana nga kaiwhakawhanake ko te taapiri i enei huringa ka mau tonu te libc++ ki nga paerewa C++, na te mea ko te whiriwhiri me pehea te whakahaere i nga keehi o te whanonga kaore i tautuhia kei te taha o nga kaihanga whare pukapuka, ko wai pea, i roto i era atu mea, ka kii i te whanonga kaore i tautuhia he koretake, me tono hōtaka ki te whakamutu.

Ko nga arowhai wa i roto i te libc++ kua whakaritea kia wehewehea ki nga waahanga ka taea te mahi takitahi. Ko etahi o nga arowhai e whakaarohia ana, kaore e arai i te uaua o nga mahi, i nga huringa ranei ki te ABI, kua whakatinanahia i roto i te aratau haumaru libc++.

I tua atu, kua whakamaheretia ki te whakarite taputapu mo te whakatikatika i te waehere, ka taea e koe te whakakapi i nga taurangi me nga tohu karekau me nga ipu me te whakamahi i nga kaikawe rereke i nga waahi kaore e taea e te ipu te whakakapi tika i te tohu (hei tauira, ka taea te hanga "mehemea(array_pointer)". ka tahuri ki te “mehemea(span.data) ()"). Ka taea te whakamahi whakatikatika ehara i te mea anake ki nga taurangi rohe, engari ki nga tawhā o nga momo tohutohu.

Source: opennet.ru

Tāpiri i te kōrero