Pull to refresh

Comments 11

А у вас есть пост о том, как вы проверяли PVS-Studio при помощи PVS-Studio?

Однажды написали такую статью. Вообще мы ежедневно прогоняем анализ на нашей кодовой базе как на машинах разработчиков, так и на сборочных серверах. К сожалению, примеры ошибок не сохраняем на будущее.

Предложу идею коллегам, может когда-нибудь напишем свежую статью :)

Жесть конечно, такой проект и до сих пор выглядит, как будто на Си, а не на C++ написан.

Он же исорически был на C, только в 2013 его перевели на сборку c++ компилятором.

Есть "C с классами", а gcc написан на "C с шаблонами".

Хотел просить про ложные предупреждения, которые выдает PVS-Studio.
Имеется вот такой код:

RenderPassFlags flags = {}; <=
if (has_flag(renderpass->desc.flags, RenderPassDesc::Flags::ALLOW_UAV_WRITES)) <=
{
  flags |= RenderPassFlags::ALLOW_UAV_WRITES;
}

Выдаваемое предупреждение:

V1051 Consider checking for misprints. It's possible that the 'flags' should be used inside 'has_flag' function.

PVS-Studio не видит, что переменная flags не имеет никакого отношения к функции has_flag() ?

Пример

struct InstancedBatch
{
  ...
  uint32_t instanceCount = 0;
  ...
} instancedBatch = {};
...
auto batch_flush = [&]() {
  if (instancedBatch.instanceCount == 0) <=
    return;
...
}

....

for(...)
{
  instancedBatch.instanceCount++;
}

Выдаваемое предупреждение

V547 Expression 'instancedBatch.instanceCount == 0' is always true.

PVS-Studio не видит, что значение instancedBatch.instanceCount увеличивается на единицу каждый цикл чуть ниже по коду ?

Пример

GPUBarrier barriers[] = {
  GPUBarrier::Image(&res.texture_temporal[0], res.texture_temporal[0].desc.layout, ResourceState::UNORDERED_ACCESS),
  GPUBarrier::Image(&res.texture_temporal[1], res.texture_temporal[1].desc.layout, ResourceState::UNORDERED_ACCESS),
};

...

std::swap(barriers[0].image.layout_before, barriers[0].image.layout_after);
std::swap(barriers[1].image.layout_before, barriers[1].image.layout_after); <=

Выдаваемое предупреждение:

V557 Array overrun is possible. The '1' index is pointing beyond array bound.

Я не смог понять, где тут выход за пределы массива ?

Если массив имеет два элемента, то вполне логично, что первый элемент имеет индекс равный 0, а второй элемент имеет индекс равный 1.

Ой. С таким моментам лучше писать в поддержку. Выпишем себе на доработку, поможем, объясним и так далее. P.S. По поводу V557 - проблема в brace-инициализации. На текущий момент мы как раз занимаемся исправлением этой проблемы.

Техподдержка просит корпоративную почту, для обоснования этого даже целая статья имеется. То есть выходит, что просто сообщения от пользователей (если это не потенциальные клиенты) о каких-то ошибках, вам не интересны ?

Мы работаем и с людьми, написавшими с личной почты. Мы заинтересованы в получении фидбэка от всех пользователей нашего продукта. Единственное отличие между бесплатными пользователями и клиентами будет в оперативности исправления выявленных багов.

Хорошо, напишу.

Не спора ради, но процитирую ваш же:

Мы настоятельно просим использовать корпоративную почту при общении с нами.

Так вот, независимо от стадии общения (presale или maintenance) мы просим использовать корпоративную почту.

целесообразно использовать именно корпоративную почту, чтобы общение было конструктивным, быстрым и точным.

Пожалуйста, используйте только корпоративную почту при общении с нами.

После стольких упоминаний, использовать корпоративную почту, даже как-то рука не поднялась написать с личной, из уважения к вам.

Возможно вам стоит в одном тексте уменьшить упоминание корпоративной почты или сделать какую-то отдельную сноску, что пользователям бесплатных лицензий можно писать с личных и это не будет проявлением неуважения к вам и игнорирование ваших многократных просьб.

Sign up to leave a comment.