{"id":391513,"date":"2024-06-29T09:51:59","date_gmt":"2024-06-29T09:51:59","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=391513"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=391513","title":{"rendered":"<span>\u0412\u044b\u044f\u0432\u043b\u044f\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0440\u0435\u043b\u0438\u0437\u0435 LLVM 13.0.0<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/55c\/8fd\/cd5\/55c8fdcd54e43716b78c0a88732e93ea.png\" alt=\"PVS-Studio \u0438 LLVM 13\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/55c\/8fd\/cd5\/55c8fdcd54e43716b78c0a88732e93ea.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0439 \u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043a\u043e\u0434\u0430, \u0447\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0441\u043c\u043e\u0433 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c PVS-Studio \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 LLVM 13.0.0.<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h2 id=\"kak-poyavilas-eta-statya\">\u041a\u0430\u043a \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f<\/h2>\n<p>  <\/p>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0432 \u043d\u0438\u0445 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u044b \u043a\u043e\u0434\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442\u0441\u044f. \u0420\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u044b, \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0432 \u0441\u0440\u0435\u0434\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a Visual Studio \u0438 CLion. \u0423 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0440\u0435\u0437\u043e\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u0435\u0441\u0442\u044c \u043b\u0438 \u0441\u043c\u044b\u0441\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430? \u0418\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0438\u043b\u0438 IDE?<\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044f \u043f\u0440\u043e\u0435\u043a\u0442, \u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u043e\u0434\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c\u0441\u044f \u0438\u043c\u0438 \u0438 \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 <a href=\"https:\/\/pvs-studio.com\/ru\/pvs-studio\/\">PVS-Studio<\/a> \u044d\u0442\u043e \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0412\u0440\u0435\u043c\u044f \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u0441 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0442, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u043c \u043b\u0438 \u043c\u044b \u0430\u043d\u0430\u043b\u0438\u0437 \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 X \u0438\u043b\u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440? \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u0438\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043d\u0430 \u0442\u0430\u043a\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u043d\u0430\u0448 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u041f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438 (<a href=\"https:\/\/pvs-studio.com\/ru\/blog\/posts\/cpp\/0814\/\">\u043f\u0440\u0438\u043c\u0435\u0440<\/a>), \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u043e\u0442\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 (<a href=\"https:\/\/pvs-studio.com\/ru\/blog\/posts\/cpp\/0824\/\">\u043f\u0440\u0438\u043c\u0435\u0440<\/a>) \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0443\u0447\u0430\u0442\u0441\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u0430 PVS-Studio \u0443\u0447\u0438\u0442\u0441\u044f \u0435\u0449\u0451 \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0412 \u044d\u0442\u043e\u043c \u0441\u0443\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u043e\u0434\u0430;<\/li>\n<li>\u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u044b \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a. \u0412\u0430\u0436\u043d\u043e \u0438 \u0438\u0445 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e, \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043b\u0451\u0433\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0440\u0430\u0437\u0432\u0438\u0442\u0430\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438, \u043a\u0430\u043a SonarQube, PlatformIO, Azure DevOps, Travis CI, CircleCI, GitLab CI\/CD, Jenkins \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0418, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043f\u0440\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0432\u044b\u0445 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b, \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0435, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u044e\u0442.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041d\u043e \u044d\u0442\u043e \u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b :). \u0417\u0430\u043a\u0440\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0443\u0439\u0442\u0438 \u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443. \u0412\u044b\u0445\u043e\u0434\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439, \u043a\u0430\u043a \u044d\u0442\u0430. \u041d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0438 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430.<\/p>\n<p>  <\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0439 \u0440\u0435\u043b\u0438\u0437 LLVM 13.0.0. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044e \u0438 \u043d\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u043d\u0435 \u0441\u0430\u043c LLVM. \u041f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043c\u044b \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0435\u043c \u043c\u043e\u0449\u044c PVS-Studio \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c Clang, Clang Static Analyzer \u0438 Clang-Tidy. \u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 LLVM. \u0418 \u0435\u0441\u043b\u0438, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u043d\u0430\u0439\u0442\u0438, \u044d\u0442\u043e \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u0443 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f PVS-Studio \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, <a href=\"https:\/\/pvs-studio.com\/ru\/blog\/posts\/cpp\/0771\/\">\u0437\u0434\u0435\u0441\u044c<\/a> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0451\u0439 \u0432\u0440\u0435\u043c\u0451\u043d LLVM 11.<\/p>\n<p>  <\/p>\n<h2 id=\"proverka-llvm\">\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 LLVM<\/h2>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f PVS-Studio \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0441\u0440\u0435\u0434\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0423 \u043c\u0435\u043d\u044f \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435 \u0438\u0437 \u0441\u0440\u0435\u0434 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 Visual Studio 2019. \u0415\u0439 \u044f \u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u0440\u043e\u0441\u0442:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b <a href=\"https:\/\/github.com\/llvm\/llvm-project\/releases\/tag\/llvmorg-13.0.0\">LLVM 13.0.0<\/a>;<\/li>\n<li>\u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043b\u044f VS2019: cmake -S llvm -B build -G &#171;Visual Studio 16 2019&#187;;<\/li>\n<li>\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c. \u042d\u0442\u043e\u0442 \u0448\u0430\u0433 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 inc-\u0444\u0430\u0439\u043b\u044b. \u0411\u0435\u0437 \u043d\u0438\u0445 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0430 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u0438\u0435 cpp-\u0444\u0430\u0439\u043b\u044b;<\/li>\n<li>\u0443\u0434\u0438\u0432\u043b\u044f\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043d\u0430 100 Gb;<\/li>\n<li>\u0432 \u043c\u0435\u043d\u044e Visual Studio \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u0443 PVS-Studio \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442;<\/li>\n<li>profit.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043d\u0435 \u0432\u0441\u0451 \u0442\u0430\u043a \u0440\u0430\u0434\u0443\u0436\u043d\u043e. \u0411\u0435\u0437 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0432\u044b, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0441\u0442\u043e\u043b\u043a\u043d\u0451\u0442\u0435\u0441\u044c \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043b\u043e\u0436\u043d\u044b\u0445 \u0438\u043b\u0438 \u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 (\u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430) \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u043c\u0435\u043d\u044f \u043b\u0438\u0448\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u043e\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0430\u0439\u0442\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0431\u0430\u0433\u043e\u0432, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u0445 \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438. \u041d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0447\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e, \u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430. \u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e, \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0434\u043e\u043b\u0433\u043e\u043c \u0438 \u0441\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u0438\u0445. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f\u043c\u0438, \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043b\u0438\u043a\u0432\u0438\u0434\u0438\u0440\u0443\u044f \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u0433. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u043e\u043f\u0438\u0441\u0430\u043d <a href=\"https:\/\/pvs-studio.com\/ru\/blog\/posts\/0743\/\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0438 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u044b \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0437\u0434\u0435\u0441\u044c \u0443\u0434\u0430\u043b\u044f\u0442\u044c\u0441\u044f \u043e\u0442 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0442\u0435\u043c\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0436\u0435, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e. <\/p>\n<p>  <\/p>\n<p>\u042f \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u043d\u0430 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043b\u043e\u0433\u0430 \u043e\u0434\u0438\u043d \u0432\u0435\u0447\u0435\u0440 \u0438 \u0432\u044b\u043f\u0438\u0441\u0430\u043b \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043c\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c. \u0423\u0432\u0435\u0440\u0435\u043d, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0448\u0438\u0431\u043e\u043a. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u0430\u0436\u0435 \u0442\u043e, \u0447\u0442\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0435\u0433\u043b\u043e \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u0432\u0448\u0438\u0441\u044c \u043f\u043e \u043e\u0442\u0447\u0451\u0442\u0443, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c 20 \u043e\u0448\u0438\u0431\u043e\u043a, \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0432 \u0432\u044b\u0433\u043e\u0434\u043d\u043e\u043c \u0441\u0432\u0435\u0442\u0435. <\/p>\n<p>  <\/p>\n<h2 id=\"opechatki\">\u041e\u043f\u0435\u0447\u0430\u0442\u043a\u0438<\/h2>\n<p>  <\/p>\n<p>PVS-Studio \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u043b \u0438 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0441\u0438\u043b\u0451\u043d \u0432 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u043e\u043f\u0435\u0447\u0430\u0442\u043e\u043a. \u041e\u043f\u0435\u0447\u0430\u0442\u043a\u0438 \u0441\u0440\u0430\u0437\u0443 \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u0438\u0434\u043d\u044b \u0432 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u043a\u043e\u0434\u0430. \u041d\u043e, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0441\u0432\u043e\u044e \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0443, \u044d\u0442\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u043e\u0431\u0437\u043e\u0440\u044b \u043a\u043e\u0434\u0430 \u0438 \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043c\u043e\u0440\u0449\u0438\u0442\u044c\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 :).<\/p>\n<p>  <\/p>\n<p>\u041d\u0435\u0441\u043b\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u0438\u0434\u0435\u0438 \u043f\u0440\u0430\u0432\u0438\u043b \u0434\u043b\u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0447\u0430\u0442\u043e\u043a. \u0410 \u0432\u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043a\u0443\u0434\u0430 \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u041d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u043b\u044e\u0441\u0442\u0438 \u0431\u0430\u043b\u0430\u043d\u0441 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 <a href=\"https:\/\/pvs-studio.com\/ru\/blog\/terms\/6461\/\">\u043b\u043e\u0436\u043d\u043e-\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f\u043c\u0438<\/a>. \u0412 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0435 Clang \u0438 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430\u0445 \u0435\u0441\u0442\u044c \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438 \u0434\u043b\u044f \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u0435\u0439 \u043e\u0448\u0438\u0431\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u043d\u0438\u0436\u0435. \u041d\u043e \u0440\u0430\u0437 \u043e\u043d\u0438 \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u043b\u0438, \u0437\u043d\u0430\u0447\u0438\u0442 \u0432 \u043d\u0430\u0448\u0435\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0435 \u044d\u0442\u0438 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0431\u043e\u043b\u0435\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<p>  <\/p>\n<h3 id=\"bag-n1-oshibka-konstruirovaniya-64-bitnogo-znacheniya-iz-dvuh-32-bitnyh-znacheniy\">\u0411\u0430\u0433 N1, \u043e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f 64-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0434\u0432\u0443\u0445 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">uint64_t uval; .... bool DWARFFormValue::extractValue(const DWARFDataExtractor &amp;Data,                                   uint64_t *OffsetPtr, dwarf::FormParams FP,                                   const DWARFContext *Ctx,                                   const DWARFUnit *CU) {   ....   case DW_FORM_LLVM_addrx_offset:     Value.uval = Data.getULEB128(OffsetPtr, &amp;Err) &lt;&lt; 32;     Value.uval = Data.getU32(OffsetPtr, &amp;Err);     break;   .... }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.com\/ru\/w\/v519\/\">V519<\/a> [CWE-563, CERT-MSC13-C] The &#8216;Value.uval&#8217; variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 334, 335. DWARFFormValue.cpp 335<\/p>\n<p>  <\/p>\n<p>\u041d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0432 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041e\u0431 \u044d\u0442\u043e\u043c \u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0430\u0432\u0442\u043e\u0440 \u043a\u043e\u0434\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0441\u043f\u0435\u0448\u0438\u043b \u0438 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043b \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0443, \u0437\u0430\u0431\u044b\u0432 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c &#8216;|&#8217;. \u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0437 \u0434\u0432\u0443\u0445 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043e\u0434\u043d\u043e 64-\u0431\u0438\u0442\u043d\u043e\u0435. \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">case DW_FORM_LLVM_addrx_offset:   Value.uval = Data.getULEB128(OffsetPtr, &amp;Err) &lt;&lt; 32;   Value.uval |= Data.getU32(OffsetPtr, &amp;Err);   break;<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"bag-n2-pospeshnyy-copy-paste-koda\">\u0411\u0430\u0433 N2, \u043f\u043e\u0441\u043f\u0435\u0448\u043d\u044b\u0439 copy-paste \u043a\u043e\u0434\u0430<\/h3>\n<p>  <\/p>\n<p>\u0412 \u043a\u043b\u0430\u0441\u0441\u0435 <em>ExecutorAddress<\/em> \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432. \u041f\u043e\u0447\u0442\u0438 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u043e\u0441\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/pvs-studio.com\/ru\/blog\/terms\/0068\/\">copy-paste<\/a>. \u0421\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u0435\u0441\u044c, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043a\u0443\u0447\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434, \u043d\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u044f \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">class ExecutorAddress {   ....   ExecutorAddress &amp;operator++() {     ++Addr;     return *this;   }   ExecutorAddress &amp;operator--() {     --Addr;     return *this;   }   ExecutorAddress operator++(int) { return ExecutorAddress(Addr++); }   ExecutorAddress operator--(int) { return ExecutorAddress(Addr++); }    ExecutorAddress &amp;operator+=(const ExecutorAddrDiff Delta) {     Addr += Delta.getValue();     return *this;   }    ExecutorAddress &amp;operator-=(const ExecutorAddrDiff Delta) {     Addr -= Delta.getValue();     return *this;   }   .... private:   uint64_t Addr = 0; }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0437\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0430\u0441\u043f\u043b\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u0431\u044b\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435. \u0410 \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u043a\u0443\u0447\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0438\u0441\u0430\u0442\u044c, \u043d\u043e \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434, \u0442\u043e \u043e\u043d &#171;\u043f\u0440\u0438\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442&#187; \u043a \u0441\u0435\u0431\u0435 \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<p>  <\/p>\n<p>\u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u044b \u043d\u0435 \u0443\u0441\u0442\u0430\u044e\u0442 \u0438 \u043d\u0435 \u043b\u0435\u043d\u044f\u0442\u0441\u044f :). PVS-Studio \u0445\u043e\u0440\u043e\u0448\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u043a\u043e\u0434\u0430, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044f \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u044d\u0442\u0438 \u0434\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">ExecutorAddress operator++(int) { return ExecutorAddress(Addr++); } ExecutorAddress operator--(int) { return ExecutorAddress(Addr++); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.com\/ru\/w\/v524\/\">V524<\/a> It is odd that the body of &#8216;&#8212;&#8216; function is fully equivalent to the body of &#8216;++&#8217; function. ExecutorAddress.h 104<\/p>\n<p>  <\/p>\n<p>\u042f\u0432\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430: \u0437\u0430\u0431\u044b\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 ++ \u043d\u0430 &#8212;.<\/p>\n<p>  <\/p>\n<h3 id=\"bag-n3-nikto-ne-umeet-pisat-funkcii-sravneniya\">\u0411\u0430\u0433 N3, \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">bool operator==(const BDVState &amp;Other) const {   return OriginalValue == OriginalValue &amp;&amp; BaseValue == Other.BaseValue &amp;&amp;     Status == Other.Status; }<\/code><\/pre>\n<p>  <\/p>\n<p><a href=\"https:\/\/pvs-studio.com\/ru\/w\/v501\/\">V501<\/a> [CWE-571] There are identical sub-expressions to the left and to the right of the &#8216;==&#8217; operator: OriginalValue == OriginalValue RewriteStatepointsForGC.cpp 758<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/f1c\/21d\/c50\/f1c21dc50713903f8555056632101a8f.png\" alt=\"\u041e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u0432 \u043a\u043e\u0434\u0435\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f1c\/21d\/c50\/f1c21dc50713903f8555056632101a8f.png\"\/><\/p>\n<p>  <\/p>\n<p>\u041a\u043b\u0430\u0441\u0441\u0438\u043a\u0430! \u042f \u0434\u0430\u0436\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0438\u0441\u0430\u043b \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u2014 &#171;<a href=\"https:\/\/pvs-studio.com\/ru\/blog\/posts\/cpp\/0509\/\">\u0417\u043b\u043e \u0436\u0438\u0432\u0451\u0442 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f<\/a>&#171;.<\/p>\n<p>  <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0444\u043e\u0440\u043c\u043b\u044f\u0442\u044c \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c. \u042f \u0431\u044b \u043e\u0444\u043e\u0440\u043c\u0438\u043b \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">bool operator==(const BDVState &amp;Other) const {   return        OriginalValue == OriginalValue     &amp;&amp; BaseValue == Other.BaseValue     &amp;&amp; Status == Other.Status; }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0430\u043a \u0434\u043b\u0438\u043d\u043d\u0435\u0435, \u043d\u043e \u0437\u0430\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u0430 \u043d\u0430 code review. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0434\u0430\u0436\u0435 \u0442\u0430\u043a \u043e\u0448\u0438\u0431\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438 \u043b\u0443\u0447\u0448\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440.<\/p>\n<p>  <\/p>\n<h3 id=\"bag-n4-nikto-ne-umeet-pisat-funkcii-sravneniya-ya-serezno\">\u0411\u0430\u0433 N4, \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f (\u044f \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e)<\/h3>\n<p>  <\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u0438, \u0447\u0442\u043e \u044f \u043f\u0440\u0435\u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e \u0438 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043b\u044f\u043f. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u044f\u0433\u043e\u0442\u0435\u044e\u0442 \u043a \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430\u043c. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043f\u0440\u0438\u043c\u0435\u0440.<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">bool TypeInfer::EnforceSmallerThan(TypeSetByHwMode &amp;Small,                                    TypeSetByHwMode &amp;Big) {   ....   if (Small.empty())     Changed |= EnforceAny(Small);   if (Big.empty())     Changed |= EnforceAny(Big);    assert(Small.hasDefault() &amp;&amp; Big.hasDefault());    SmallVector&lt;unsigned, 4> Modes;   union_modes(Small, Big, Modes);    for (unsigned M : Modes) {     TypeSetByHwMode::SetType &amp;S = Small.get(M);     TypeSetByHwMode::SetType &amp;B = Big.get(M);      if (any_of(S, isIntegerOrPtr) &amp;&amp; any_of(S, isIntegerOrPtr)) {       auto NotInt = [](MVT VT) { return !isIntegerOrPtr(VT); };       Changed |= berase_if(S, NotInt);       Changed |= berase_if(B, NotInt);     } else if (any_of(S, isFloatingPoint) &amp;&amp; any_of(B, isFloatingPoint)) {       auto NotFP = [](MVT VT) { return !isFloatingPoint(VT); };       Changed |= berase_if(S, NotFP);       Changed |= berase_if(B, NotFP);     } else if (S.empty() || B.empty()) {       Changed = !S.empty() || !B.empty();       S.clear();       B.clear();     } else {       TP.error(\"Incompatible types\");       return Changed;     }   .... }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u044f \u043f\u043e\u043a\u0430\u0436\u0443, \u0433\u0434\u0435 \u043e\u0448\u0438\u0431\u043a\u0430, \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0432\u043e\u044e \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043d\u0430\u0439\u0442\u0438 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0443 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u0412\u0441\u0442\u0430\u0432\u043b\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u0441\u0440\u0430\u0437\u0443 \u043d\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043e\u0442\u0432\u0435\u0442.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/2e0\/ce0\/be5\/2e0ce0be5675f1a7d0ab63003f077760.png\" alt=\"\u041d\u0430\u0439\u0434\u0438 \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 \u043a\u043e\u0434\u0435\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/2e0\/ce0\/be5\/2e0ce0be5675f1a7d0ab63003f077760.png\"\/><\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0437\u0434\u0435\u0441\u044c:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">if (any_of(S, isIntegerOrPtr) &amp;&amp; any_of(S, isIntegerOrPtr))<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.com\/ru\/w\/v501\/\">V501<\/a> [CWE-571] There are identical sub-expressions &#8216;any_of(S, isIntegerOrPtr)&#8217; to the left and to the right of the &#8216;&amp;&amp;&#8217; operator. CodeGenDAGPatterns.cpp 479<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">if (any_of(S, isIntegerOrPtr) &amp;&amp; any_of(B, isIntegerOrPtr))<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"bag-n5-formatirovanie-tablicey-ne-vsegda-pomogaet\">\u0411\u0430\u0433 N5, \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">LegalizerHelper::LegalizeResult LegalizerHelper::lowerRotate(MachineInstr &amp;MI) {   Register Dst = MI.getOperand(0).getReg();   Register Src = MI.getOperand(1).getReg();   Register Amt = MI.getOperand(2).getReg();   LLT DstTy = MRI.getType(Dst);   LLT SrcTy = MRI.getType(Dst);   LLT AmtTy = MRI.getType(Amt);   .... }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.com\/ru\/w\/v656\/\">V656<\/a> [CWE-665] Variables &#8216;DstTy&#8217;, &#8216;SrcTy&#8217; are initialized through the call to the same function. It&#8217;s probably an error or un-optimized code. Consider inspecting the &#8216;MRI.getType(Dst)&#8217; expression. Check lines: 5953, 5954. LegalizerHelper.cpp 5954<\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u043d\u0435\u0435 \u044f \u043f\u0438\u0441\u0430\u043b, \u0447\u0442\u043e \u043e\u0442 \u043e\u043f\u0435\u0447\u0430\u0442\u043e\u043a \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c\u0441\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439. \u0414\u0430, \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442, \u043d\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438 \u043d\u0435 \u0434\u0430\u0451\u0442. \u041f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0443. \u041d\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0442\u0430\u043c \u0435\u0441\u0442\u044c.<\/p>\n<p>  <\/p>\n<p>\u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043a\u043e\u0434 \u043f\u0438\u0441\u0430\u043b\u0441\u044f \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c. \u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u0442\u0440\u043e\u0447\u043a\u0443<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">LLT DstTy = MRI.getType(Dst);<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 <em>Dst<\/em> \u043d\u0430 <em>Src<\/em>:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">LLT SrcTy = MRI.getType(Dst);<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043a\u043e\u0434\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">LLT DstTy = MRI.getType(Dst); LLT SrcTy = MRI.getType(Src); LLT AmtTy = MRI.getType(Amt);<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"nulevye-ukazateli\">\u041d\u0443\u043b\u0435\u0432\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438<\/h2>\n<p>  <\/p>\n<p>\u041f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 C \u0438\u043b\u0438 C++ \u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0435 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0433\u0434\u0435-\u0442\u043e \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u2013 \u044d\u0442\u043e \u043d\u0430\u0443\u0447\u043d\u0430\u044f \u0444\u0430\u043d\u0442\u0430\u0441\u0442\u0438\u043a\u0430 :). \u0415\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u043c\u0435\u0441\u0442\u0430 \u0438 \u0432 LLVM. \u0418\u0437\u0443\u0447\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u043e \u043d\u0443\u043b\u0435\u0432\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0441\u043a\u0443\u0447\u043d\u043e \u0438 \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e. \u042f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0442\u0430\u043a\u0438\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043e\u0447\u0435\u043d\u044c \u0431\u0435\u0433\u043b\u043e \u0438 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u044e, \u0447\u0442\u043e \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0442\u0430\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<p>  <\/p>\n<h3 id=\"bag-n6-razymenovanie-ukazatelya-kotoryy-mozhet-byt-nulevym\">\u0411\u0430\u0433 N6, \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u044b\u043c<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">void DwarfCompileUnit::addLabelAddress(DIE &amp;Die, dwarf::Attribute Attribute,                                        const MCSymbol *Label) {   ....   if (Label)     DD->addArangeLabel(SymbolCU(this, Label));    bool UseAddrOffsetFormOrExpressions =       DD->useAddrOffsetForm() || DD->useAddrOffsetExpressions();    const MCSymbol *Base = nullptr;   if (Label->isInSection() &amp;&amp; UseAddrOffsetFormOrExpressions)     Base = DD->getSectionLabel(&amp;Label->getSection());   .... }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.com\/ru\/w\/v1004\/\">V1004<\/a> [CWE-476, CERT-EXP34-C] The &#8216;Label&#8217; pointer was used unsafely after it was verified against nullptr. Check lines: 74, 81. DwarfCompileUnit.cpp 81<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 &#171;<em>if (Label)<\/em>&#187; \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043d\u0430\u043c \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0443, \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c <em>Label<\/em> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u044b\u043c. \u041d\u043e \u043d\u0438\u0436\u0435 \u044d\u0442\u043e\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0441\u043c\u0435\u043b\u043e \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">if (Label->isInSection() &amp;&amp; UseAddrOffsetFormOrExpressions)<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0430\u043a \u044f\u0432\u043d\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<p>  <\/p>\n<h3 id=\"bag-n7-n9-razymenovanie-ukazatelya-kotoryy-mozhet-byt-nulevym\">\u0411\u0430\u0433 N7-N9, \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u044b\u043c<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">static bool HandleUse(....) {   ....   if (Pat->isLeaf()) {     DefInit *DI = dyn_cast&lt;DefInit>(Pat->getLeafValue());     if (!DI)       I.error(\"Input $\" + Pat->getName() + \" must be an identifier!\");     Rec = DI->getDef();   }   .... }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.com\/ru\/w\/v1004\/\">V1004<\/a> [CWE-476, CERT-EXP34-C] The &#8216;DI&#8217; pointer was used unsafely after it was verified against nullptr. Check lines: 3349, 3351. CodeGenDAGPatterns.cpp 3351<\/p>\n<p>  <\/p>\n<p>\u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c <em>DI<\/em> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u0441\u044f, \u043d\u043e \u0434\u0430\u043b\u0435\u0435 \u0441\u0440\u0430\u0437\u0443 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438. \u041e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c, \u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u044d\u0442\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u043e\u0439? \u0412\u0435\u0434\u044c \u0435\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c <em>DI<\/em> \u043d\u0443\u043b\u0435\u0432\u043e\u0439, \u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <em>error<\/em>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">void TreePattern::error(const Twine &amp;Msg) {   if (HasError)     return;   dump();   PrintError(TheRecord->getLoc(), \"In \" + TheRecord->getName() + \": \" + Msg);   HasError = true; }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0435\u0442, \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043a\u0430\u043a\u0438\u043c-\u043b\u0438\u0431\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f (\u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043b\u043e\u0433) \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u043f\u0430\u0440\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e:<\/p>\n<p>  <\/p>\n<ul>\n<li>V1004 [CWE-476, CERT-EXP34-C] The &#8216;OpDef&#8217; pointer was used unsafely after it was verified against nullptr. Check lines: 2843, 2844. CodeGenDAGPatterns.cpp 2844<\/li>\n<li>V1004 [CWE-476, CERT-EXP34-C] The &#8216;Val&#8217; pointer was used unsafely after it was verified against nullptr. Check lines: 3418, 3420. CodeGenDAGPatterns.cpp 3420<\/li>\n<\/ul>\n<p>  <\/p>\n<h3 id=\"bag-n10-nedostatochnaya-zaschita-ot-nulevogo-ukazatelya\">\u0411\u0430\u0433 N10, \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u0430\u044f \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">Error DWARFDebugLine::LineTable::parse(...., raw_ostream *OS, bool Verbose) {   assert((OS || !Verbose) &amp;&amp; \"cannot have verbose output without stream\");   ....   auto EmitRow = [&amp;] {     if (!TombstonedAddress) {       if (Verbose) {         *OS &lt;&lt; \"\\n\";         OS->indent(12);       }       if (OS)         State.Row.dump(*OS);       State.appendRowToMatrix();     }   };   .... }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.com\/ru\/w\/v595\/\">V595<\/a> [CWE-476, CERT-EXP12-C] The &#8216;OS&#8217; pointer was utilized before it was verified against nullptr. Check lines: 791, 793. DWARFDebugLine.cpp 791<\/p>\n<p>  <\/p>\n<p>\u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c OS \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u044b\u043c, \u043e \u0447\u0451\u043c \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 &#171;<em>if (OS)<\/em>&#171;. \u041e\u0434\u043d\u0430\u043a\u043e \u0440\u0430\u043d\u0435\u0435 \u044d\u0442\u043e\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d \u0431\u0435\u0437 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0435\u0441\u0442\u044c <em>assert<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u043e\u0442 \u043d\u0443\u043b\u0435\u0432\u044b\u0445 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439. \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e\u0433\u043e \u044f\u0432\u043d\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u0440\u0435\u043b\u0438\u0437\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0435 \u043c\u0430\u043a\u0440\u043e\u0441 <em>assert<\/em> \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u0438\u0447\u0442\u043e.<\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u0434 \u0431\u043e\u043b\u0435\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">auto EmitRow = [&amp;] {   if (!TombstonedAddress) {     if (OS)     {       if (Verbose) {         *OS &lt;&lt; \"\\n\";         OS->indent(12);       }       State.Row.dump(*OS);     }     State.appendRowToMatrix();   } };<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"problemy-s-perechisleniyami-enum\">\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u043c\u0438 (enum)<\/h2>\n<p>  <\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 LLVM \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f (<em>enum<\/em>) \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043e\u0434\u043d\u0438\u043c \u0431\u0430\u0439\u0442\u043e\u043c. \u0422\u043e \u0435\u0441\u0442\u044c <em>sizeof(enum) == sizeof(char)<\/em>. \u0422\u0430\u043a\u043e\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u043f\u0430\u0441\u043d\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Visual C++ \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0440\u0430\u0432\u043d\u044b\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u0443 <em>int<\/em>.<\/p>\n<p>  <\/p>\n<h3 id=\"bag-n11-opasnyy-indeks\">\u0411\u0430\u0433 N11, \u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">enum class FunctionKinds { ENTRY, EXIT, TAIL, LOG_ARGS_ENTER, CUSTOM_EVENT }; .... static Error loadObj(....) {   ....   auto Kind = Extractor.getU8(&amp;OffsetPtr);   static constexpr SledEntry::FunctionKinds Kinds[] = {       SledEntry::FunctionKinds::ENTRY, SledEntry::FunctionKinds::EXIT,       SledEntry::FunctionKinds::TAIL,       SledEntry::FunctionKinds::LOG_ARGS_ENTER,       SledEntry::FunctionKinds::CUSTOM_EVENT};   if (Kind >= sizeof(Kinds))     return errorCodeToError(         std::make_error_code(std::errc::executable_format_error));   Entry.Kind = Kinds[Kind];   .... }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.com\/ru\/w\/v557\/\">V557<\/a> [CWE-125, CERT-ARR30-C] Array overrun is possible. The value of &#8216;Kind&#8217; index could reach 19. InstrumentationMap.cpp 196<\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f. \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u043e\u0442\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">if (Kind >= sizeof(Kinds))   return errorCodeToError(...);<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a \u0432\u044b\u0432\u043e\u0434\u0443, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <em>Kind<\/em> \u0438\u043c\u0435\u0435\u0442 \u0434\u0430\u043b\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 [0..19].<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 19, \u0430 \u043d\u0435 4? \u042f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f Visual Studio 2019. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Visual C++ \u0438 \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u0431\u0430\u0439\u0442\u0430\u043c\u0438. \u0412 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u043d\u0430\u043f\u0438\u0441\u0430\u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">int main() {   enum class FunctionKinds { ENTRY, EXIT, TAIL, LOG_ARGS_ENTER, CUSTOM_EVENT };   static constexpr FunctionKinds Kinds[] = {     FunctionKinds::ENTRY, FunctionKinds::EXIT, FunctionKinds::TAIL,     FunctionKinds::LOG_ARGS_ENTER, FunctionKinds::CUSTOM_EVENT   };   std::cout &lt;&lt; sizeof(Kinds) &lt;&lt; std::endl;   return 0; }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 Visual C++, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438 \u0432\u0438\u0434\u0438\u043c \u0447\u0438\u0441\u043b\u043e &#171;20&#187;.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0432\u044b\u0445\u043e\u0434\u0430 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0434, \u043d\u0443\u0436\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c <em>Kind<\/em> \u043d\u0435 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445, \u0430 \u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0430.<\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">if (Kind >= sizeof(Kinds) \/ sizeof(Kinds[0]))   return errorCodeToError(....);<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"bag-n12-oshibka-inicializacii-massiva\">\u0411\u0430\u0433 N12, \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">enum CondCode {   \/\/ Opcode       N U L G E       Intuitive operation   SETFALSE, \/\/      0 0 0 0       Always false (always folded)   SETOEQ,   \/\/      0 0 0 1       True if ordered and equal   ....   SETCC_INVALID \/\/ Marker value. };  static void InitCmpLibcallCCs(ISD::CondCode *CCs) {   memset(CCs, ISD::SETCC_INVALID, sizeof(ISD::CondCode)*RTLIB::UNKNOWN_LIBCALL);   .... }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.com\/ru\/w\/v575\/\">V575<\/a> [CWE-628, CERT-EXP37-C] The &#8216;memset&#8217; function processes the pointer to enum type. Inspect the first argument. TargetLoweringBase.cpp 662<\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043f\u043e\u0432\u0435\u0437\u0451\u0442 \u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f <em>CondCode<\/em> \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043e\u0434\u043d\u0438\u043c \u0431\u0430\u0439\u0442\u043e\u043c.<\/p>\n<p>  <\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <em>memset<\/em> \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u0430\u0439\u0442. \u0412 \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0430\u0439\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <em>SETCC_INVALID<\/em>. \u0415\u0441\u043b\u0438 <em>enum<\/em> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d 4 \u0431\u0430\u0439\u0442\u0430\u043c\u0438, \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Visual C++, \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. \u042d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0432\u043d\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 4 \u0431\u0430\u0439\u0442:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">SETCC_INVALID &lt;&lt; 24 | SETCC_INVALID &lt;&lt; 16 | SETCC_INVALID &lt;&lt; 8 | SETCC_INVALID<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">std::fill(CCs, CCs + RTLIB::UNKNOWN_LIBCALL, ISD::SETCC_INVALID);<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"oshibki-v-potoke-upravleniya\">\u041e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043f\u043e\u0442\u043e\u043a\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f<\/h2>\n<p>  <\/p>\n<h3 id=\"bag-n13-n14-neinicializirovannaya-peremennaya\">\u0411\u0430\u0433 N13-N14, \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">Expected&lt;std::pair&lt;JITTargetAddress, Edge::Kind>> EHFrameEdgeFixer::readEncodedPointer(uint8_t PointerEncoding,                                      JITTargetAddress PointerFieldAddress,                                      BinaryStreamReader &amp;RecordReader) {   .....   Edge::Kind PointerEdgeKind;    switch (EffectiveType) {   case DW_EH_PE_udata4: {     ....     PointerEdgeKind = Delta32;     break;   }   case DW_EH_PE_udata8: {     ....     PointerEdgeKind = Delta64;     break;   }   case DW_EH_PE_sdata4: {     ....     PointerEdgeKind = Delta32;     break;   }   case DW_EH_PE_sdata8: {     ....     PointerEdgeKind = Delta64;     break;   }   }    if (PointerEdgeKind == Edge::Invalid)     return make_error&lt;JITLinkError>(         \"Unspported edge kind for encoded pointer at \" +         formatv(\"{0:x}\", PointerFieldAddress));    return std::make_pair(Addr, Delta64); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.com\/ru\/w\/v614\/\">V614<\/a> [CWE-457, CERT-EXP53-CPP] Potentially uninitialized variable &#8216;PointerEdgeKind&#8217; used. EHFrameSupport.cpp 704<\/p>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <em>PointerEdgeKind<\/em> \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f switch-\u0431\u043b\u043e\u043a\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c, \u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043e\u043d\u0430 \u0440\u0430\u0432\u043d\u0430 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0435 <em>Edge::Invalid<\/em>.<\/p>\n<p>  <\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u044d\u0442\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">Edge::Kind PointerEdgeKind = Edge::Invalid;<\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0449\u0451 \u043e\u0434\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430: V614 [CWE-457, CERT-EXP53-CPP] Potentially uninitialized variable &#8216;Result&#8217; used. llvm-rtdyld.cpp 998<\/p>\n<p>  <\/p>\n<h3 id=\"bag-n15-nedostizhimyy-kod\">\u0411\u0430\u0433 N15, \u043d\u0435\u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u044b\u0439 \u043a\u043e\u0434<\/h3>\n<p>  <\/p>\n<p>\u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e <em>report_fatal_error<\/em>:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">void llvm::report_fatal_error(const Twine &amp;Reason, bool GenCrashDiag) {   ....   abort(); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0441 \u0432\u0430\u0436\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043e\u043d\u0430 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <a href=\"https:\/\/en.cppreference.com\/w\/cpp\/utility\/program\/abort\">abort<\/a>. \u0422. \u0435. \u0444\u0443\u043d\u043a\u0446\u0438\u044f <em>report_fatal_error<\/em> \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435.<\/p>\n<p>  <\/p>\n<p>\u0415\u0449\u0451 \u0435\u0441\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0432\u044b\u0437\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0430\u043b\u0435\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">void llvm::report_fatal_error(const char *Reason, bool GenCrashDiag) {   report_fatal_error(Twine(Reason), GenCrashDiag); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435. \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442 <em>GenCrashDiag<\/em> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">__declspec(noreturn) void report_fatal_error(const char *reason,                                                  bool gen_crash_diag = true);<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0442\u0435\u043b\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438 \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c. \u0423\u0436\u0435 \u0438\u0437 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <em>__declspec(noreturn)<\/em> \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043e\u043d\u0430 \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435. \u041d\u043e \u0440\u0435\u0448\u0438\u043b \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0435\u0441\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e.<\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043a \u0441\u0443\u0442\u0438. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u043e\u0442 \u044d\u0442\u043e\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">int AMDGPUCFGStructurizer::improveSimpleJumpintoIf(....) {   ....   if (LandBlkHasOtherPred) {     report_fatal_error(\"Extra register needed to handle CFG\");     Register CmpResReg =         HeadMBB->getParent()->getRegInfo().createVirtualRegister(I32RC);     report_fatal_error(\"Extra compare instruction needed to handle CFG\");     insertCondBranchBefore(LandBlk, I, R600::IF_PREDICATE_SET,         CmpResReg, DebugLoc());   }   .... }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.com\/ru\/w\/v779\/\">V779<\/a> [CWE-561, CERT-MSC12-C] Unreachable code detected. It is possible that an error is present. AMDILCFGStructurizer.cpp 1286<\/p>\n<p>  <\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <em>report_fatal_error<\/em> \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0435\u0449\u0451 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c. \u0412\u0441\u0435 \u044d\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0443\u0436\u0435 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0441\u043c\u044b\u0441\u043b\u0430.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u0442\u044c \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u0440 \u043a\u043e\u0434\u0430 \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u043e\u0442\u0435\u043b \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u0434\u0440\u0443\u0433\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435.<\/p>\n<p>  <\/p>\n<h3 id=\"bag-n16-n17-utechka-pamyati\">\u0411\u0430\u0433 N16-N17, \u0443\u0442\u0435\u0447\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">uint64_t WinCOFFObjectWriter::writeObject(MCAssembler &amp;Asm,                                           const MCAsmLayout &amp;Layout) {   ....   if (EmitAddrsigSection) {     auto Frag = new MCDataFragment(AddrsigSection);     Frag->setLayoutOrder(0);     raw_svector_ostream OS(Frag->getContents());     for (const MCSymbol *S : AddrsigSyms) {       if (!S->isTemporary()) {         encodeULEB128(S->getIndex(), OS);         continue;       }        MCSection *TargetSection = &amp;S->getSection();       assert(SectionMap.find(TargetSection) != SectionMap.end() &amp;&amp;              \"Section must already have been defined in \"              \"executePostLayoutBinding!\");       encodeULEB128(SectionMap[TargetSection]->Symbol->getIndex(), OS);     }   }   .... }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.com\/ru\/w\/v773\/\">V773<\/a> [CWE-401, CERT-MEM31-C, CERT-MEM51-CPP] Visibility scope of the &#8216;Frag&#8217; pointer was exited without releasing the memory. A memory leak is possible. WinCOFFObjectWriter.cpp 1116<\/p>\n<p>  <\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044f \u0447\u0435\u0433\u043e-\u0442\u043e \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u044e \u0438 \u044d\u0442\u043e \u043d\u0435 \u043e\u0448\u0438\u0431\u043a\u0430. \u041d\u043e \u044f \u043d\u0435 \u0432\u0438\u0436\u0443, \u0433\u0434\u0435 \u0438 \u043a\u0430\u043a \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u0430\u043b\u0451\u043d \u043e\u0431\u044a\u0435\u043a\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c <em>Frag<\/em>. \u042f \u0441\u043e\u0433\u043b\u0430\u0441\u0435\u043d \u0441 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c: \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0443\u0442\u0435\u0447\u043a\u0443 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>  <\/p>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f: V773 [CWE-401, CERT-MEM31-C, CERT-MEM51-CPP] Visibility scope of the &#8216;Frag&#8217; pointer was exited without releasing the memory. A memory leak is possible. WinCOFFObjectWriter.cpp 1130<\/p>\n<p>  <\/p>\n<h2 id=\"kod-s-zapahom\">\u041a\u043e\u0434 \u0441 \u0437\u0430\u043f\u0430\u0445\u043e\u043c<\/h2>\n<p>  <\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u044f \u0441\u043e\u0431\u0440\u0430\u043b \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u043b\u0438 \u043d\u0430 \u0441\u0435\u0431\u044f \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u043d\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043d\u0435 \u0441\u043f\u0435\u0448\u0443 \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0431\u0430\u0433\u0430\u043c\u0438. \u0421\u043a\u043e\u0440\u0435\u0435 \u044d\u0442\u043e \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0439 \u0438 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0439 \u043a\u043e\u0434. \u0421\u0435\u0439\u0447\u0430\u0441 \u0441\u0440\u0430\u0437\u0443 \u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044f \u0438\u043c\u0435\u044e \u0432 \u0432\u0438\u0434\u0443.<\/p>\n<p>  <\/p>\n<h3 id=\"kod-s-zapahom-n1-dublikaty-strok\">\u041a\u043e\u0434 \u0441 \u0437\u0430\u043f\u0430\u0445\u043e\u043c N1, \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b \u0441\u0442\u0440\u043e\u043a<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">static uint16_t toSecMapFlags(uint32_t Flags) {   uint16_t Ret = 0;   if (Flags &amp; COFF::IMAGE_SCN_MEM_READ)     Ret |= static_cast&lt;uint16_t>(OMFSegDescFlags::Read);   if (Flags &amp; COFF::IMAGE_SCN_MEM_WRITE)     Ret |= static_cast&lt;uint16_t>(OMFSegDescFlags::Write);   if (Flags &amp; COFF::IMAGE_SCN_MEM_EXECUTE)     Ret |= static_cast&lt;uint16_t>(OMFSegDescFlags::Execute);   if (Flags &amp; COFF::IMAGE_SCN_MEM_EXECUTE)     Ret |= static_cast&lt;uint16_t>(OMFSegDescFlags::Execute);   if (!(Flags &amp; COFF::IMAGE_SCN_MEM_16BIT))     Ret |= static_cast&lt;uint16_t>(OMFSegDescFlags::AddressIs32Bit);   .... }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.com\/ru\/w\/v581\/\">V581<\/a> [CWE-670] The conditional expressions of the &#8216;if&#8217; statements situated alongside each other are identical. Check lines: 335, 337. DbiStreamBuilder.cpp 337<\/p>\n<p>  <\/p>\n<p>\u0412\u043e\u0442 \u044d\u0442\u043e\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u0434\u0432\u0430 \u0440\u0430\u0437\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">if (Flags &amp; COFF::IMAGE_SCN_MEM_EXECUTE)   Ret |= static_cast&lt;uint16_t>(OMFSegDescFlags::Execute);<\/code><\/pre>\n<p>  <\/p>\n<p>\u042f \u0441\u043a\u043b\u043e\u043d\u0435\u043d \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043b\u0438\u0448\u043d\u0438\u0439 \u043a\u043e\u0434 \u0438 \u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u043e\u0448\u0438\u0431\u043a\u043e\u0439, \u0435\u0441\u043b\u0438 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0431\u043b\u043e\u043a\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f.<\/p>\n<p>  <\/p>\n<h3 id=\"kod-s-zapahom-n2-atavizm\">\u041a\u043e\u0434 \u0441 \u0437\u0430\u043f\u0430\u0445\u043e\u043c N2, \u0430\u0442\u0430\u0432\u0438\u0437\u043c<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">std::string pathname_; .... void FilePath::Normalize() {   if (pathname_.c_str() == nullptr) {     pathname_ = \"\";     return;   } .... }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.com\/ru\/w\/v547\/\">V547<\/a> [CWE-570] Expression &#8216;pathname_.c_str() == nullptr&#8217; is always false. gtest-filepath.cc 349<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0451 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f. \u041e\u043d\u0430 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442. \u041f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u043e\u0432.<\/p>\n<p>  <\/p>\n<h3 id=\"kod-s-zapahom-n3-ne-tam-postavlena-skobka\">\u041a\u043e\u0434 \u0441 \u0437\u0430\u043f\u0430\u0445\u043e\u043c N3, \u043d\u0435 \u0442\u0430\u043c \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0441\u043a\u043e\u0431\u043a\u0430<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">raw_ostream &amp;raw_ostream::write_escaped(StringRef Str,                                         bool UseHexEscapes) {   ....   *this &lt;&lt; hexdigit((c >> 4 &amp; 0xF));   *this &lt;&lt; hexdigit((c >> 0) &amp; 0xF);   .... }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.com\/ru\/w\/v592\/\">V592<\/a> The expression was enclosed by parentheses twice: &#8216;((c >> 4 &amp; 0xF))&#8217;. One pair of parentheses is unnecessary or misprint is present. raw_ostream.cpp 188<\/p>\n<p>  <\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u0432\u043e\u0439\u043d\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438. \u042d\u0442\u0430 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0441\u043a\u043e\u0431\u043e\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u0445\u043e\u0442\u0435\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043a\u0430\u043a-\u0442\u043e \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443. \u0418 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043a\u0430\u043a \u0445\u043e\u0442\u0435\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u0438\u0434\u043d\u043e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0435. \u0421\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0441\u043a\u043e\u0431\u043a\u0438 \u0445\u043e\u0442\u0435\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">*this &lt;&lt; hexdigit((c >> 4) &amp; 0xF); *this &lt;&lt; hexdigit((c >> 0) &amp; 0xF);<\/code><\/pre>\n<p>  <\/p>\n<p>\u0425\u043e\u0442\u044f \u0441\u043a\u043e\u0431\u043a\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043d\u0435 \u0442\u0430\u043c, \u044d\u0442\u043e \u043d\u0435 \u043e\u0448\u0438\u0431\u043a\u0430. \u0412\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0441\u0434\u0432\u0438\u0433\u0430 (>>) \u0432\u044b\u0448\u0435, \u0447\u0435\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u0418 (&amp;). \u0412\u0441\u0451 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e.<\/p>\n<p>  <\/p>\n<h3 id=\"kod-s-zapahom-n4-n6-neudachnoe-sliyanie-koda\">\u041a\u043e\u0434 \u0441 \u0437\u0430\u043f\u0430\u0445\u043e\u043c N4-N6, \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u0435 \u0441\u043b\u0438\u044f\u043d\u0438\u0435 \u043a\u043e\u0434\u0430?<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">template &lt;class ELFT> void ELFState&lt;ELFT>::writeSectionContent(     Elf_Shdr &amp;SHeader, const ELFYAML::StackSizesSection &amp;Section,     ContiguousBlobAccumulator &amp;CBA) {   if (!Section.Entries)     return;    if (!Section.Entries)     return;   .... }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/pvs-studio.com\/ru\/w\/v581\/\">V581<\/a> [CWE-670] The conditional expressions of the &#8216;if&#8217; statements situated alongside each other are identical. Check lines: 1380, 1383. ELFEmitter.cpp 1383<\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u0435 \u0441\u043b\u0438\u044f\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u0432\u0435\u0442\u043e\u043a \u043a\u043e\u0434\u0430, \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0435\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0438. \u041d\u0435 \u043e\u0448\u0438\u0431\u043a\u0430, \u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442.<\/p>\n<p>  <\/p>\n<p>\u0412\u043e\u0442 \u0435\u0449\u0451 \u0441\u0445\u043e\u0436\u0438\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0441 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u0430\u043c\u0438 \u043a\u043e\u0434\u0430:<\/p>\n<p>  <\/p>\n<ul>\n<li>V581 [CWE-670] The conditional expressions of the &#8216;if&#8217; statements situated alongside each other are identical. Check lines: 1488, 1491. ELFEmitter.cpp 1491<\/li>\n<li>V581 [CWE-670] The conditional expressions of the &#8216;if&#8217; statements situated alongside each other are identical. Check lines: 1663, 1666. ELFEmitter.cpp 1666<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"zaklyuchenie\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<p>PVS-Studio \u043f\u043e \u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0441\u0440\u0435\u0434\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u041e\u043d \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0439 \u0438 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043a\u043e\u0434\u0430, \u0447\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/0b6\/7b0\/3be\/0b67b03be8b5f603b32935e2aaec6de2.png\" alt=\"PVS-Studio \u0434\u043e\u0441\u0442\u043e\u0438\u043d!\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/0b6\/7b0\/3be\/0b67b03be8b5f603b32935e2aaec6de2.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u0437 PVS-Studio \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u0434\u0430\u0436\u0435 \u0432 \u0442\u0430\u043a\u0438\u0445 \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u0442\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445, \u043a\u0430\u043a \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u0441\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0439\u0442\u0438 \u0432 \u0432\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 :). \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e, \u043d\u0435 \u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044f <a href=\"https:\/\/pvs-studio.com\/ru\/pvs-studio\/try-free\/\">\u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e<\/a> \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.<\/p>\n<p>  <\/p>\n<h2 id=\"dopolnitelnye-ssylki\">\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438<\/h2>\n<p>  <\/p>\n<ol>\n<li><a href=\"https:\/\/pvs-studio.com\/ru\/blog\/posts\/0743\/\">\u041a\u0430\u043a \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043a\u043e\u0434\u0430 \u0432 legacy \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u043d\u0435 \u0434\u0435\u043c\u043e\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443<\/a>.<\/li>\n<li><a href=\"https:\/\/pvs-studio.com\/ru\/docs\/manual\/6521\/\">\u0422\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u043e\u0434\u0430 PVS-Studio<\/a>.<\/li>\n<li><a href=\"https:\/\/pvs-studio.com\/ru\/blog\/posts\/cpp\/0817\/\">\u041a\u0430\u043a PVS-Studio \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u043e\u0442 \u043f\u043e\u0441\u043f\u0435\u0448\u043d\u044b\u0445 \u043f\u0440\u0430\u0432\u043e\u043a \u043a\u043e\u0434\u0430<\/a>.<\/li>\n<li><a href=\"https:\/\/pvs-studio.com\/ru\/blog\/posts\/cpp\/0639\/\">\u041e\u0448\u0438\u0431\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043a\u043e\u0434\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f<\/a>.<\/li>\n<\/ol>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u0441 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0435\u0439, \u0442\u043e \u043f\u0440\u043e\u0448\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434: Andrey Karpov. <a href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/582492\/\">Detecting errors in the LLVM release 13.0.0<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/582494\/\"> https:\/\/habr.com\/ru\/articles\/582494\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/55c\/8fd\/cd5\/55c8fdcd54e43716b78c0a88732e93ea.png\" alt=\"PVS-Studio \u0438 LLVM 13\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/55c\/8fd\/cd5\/55c8fdcd54e43716b78c0a88732e93ea.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0439 \u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043a\u043e\u0434\u0430, \u0447\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0441\u043c\u043e\u0433 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c PVS-Studio \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 LLVM 13.0.0.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-391513","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/391513","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=391513"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/391513\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=391513"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=391513"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=391513"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}