LLVM 10.0 ಕಂಪೈಲರ್ ಸೂಟ್‌ನ ಬಿಡುಗಡೆ

ಆರು ತಿಂಗಳ ಅಭಿವೃದ್ಧಿಯ ನಂತರ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ ಯೋಜನೆಯ ಬಿಡುಗಡೆ LLVM 10.0 — GCC-ಹೊಂದಾಣಿಕೆಯ ಪರಿಕರಗಳು (ಕಂಪೈಲರ್‌ಗಳು, ಆಪ್ಟಿಮೈಜರ್‌ಗಳು ಮತ್ತು ಕೋಡ್ ಜನರೇಟರ್‌ಗಳು), ಪ್ರೋಗ್ರಾಂಗಳನ್ನು RISC ತರಹದ ವರ್ಚುವಲ್ ಸೂಚನೆಗಳ ಮಧ್ಯಂತರ ಬಿಟ್‌ಕೋಡ್‌ಗೆ ಕಂಪೈಲ್ ಮಾಡುವುದು (ಬಹು-ಹಂತದ ಆಪ್ಟಿಮೈಸೇಶನ್ ಸಿಸ್ಟಮ್‌ನೊಂದಿಗೆ ಕಡಿಮೆ-ಮಟ್ಟದ ವರ್ಚುವಲ್ ಯಂತ್ರ). ರಚಿತವಾದ ಸೂಡೊಕೋಡ್ ಅನ್ನು JIT ಕಂಪೈಲರ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಪ್ರೋಗ್ರಾಂ ಎಕ್ಸಿಕ್ಯೂಶನ್ ಸಮಯದಲ್ಲಿ ನೇರವಾಗಿ ಯಂತ್ರ ಸೂಚನೆಗಳಾಗಿ ಪರಿವರ್ತಿಸಬಹುದು.

LLVM 10.0 ನಲ್ಲಿನ ಹೊಸ ವೈಶಿಷ್ಟ್ಯಗಳು C++ ಕಾನ್ಸೆಪ್ಟ್‌ಗಳಿಗೆ ಬೆಂಬಲವನ್ನು ಒಳಗೊಂಡಿವೆ, ಇನ್ನು ಮುಂದೆ ಕ್ಲಾಂಗ್ ಅನ್ನು ಪ್ರತ್ಯೇಕ ಪ್ರಕ್ರಿಯೆಯಾಗಿ ರನ್ ಮಾಡುವುದಿಲ್ಲ, ವಿಂಡೋಸ್‌ಗಾಗಿ CFG (ಕಂಟ್ರೋಲ್ ಫ್ಲೋ ಗಾರ್ಡ್) ಚೆಕ್‌ಗಳಿಗೆ ಬೆಂಬಲ ಮತ್ತು ಹೊಸ CPU ಸಾಮರ್ಥ್ಯಗಳಿಗೆ ಬೆಂಬಲ.

ಅಭಿವೃದ್ಧಿಗಳು ಕ್ಲಾಂಗ್ 10.0 ರಲ್ಲಿ:

  • "ಗಾಗಿ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆಪರಿಕಲ್ಪನೆ", C++ ಟೆಂಪ್ಲೇಟ್ ವಿಸ್ತರಣೆಯನ್ನು ಮುಂದಿನ ಮಾನದಂಡದಲ್ಲಿ ಸೇರಿಸಲಾಗುವುದು, C++2a (-std=c++2a ಫ್ಲ್ಯಾಗ್‌ನಿಂದ ಆನ್ ಮಾಡಲಾಗಿದೆ).
    ಕಂಪೈಲ್ ಸಮಯದಲ್ಲಿ, ಟೆಂಪ್ಲೇಟ್ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳಾಗಿ ಸ್ವೀಕರಿಸಬಹುದಾದ ಆರ್ಗ್ಯುಮೆಂಟ್‌ಗಳ ಗುಂಪನ್ನು ಮಿತಿಗೊಳಿಸುವ ಟೆಂಪ್ಲೇಟ್ ಪ್ಯಾರಾಮೀಟರ್ ಅವಶ್ಯಕತೆಗಳ ಗುಂಪನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು ಪರಿಕಲ್ಪನೆಗಳು ನಿಮಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಡುತ್ತವೆ. ಟೆಂಪ್ಲೇಟ್‌ನಲ್ಲಿ ಬಳಸಲಾದ ಡೇಟಾ ಪ್ರಕಾರಗಳ ಗುಣಲಕ್ಷಣಗಳು ಮತ್ತು ಇನ್‌ಪುಟ್ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳ ಡೇಟಾ ಪ್ರಕಾರದ ಗುಣಲಕ್ಷಣಗಳ ನಡುವಿನ ತಾರ್ಕಿಕ ಅಸಂಗತತೆಯನ್ನು ತಪ್ಪಿಸಲು ಪರಿಕಲ್ಪನೆಗಳನ್ನು ಬಳಸಬಹುದು.

    ಟೆಂಪ್ಲೇಟ್
    ಪರಿಕಲ್ಪನೆ ಸಮಾನತೆ ಹೋಲಿಸಬಹುದಾದ = ಅಗತ್ಯವಿದೆ (T a, T b) {
    { a == b } -> std :: boolean;
    {a != b } -> std::boolean;
    };

  • ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ, ಸಂಕಲನವನ್ನು ನಿರ್ವಹಿಸುವ ಪ್ರತ್ಯೇಕ ಪ್ರಕ್ರಿಯೆಯ ("ಕ್ಲ್ಯಾಂಗ್ -ಸಿಸಿ 1") ಉಡಾವಣೆ ನಿಲ್ಲಿಸಲಾಗಿದೆ. ಸಂಕಲನವನ್ನು ಈಗ ಮುಖ್ಯ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ಮಾಡಲಾಗುತ್ತದೆ ಮತ್ತು ಹಳೆಯ ನಡವಳಿಕೆಯನ್ನು ಪುನಃಸ್ಥಾಪಿಸಲು "-fno-integrated-cc1" ಆಯ್ಕೆಯನ್ನು ಬಳಸಬಹುದು.
  • ಹೊಸ ರೋಗನಿರ್ಣಯ ವಿಧಾನಗಳು:
    • "-Wc99-designator" ಮತ್ತು "-Wreorder-init-list" C99 ನಲ್ಲಿ C99 ನಲ್ಲಿ ಸರಿಯಾಗಿದೆ ಆದರೆ C++20 ನಲ್ಲಿ ಅಲ್ಲದ ಸಂದರ್ಭಗಳಲ್ಲಿ CXNUMX ಇನಿಶಿಯಲೈಜರ್‌ಗಳನ್ನು C++ ಮೋಡ್‌ನಲ್ಲಿ ಬಳಸುವುದರ ವಿರುದ್ಧ ಎಚ್ಚರಿಸುತ್ತದೆ.
    • "-Wsizeof-array-div" - "int arr[10] ನಂತಹ ಸಂದರ್ಭಗಳನ್ನು ಹಿಡಿಯುತ್ತದೆ; …sizeof(arr) / sizeof(short)…” ("sizeof(arr) / sizeof(int)" ಆಗಿರಬೇಕು).
    • "-Wxor-used-as-po" - ಕಾರ್ಯಾಚರಣೆಗಳಲ್ಲಿ "^" (xor) ಆಪರೇಟರ್‌ನ ಬಳಕೆಯಂತಹ ರಚನೆಗಳ ಬಳಕೆಯ ವಿರುದ್ಧ ಎಚ್ಚರಿಕೆ ನೀಡುತ್ತದೆ, ಅದು ಘಾತೀಯ (2^16) ನೊಂದಿಗೆ ಗೊಂದಲಕ್ಕೊಳಗಾಗುತ್ತದೆ.
    • "-Wfinal-dtor-non-Final-class" - "ಅಂತಿಮ" ಸ್ಪೆಸಿಫೈಯರ್‌ನೊಂದಿಗೆ ಗುರುತಿಸದ, ಆದರೆ "ಅಂತಿಮ" ಗುಣಲಕ್ಷಣದೊಂದಿಗೆ ವಿಧ್ವಂಸಕವನ್ನು ಹೊಂದಿರುವ ತರಗತಿಗಳ ಬಗ್ಗೆ ಎಚ್ಚರಿಸುತ್ತದೆ.
    • "-Wtautological-bitwise-compare" ಎಂಬುದು ಬಿಟ್‌ವೈಸ್ ಕಾರ್ಯಾಚರಣೆ ಮತ್ತು ಸ್ಥಿರಾಂಕದ ನಡುವಿನ ಟೌಟೊಲಾಜಿಕಲ್ ಹೋಲಿಕೆಗಳನ್ನು ನಿರ್ಣಯಿಸಲು ಮತ್ತು ಬಿಟ್‌ವೈಸ್ ಅಥವಾ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ನಕಾರಾತ್ಮಕವಲ್ಲದ ಸಂಖ್ಯೆಗೆ ಅನ್ವಯಿಸುವ ಯಾವಾಗಲೂ-ನಿಜವಾದ ಹೋಲಿಕೆಗಳನ್ನು ಗುರುತಿಸಲು ಎಚ್ಚರಿಕೆಗಳ ಗುಂಪಾಗಿದೆ.
    • "-Wbitwise-conditional-parentheses" ತಾರ್ಕಿಕ ನಿರ್ವಾಹಕರು ಮತ್ತು (&) ಮತ್ತು OR (|) ಅನ್ನು ಷರತ್ತುಬದ್ಧ ಆಪರೇಟರ್ (?:) ನೊಂದಿಗೆ ಮಿಶ್ರಣ ಮಾಡುವಾಗ ಸಮಸ್ಯೆಗಳ ಬಗ್ಗೆ ಎಚ್ಚರಿಸುತ್ತದೆ.
    • "-Wmisleading-indentation" ಎಂಬುದು GCC ಯಿಂದ ಅದೇ ಹೆಸರಿನ ಚೆಕ್‌ನ ಅನಲಾಗ್ ಆಗಿದೆ, ಇದು ಇಂಡೆಂಟ್ ಮಾಡಲಾದ ಅಭಿವ್ಯಕ್ತಿಗಳ ಬಗ್ಗೆ ಎಚ್ಚರಿಕೆ ನೀಡುತ್ತದೆ, ಅವುಗಳು if/else/for/while ಬ್ಲಾಕ್‌ನ ಭಾಗವಾಗಿದೆ, ಆದರೆ ವಾಸ್ತವವಾಗಿ ಅವುಗಳನ್ನು ಈ ಬ್ಲಾಕ್‌ನಲ್ಲಿ ಸೇರಿಸಲಾಗಿಲ್ಲ .
    • "-ವೆಕ್ಸ್ಟ್ರಾ" ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವಾಗ, "-Wdeprecated-copy" ಚೆಕ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತದೆ, ಕನ್ಸ್ಟ್ರಕ್ಟರ್‌ಗಳ ಬಳಕೆಯ ಬಗ್ಗೆ ಎಚ್ಚರಿಕೆ ನೀಡುತ್ತದೆ
      ಸ್ಪಷ್ಟವಾದ ವಿಧ್ವಂಸಕ ವ್ಯಾಖ್ಯಾನದೊಂದಿಗೆ ತರಗತಿಗಳಲ್ಲಿ "ಮೂವ್" ಮತ್ತು "ನಕಲು".

    • "-Wtautological-overlap-compare", "-Wsizeof-pointer-div", "-Wtautological-compare", "-Wrange-loop-analysis" ತಪಾಸಣೆಗಳನ್ನು ವಿಸ್ತರಿಸಲಾಗಿದೆ.
    • "-Wbitwise-op-parentheses" ಮತ್ತು "-Wlogical-op-parentheses" ತಪಾಸಣೆಗಳನ್ನು ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ.
  • C ಮತ್ತು C++ ಕೋಡ್‌ನಲ್ಲಿ, ಪಾಯಿಂಟರ್ ಅಂಕಗಣಿತದ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಅರೇಗಳಲ್ಲಿ ಮಾತ್ರ ಅನುಮತಿಸಲಾಗುತ್ತದೆ. "-fsanitize=pointer-overflow" ಮೋಡ್‌ನಲ್ಲಿರುವ ವಿವರಿಸಲಾಗದ ಬಿಹೇವಿಯರ್ ಸ್ಯಾನಿಟೈಜರ್ ಈಗ ಶೂನ್ಯವಲ್ಲದ ಪಾಯಿಂಟರ್‌ಗೆ ಶೂನ್ಯವಲ್ಲದ ಆಫ್‌ಸೆಟ್ ಅನ್ನು ಸೇರಿಸುವುದು ಅಥವಾ ಶೂನ್ಯವಲ್ಲದ ಪಾಯಿಂಟರ್‌ನಿಂದ ಪೂರ್ಣಾಂಕವನ್ನು ಕಳೆಯುವಾಗ ಶೂನ್ಯ ಪಾಯಿಂಟರ್ ಅನ್ನು ರಚಿಸುವಂತಹ ಪ್ರಕರಣಗಳನ್ನು ಹಿಡಿಯುತ್ತದೆ.
  • "-fsanitize=inmplicit-conversion" (ಇಂಪ್ಲಿಸಿಟ್ ಕನ್ವರ್ಶನ್ ಸ್ಯಾನಿಟೈಜರ್) ಮೋಡ್ ಅನ್ನು "int" ಪ್ರಕಾರಕ್ಕಿಂತ ಸ್ವಲ್ಪ ಚಿಕ್ಕ ಗಾತ್ರದ ಪ್ರಕಾರಗಳಿಗೆ ಇನ್ಕ್ರಿಮೆಂಟ್ ಮತ್ತು ಡಿಕ್ರಿಮೆಂಟ್ ಕಾರ್ಯಾಚರಣೆಗಳ ಸಮಸ್ಯೆಗಳನ್ನು ಗುರುತಿಸಲು ಅಳವಡಿಸಲಾಗಿದೆ.
  • x86 ಟಾರ್ಗೆಟ್ ಆರ್ಕಿಟೆಕ್ಚರ್‌ಗಳನ್ನು ಆಯ್ಕೆಮಾಡುವಾಗ "-march=skylake-avx512", "-march=icelake-client", "-march=icelake-server", "-march=cascadelake" ಮತ್ತು "-march=cooperlake" ಡೀಫಾಲ್ಟ್ ಆಗಿ ವೆಕ್ಟರೈಸ್ಡ್ ದಿ ಕೋಡ್ 512-ಬಿಟ್ zmm ರೆಜಿಸ್ಟರ್‌ಗಳನ್ನು ಬಳಸುವುದನ್ನು ನಿಲ್ಲಿಸಿದೆ, ಮೂಲ ಕೋಡ್‌ನಲ್ಲಿ ಅವುಗಳ ನೇರ ಸೂಚನೆಯನ್ನು ಹೊರತುಪಡಿಸಿ. ಕಾರಣವೆಂದರೆ 512-ಬಿಟ್ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ನಿರ್ವಹಿಸುವಾಗ CPU ಆವರ್ತನವು ಕಡಿಮೆಯಾಗುತ್ತದೆ, ಇದು ಒಟ್ಟಾರೆ ಕಾರ್ಯಕ್ಷಮತೆಯ ಮೇಲೆ ನಕಾರಾತ್ಮಕ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ. ಹೊಸ ನಡವಳಿಕೆಯನ್ನು ಬದಲಾಯಿಸಲು, "-mprefer-vector-width=512" ಆಯ್ಕೆಯನ್ನು ಒದಗಿಸಲಾಗಿದೆ.
  • "-ಫ್ಲಾಕ್ಸ್-ವೆಕ್ಟರ್-ಪರಿವರ್ತನೆಗಳು" ಧ್ವಜದ ನಡವಳಿಕೆಯು GCC ಯಂತೆಯೇ ಇರುತ್ತದೆ: ಪೂರ್ಣಾಂಕ ಮತ್ತು ಫ್ಲೋಟಿಂಗ್-ಪಾಯಿಂಟ್ ವೆಕ್ಟರ್‌ಗಳ ನಡುವಿನ ಸೂಚ್ಯ ವೆಕ್ಟರ್ ಬಿಟ್ ಪರಿವರ್ತನೆಗಳನ್ನು ನಿಷೇಧಿಸಲಾಗಿದೆ. ಈ ಮಿತಿಯನ್ನು ತೊಡೆದುಹಾಕಲು, ಧ್ವಜವನ್ನು ಬಳಸಲು ಪ್ರಸ್ತಾಪಿಸಲಾಗಿದೆ
    "-flax-vector-conversions=all" ಇದು ಡೀಫಾಲ್ಟ್ ಆಗಿದೆ.

  • ಆಕ್ಟಿಯಾನ್ ಕುಟುಂಬದ MIPS CPU ಗಳಿಗೆ ಸುಧಾರಿತ ಬೆಂಬಲ. ಮಾನ್ಯ CPU ಪ್ರಕಾರಗಳ ಪಟ್ಟಿಗೆ "octeon+" ಅನ್ನು ಸೇರಿಸಲಾಗಿದೆ.
  • WebAssembly ಮಧ್ಯಂತರ ಕೋಡ್‌ಗೆ ಜೋಡಿಸುವಾಗ, ವ್ಯವಸ್ಥೆಯಲ್ಲಿ ಲಭ್ಯವಿದ್ದರೆ, ವಾಸ್ಮ್-ಆಪ್ಟ್ ಆಪ್ಟಿಮೈಜರ್ ಅನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕರೆಯಲಾಗುತ್ತದೆ.
  • RISC-V ಆರ್ಕಿಟೆಕ್ಚರ್ ಆಧಾರಿತ ವ್ಯವಸ್ಥೆಗಳಿಗೆ, ಫ್ಲೋಟಿಂಗ್ ಪಾಯಿಂಟ್ ಮೌಲ್ಯಗಳನ್ನು ಸಂಗ್ರಹಿಸುವ ರೆಜಿಸ್ಟರ್‌ಗಳ ಬಳಕೆಯನ್ನು ಅಸೆಂಬ್ಲರ್ ಇನ್‌ಲೈನ್ ಇನ್ಸರ್ಟ್‌ಗಳ ಷರತ್ತುಬದ್ಧ ಬ್ಲಾಕ್‌ಗಳಲ್ಲಿ ಅನುಮತಿಸಲಾಗಿದೆ.
  • ಹೊಸ ಕಂಪೈಲರ್ ಫ್ಲ್ಯಾಗ್‌ಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ: "__GNUC__" ಮತ್ತು ಅದೇ ರೀತಿಯ ಮ್ಯಾಕ್ರೋಗಳಿಗಾಗಿ ಆವೃತ್ತಿಯ ಮೌಲ್ಯವನ್ನು ಹೊಂದಿಸಲು "-fgnuc-version"; "_fmacro-prefix-map=OLD=NEW" ಡೈರೆಕ್ಟರಿ ಪೂರ್ವಪ್ರತ್ಯಯ OLD ಅನ್ನು NEW ನೊಂದಿಗೆ ಬದಲಾಯಿಸಲು "__FILE__" ನಂತಹ ಮ್ಯಾಕ್ರೋಗಳಲ್ಲಿ; "-fpatchable-function-entry=N[,M]" ಫಂಕ್ಷನ್ ಪ್ರವೇಶ ಬಿಂದುವಿನ ಮೊದಲು ಮತ್ತು ನಂತರ ನಿರ್ದಿಷ್ಟ ಸಂಖ್ಯೆಯ NOP ಸೂಚನೆಗಳನ್ನು ಉತ್ಪಾದಿಸಲು. RISC-V ಗಾಗಿ
    "-ffixed-xX", "-mcmodel=medany" ಮತ್ತು "-mcmodel=medlow" ಫ್ಲ್ಯಾಗ್‌ಗಳಿಗೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ.

  • '__attribute__((ಗುರಿ("ಶಾಖೆ-ಸಂರಕ್ಷಣೆ=..."))) ಗುಣಲಕ್ಷಣಕ್ಕೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ, ಇದರ ಪರಿಣಾಮವು ಆಯ್ಕೆಯನ್ನು ಹೋಲುತ್ತದೆ - ಶಾಖೆ-ರಕ್ಷಣೆ.
  • ವಿಂಡೋಸ್ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್‌ನಲ್ಲಿ, "-cfguard" ಫ್ಲ್ಯಾಗ್ ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವಾಗ, ಪರೋಕ್ಷ ಕಾರ್ಯ ಕರೆಗಳಿಗಾಗಿ ಮರಣದಂಡನೆ ಹರಿವಿನ ಸಮಗ್ರತೆಯ ಪರಿಶೀಲನೆಗಳ (ಕಂಟ್ರೋಲ್ ಫ್ಲೋ ಗಾರ್ಡ್) ಪರ್ಯಾಯವನ್ನು ಅಳವಡಿಸಲಾಗಿದೆ. ಚೆಕ್ ಪರ್ಯಾಯವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು, ನೀವು "-cfguard-nochecks" ಫ್ಲ್ಯಾಗ್ ಅಥವಾ "__declspec(guard(nocf))" ಮಾರ್ಪಡಿಸುವಿಕೆಯನ್ನು ಬಳಸಬಹುದು.
  • gnu_inline ಗುಣಲಕ್ಷಣದ ವರ್ತನೆಯು "ಬಾಹ್ಯ" ಕೀವರ್ಡ್ ಇಲ್ಲದೆ ಬಳಸುವ ಸಂದರ್ಭಗಳಲ್ಲಿ GCC ಯಂತೆಯೇ ಇರುತ್ತದೆ.
  • OpenCL ಮತ್ತು CUDA ಬೆಂಬಲದೊಂದಿಗೆ ಸಂಬಂಧಿಸಿದ ಸಾಮರ್ಥ್ಯಗಳನ್ನು ವಿಸ್ತರಿಸಲಾಗಿದೆ. ಹೊಸ OpenMP 5.0 ವೈಶಿಷ್ಟ್ಯಗಳಿಗೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ.
  • ಕ್ಲಾಂಗ್-ಫಾರ್ಮ್ಯಾಟ್ ಉಪಯುಕ್ತತೆಗೆ ಪ್ರಮಾಣಿತ ಆಯ್ಕೆಯನ್ನು ಸೇರಿಸಲಾಗಿದೆ, ಇದು ಕೋಡ್ ಅನ್ನು ಪಾರ್ಸಿಂಗ್ ಮಾಡುವಾಗ ಮತ್ತು ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡುವಾಗ ಬಳಸಲಾಗುವ C++ ಸ್ಟ್ಯಾಂಡರ್ಡ್‌ನ ಆವೃತ್ತಿಯನ್ನು ನಿರ್ಧರಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ (ಇತ್ತೀಚಿನ, ಆಟೋ, c++03, c++11, c++14, c++17, c++20 ).
  • ಸ್ಥಾಯೀ ವಿಶ್ಲೇಷಕಕ್ಕೆ ಹೊಸ ಚೆಕ್‌ಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ: alpha.cplusplus.PlacementNew ಸಾಕಷ್ಟು ಶೇಖರಣಾ ಸ್ಥಳವಿದೆಯೇ ಎಂದು ನಿರ್ಧರಿಸಲು, Fuchsia.HandleChecker Fuchsia ಹ್ಯಾಂಡ್ಲರ್‌ಗಳಿಗೆ ಸಂಬಂಧಿಸಿದ ಸೋರಿಕೆಗಳನ್ನು ಪತ್ತೆಹಚ್ಚಲು, security.insecureAPI.decodeValueOfObjCtype ಅನ್ನು ಬಳಸುವಾಗ ಸಂಭಾವ್ಯ ಬಫರ್ ಓವರ್‌ಫ್ಲೋಗಳನ್ನು ಪತ್ತೆಹಚ್ಚಲು. :at:] .
  • ಅನ್ ಡಿಫೈನ್ಡ್ ಬಿಹೇವಿಯರ್ ಸ್ಯಾನಿಟೈಜರ್ (UBSan) ಶೂನ್ಯವಲ್ಲದ ಆಫ್‌ಸೆಟ್‌ಗಳ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು NULL ಪಾಯಿಂಟರ್‌ಗಳಿಗೆ ಅಥವಾ ಅದರ ಪರಿಣಾಮವಾಗಿ NULL ಪಾಯಿಂಟರ್ ಆಫ್‌ಸೆಟ್ ಅನ್ನು ಹಿಡಿಯಲು ಅದರ ಪಾಯಿಂಟರ್ ಓವರ್‌ಫ್ಲೋ ಚೆಕ್‌ಗಳನ್ನು ವಿಸ್ತರಿಸಿದೆ.
  • ಲಿಂಟರ್ ಖಣಿಲು-ಅಚ್ಚುಕಟ್ಟಾದ ರಲ್ಲಿ ಸೇರಿಸಲಾಗಿದೆ ಹೊಸ ಚೆಕ್‌ಗಳ ದೊಡ್ಡ ಭಾಗ.

ಮುಖ್ಯ ನಾವೀನ್ಯತೆಗಳು LLVM 10.0:

  • ಚೌಕಟ್ಟಿಗೆ ಆಟ್ರಿಬ್ಯೂಟರ್ ಹೊಸ ಇಂಟರ್ಪ್ರೊಸಿಡರಲ್ ಆಪ್ಟಿಮೈಸೇಶನ್‌ಗಳು ಮತ್ತು ವಿಶ್ಲೇಷಕಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ. 19 ಗುಣಲಕ್ಷಣಗಳು 12 LLVM IR ಮತ್ತು ಜೀವಂತಿಕೆಯಂತಹ 12 ಅಮೂರ್ತ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಒಳಗೊಂಡಂತೆ 7 ವಿಭಿನ್ನ ಗುಣಲಕ್ಷಣಗಳ ಸ್ಥಿತಿಯನ್ನು ಊಹಿಸಲಾಗಿದೆ.
  • ಕಂಪೈಲರ್‌ನಲ್ಲಿ ನಿರ್ಮಿಸಲಾದ ಹೊಸ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಗಣಿತದ ಕಾರ್ಯಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ (ಅಂತರ್ಗತಗಳು), ಇವುಗಳನ್ನು ಸಂಕಲನದ ಸಮಯದಲ್ಲಿ ಸಮರ್ಥ ವೆಕ್ಟರ್ ಸೂಚನೆಗಳಿಂದ ಬದಲಾಯಿಸಲಾಗುತ್ತದೆ.
  • X86, AArch64, ARM, SystemZ, MIPS, AMDGPU ಮತ್ತು PowerPC ಆರ್ಕಿಟೆಕ್ಚರ್‌ಗಳಿಗೆ ಬ್ಯಾಕೆಂಡ್‌ಗಳಿಗೆ ಹಲವಾರು ಸುಧಾರಣೆಗಳನ್ನು ಮಾಡಲಾಗಿದೆ. CPU ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ
    ಕಾರ್ಟೆಕ್ಸ್-A65, ಕಾರ್ಟೆಕ್ಸ್-A65AE, ನಿಯೋವರ್ಸ್ E1 ಮತ್ತು ನಿಯೋವರ್ಸ್ N1. ARMv8.1-M ಗಾಗಿ, ಕೋಡ್ ಉತ್ಪಾದನೆಯ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಆಪ್ಟಿಮೈಸ್ ಮಾಡಲಾಗಿದೆ (ಉದಾಹರಣೆಗೆ, ಕನಿಷ್ಠ ಓವರ್‌ಹೆಡ್‌ನೊಂದಿಗೆ ಲೂಪ್‌ಗಳಿಗೆ ಬೆಂಬಲವು ಕಾಣಿಸಿಕೊಂಡಿದೆ) ಮತ್ತು MVE ವಿಸ್ತರಣೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಆಟೋವೆಕ್ಟರೈಸೇಶನ್‌ಗೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ. ಸುಧಾರಿತ CPU MIPS Octeon ಬೆಂಬಲ. PowerPC ಗಾಗಿ, MASSV (ಗಣಿತದ ವೇಗವರ್ಧಕ ಉಪವ್ಯವಸ್ಥೆ) ಲೈಬ್ರರಿಯನ್ನು ಬಳಸಿಕೊಂಡು ಗಣಿತದ ಸಬ್‌ರುಟೀನ್‌ಗಳ ವೆಕ್ಟರೈಸೇಶನ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ, ಕೋಡ್ ಉತ್ಪಾದನೆಯನ್ನು ಸುಧಾರಿಸಲಾಗಿದೆ ಮತ್ತು ಲೂಪ್‌ಗಳಿಂದ ಮೆಮೊರಿ ಪ್ರವೇಶವನ್ನು ಆಪ್ಟಿಮೈಸ್ ಮಾಡಲಾಗಿದೆ. x86 ಗಾಗಿ, v2i32, v4i16, v2i16, v8i8, v4i8 ಮತ್ತು v2i8 ವೆಕ್ಟರ್ ಪ್ರಕಾರಗಳ ನಿರ್ವಹಣೆಯನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ.

  • WebAssembly ಗಾಗಿ ಸುಧಾರಿತ ಕೋಡ್ ಜನರೇಟರ್. TLS (ಥ್ರೆಡ್-ಲೋಕಲ್ ಸ್ಟೋರೇಜ್) ಮತ್ತು atomic.fence ಸೂಚನೆಗಳಿಗೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ. SIMD ಬೆಂಬಲವನ್ನು ಗಮನಾರ್ಹವಾಗಿ ವಿಸ್ತರಿಸಲಾಗಿದೆ. WebAssembly ಆಬ್ಜೆಕ್ಟ್ ಫೈಲ್‌ಗಳು ಈಗ ಬಹು-ಮೌಲ್ಯದ ಕಾರ್ಯ ಸಹಿಗಳನ್ನು ಬಳಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಹೊಂದಿವೆ.
  • ಲೂಪ್ಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವಾಗ ವಿಶ್ಲೇಷಕವನ್ನು ಬಳಸಲಾಗುತ್ತದೆ ಮೆಮೊರಿSSA, ಇದು ವಿಭಿನ್ನ ಮೆಮೊರಿ ಕಾರ್ಯಾಚರಣೆಗಳ ನಡುವಿನ ಅವಲಂಬನೆಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. MemorySSA ಸಂಕಲನ ಮತ್ತು ಕಾರ್ಯಗತಗೊಳಿಸುವ ಸಮಯವನ್ನು ಕಡಿಮೆ ಮಾಡಬಹುದು ಅಥವಾ ಕಾರ್ಯಕ್ಷಮತೆಯ ನಷ್ಟವಿಲ್ಲದೆಯೇ AliasSetTracker ಬದಲಿಗೆ ಬಳಸಬಹುದು.
  • LLDB ಡೀಬಗರ್ DWARF v5 ಫಾರ್ಮ್ಯಾಟ್‌ಗೆ ಬೆಂಬಲವನ್ನು ಗಣನೀಯವಾಗಿ ಸುಧಾರಿಸಿದೆ. MinGW ನೊಂದಿಗೆ ನಿರ್ಮಿಸಲು ಸುಧಾರಿತ ಬೆಂಬಲ
    ಮತ್ತು ARM ಮತ್ತು ARM64 ಆರ್ಕಿಟೆಕ್ಚರ್‌ಗಳಿಗಾಗಿ ವಿಂಡೋಸ್ ಎಕ್ಸಿಕ್ಯೂಟಬಲ್‌ಗಳನ್ನು ಡೀಬಗ್ ಮಾಡಲು ಆರಂಭಿಕ ಸಾಮರ್ಥ್ಯವನ್ನು ಸೇರಿಸಲಾಗಿದೆ. ಟ್ಯಾಬ್ ಒತ್ತುವುದರ ಮೂಲಕ ಇನ್‌ಪುಟ್ ಅನ್ನು ಸ್ವಯಂಪೂರ್ಣಗೊಳಿಸುವಾಗ ನೀಡಲಾಗುವ ಆಯ್ಕೆಗಳ ವಿವರಣೆಯನ್ನು ಸೇರಿಸಲಾಗಿದೆ.

  • ವಿಸ್ತರಿಸಲಾಗಿದೆ LLD ಲಿಂಕರ್ ಸಾಮರ್ಥ್ಯಗಳು. GNU ಲಿಂಕರ್‌ನೊಂದಿಗೆ ಗ್ಲೋಬ್ ಟೆಂಪ್ಲೇಟ್‌ಗಳ ಸಂಪೂರ್ಣ ಹೊಂದಾಣಿಕೆಯನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುವುದು, ಸಂಕುಚಿತ ಡೀಬಗ್ ವಿಭಾಗಗಳಿಗೆ ".zdebug" ಬೆಂಬಲವನ್ನು ಸೇರಿಸುವುದು, .note.gnu.property ವಿಭಾಗವನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು PT_GNU_PROPERTY ಆಸ್ತಿಯನ್ನು ಸೇರಿಸುವುದು ಸೇರಿದಂತೆ ELF ಫಾರ್ಮ್ಯಾಟ್‌ಗೆ ಸುಧಾರಿತ ಬೆಂಬಲ (ಭವಿಷ್ಯದಲ್ಲಿ ಬಳಸಬಹುದು ಲಿನಕ್ಸ್ ಕರ್ನಲ್‌ಗಳು),
    "-z noseparate-code", "-z ಪ್ರತ್ಯೇಕ-ಕೋಡ್" ಮತ್ತು "-z ಪ್ರತ್ಯೇಕ-ಲೋಡ್ ಮಾಡಬಹುದಾದ-ವಿಭಾಗಗಳು" ವಿಧಾನಗಳನ್ನು ಅಳವಡಿಸಲಾಗಿದೆ. MinGW ಮತ್ತು WebAssembly ಗೆ ಸುಧಾರಿತ ಬೆಂಬಲ.

ಮೂಲ: opennet.ru

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ