LLVM νλ‘μ νΈ κ°λ°μλ μ 무μ μ€μν C++ νλ‘μ νΈμ 보μμ κ°ννκ³ λ²νΌ μ€λ²λ°μΌλ‘ μΈν΄ λ°μνλ μ€λ₯λ₯Ό μ κ±°νλ μλ¨μ μ 곡νκΈ° μν μ¬λ¬ κ°μ§ λ³κ²½ μ¬νμ μ μνμ΅λλ€. μ΄ μμ μ λ κ°μ§ μμμ μ€μ μ λκ³ μμ΅λλ€. μ¦, λ²νΌλ₯Ό μ¬μ©νμ¬ μμ ν μμ μ νμ©νλ κ°λ° λͺ¨λΈμ μ 곡νλ κ²κ³Ό libc++ νμ€ ν¨μ λΌμ΄λΈλ¬λ¦¬μ 보μμ κ°ννλ μμ μ λλ€.
μ μλ C++μ© μμ ν νλ‘κ·Έλλ° λͺ¨λΈμλ λ² μ΄ ν¬μΈν°λ₯Ό μ‘°μνλ λμ λ²νΌλ‘ μμ ν λ νμ€ λΌμ΄λΈλ¬λ¦¬μμ μ 곡νλ ν΄λμ€λ₯Ό μ¬μ©νλ κ²μ΄ ν¬ν¨λ©λλ€. μλ₯Ό λ€μ΄, κ³Όλ€ ν λΉλ λ©λͺ¨λ¦¬μ λν λ°νμ κ²μ¬λ₯Ό μΆκ°νλ std::array, std::Vector λ° std::span ν΄λμ€λ₯Ό μ¬μ©νλ κ²μ΄ μ μλ©λλ€.
clangμ μνν νλ‘κ·Έλλ° κ΄νμ λ°©μ§νκΈ° μν΄ "cppcoreguidelines-pro-bounds-pointer-arithmetic" νλκ·Έλ₯Ό μ¬μ©ν λ clang-tidy linter κ²½κ³ μΆλ ₯κ³Ό μ μ¬νκ² λͺ¨λ ν¬μΈν° μ°μ° μμ μ λν μ»΄νμΌλ¬ κ²½κ³ λ₯Ό νμνλ κ²μ΄ μ μλ©λλ€. LLVM 16 릴리μ€μ λνλ©λλ€. μ΄λ¬ν κ²½κ³ λ₯Ό νμ±ννκΈ° μν΄ κΈ°λ³Έμ μΌλ‘ νμ±νλμ§ μμ λ³λμ νλκ·Έκ° clangμ μΆκ°λ©λλ€.
libc++μμλ μ νμ κ°ν λ³΄νΈ λͺ¨λλ₯Ό ꡬνν κ³νμ λλ€. μ΄ λͺ¨λλ₯Ό νμ±ννλ©΄ μ μλμ§ μμ λμμΌλ‘ μ΄μ΄μ§λ μΌλΆ μν©μ λ°νμμ ν¬μ°©ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, std::span λ° std::Vector ν΄λμ€μμλ λ²μλ₯Ό λ²μ΄λ λ©λͺ¨λ¦¬ μ‘μΈμ€κ° λͺ¨λν°λ§λλ©°, κ°μ§λλ©΄ νλ‘κ·Έλ¨μ΄ μ€λ¨λ©λλ€. κ°λ°μλ€μ μ΄λ¬ν λ³κ²½ μ¬νμ μΆκ°νλ©΄ libc++κ° C++ νμ€μ μ€μν κ²μ΄λΌκ³ λ―Ώμ΅λλ€. μ μλμ§ μμ λμμ μ²λ¦¬νλ λ°©λ²μ λν μ νμ 무μ보λ€λ μ μλμ§ μμ λμμ μ€ν¨λ‘ μ²λ¦¬νμ¬ λ€μ μμ μ μꡬν μ μλ λΌμ΄λΈλ¬λ¦¬ κ°λ°μμκ² μκΈ° λλ¬Έμ λλ€. νλ‘κ·Έλ¨μ μ’ λ£ν©λλ€.
libc++μ λ°νμ κ²μ¬λ κ°λ³μ μΌλ‘ νμ±νν μ μλ λ²μ£Όλ‘ λλμ΄μ§ κ³νμ λλ€. μμ μ΄ λ³΅μ‘ν΄μ§κ±°λ ABIκ° λ³κ²½λμ§ μλ μ μλ κ²μ¬ μ€ μΌλΆλ μ΄λ―Έ libc++ μμ λͺ¨λ λ΄μμ ꡬνλμμ΅λλ€.
μΆκ°μ μΌλ‘, μ½λ μ
λ°μ΄νΈλ₯Ό μν λꡬλ₯Ό μ€λΉν κ³νμ
λλ€. μ΄λ₯Ό ν΅ν΄ λ³μλ₯Ό λ² μ΄ ν¬μΈν°λ‘ λ체νκ³ μ»¨ν
μ΄λκ° ν¬μΈν°λ₯Ό μ§μ λ체ν μ μλ μν©μμ λ체 νΈλ€λ¬λ₯Ό μ¬μ©ν μ μμ΅λλ€(μ: "if(array_pointer)" ꡬμ±μ λ€μκ³Ό κ°μ΅λλ€). if(span.data) ()")λ‘ λ³νλ©λλ€. μ‘°μ μ λ‘컬 λ³μλΏλ§ μλλΌ ν¬μΈν° μ νμ λ§€κ°λ³μμλ μ μ©ν μ μμ΅λλ€.
μΆμ² : opennet.ru
