@ProCxx

Страница 2448 из 2477
Alexey
18.10.2018
13:52:16
я бы за такой код руки рубил бы

Alexander
18.10.2018
13:52:40
Constantine
18.10.2018
13:52:44
ну есть способы человечнее, но это просто ошибка пиваса

Google
Constantine
18.10.2018
13:53:02
он все еще находит ошибку, которая в принципе не существует

Alexander
18.10.2018
13:53:08
но я согласен, что тут анализатор должен ругнуться

но ругнуться он должен по-другому

Constantine
18.10.2018
13:53:33
ну тут code style: не выебывайся разве что

Alexey
18.10.2018
13:53:34
что за магическое число 10?

Alexander
18.10.2018
13:53:52
Constantine
18.10.2018
13:53:54
не писать же std::declval<int>()

Alexey
18.10.2018
13:55:06
sizeof(A)/sizeof(A[0]) - стандартная запись

Constantine
18.10.2018
13:55:24
не более стандартная, чем /sizeof(A[42])

Igor
18.10.2018
13:56:25
да ну, хавок не нужен уже, можно буллет физикс патченный юзать)
та да, просто заглядывал на днях поизучать что там как, и ушёл в фейспалме

Alexey
18.10.2018
13:56:39
пиши в спортлото^W^Wразработчикам

Constantine
18.10.2018
13:57:32
там еще совершенно точно было, что не цепляются макроопределения в вижаке, мб настраивать надо, мне лень было разбираться int f(TCHAR x) { if (0xD800 <= x && x < E000) //warning: condition is always false return 2; return 1; }

Google
Igor
18.10.2018
14:00:05
что за магическое число 10?
эх, и вот с одной стороны хочется чтобы анализатор ругался на магические числа, а с другой — во всяком старье вроде int* arr = getCoords() /*library function*/; int x=arr[0], y=arr[1], z=arr[2]; будет вагон и маленькая тележка ругани...

Constantine
18.10.2018
14:00:26
во, вспомнил где можно взять) //--- #include <map> #include <cassert> int main() { std::map<int,int> some; assert(some.size() == 0); some[0]; //V607, а на самом-то деле просто не хотелось указывать имя типа /*C++03*/ assert(some.size() == 1); }

Alexey
18.10.2018
14:00:37
вывод: в новых пишите нормально

Constantine
18.10.2018
14:01:38
вывод: в новых пишите нормально
тут совершенно точно ошибка пиваса, что он в decltype выражениях начинает проверять что-то про array index out of bound

//---- #include <utility> class A { public: virtual ~A(){} }; class B: public A { }; void foo(std::pair<int, A*> p) { delete p.second; } int main() { foo(std::make_pair(0, static_cast<A*>(new B()))); //V572, в данном примере тип и правда можно опустить, но в реальном необходима точная шаблонная подстановка return 0; }

Constantine
18.10.2018
14:05:40
6.25 - нет ошибок
оригинальный пример: //--- #include <atlstr.h> #include <windows.h> #include <cassert> template <bool condition> void compilation_assert() { int arr[condition]; arr; }; #define COMPILATION_ASSERT(condition, error) compilation_assert<condition>(); int main() { CString s(_T("\uFEFF\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0435 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E!")); COMPILATION_ASSERT(sizeof(s[0]) == sizeof(wchar_t), _T("Use unicode character set as VS project option")); if (s[0] == 0xFEFF) //V547 Expression 's[0] == 0xFEFF' is always false. The value range of char type: [-128, 127] { s.Delete(0, 1); MessageBox(NULL, s, _T(""), MB_ICONINFORMATION); //Я знаю точно, [...] } }

Alexey
18.10.2018
14:07:21
та же фигня

Constantine
18.10.2018
14:07:28
6.25 ошибок нету
я это все репортил, что-то даже поправили, значит :) V607 был просто ужасен

//--- #include <vector> class op_vector { public: std::vector<int> v; template <typename TFunctor> void accumulate(TFunctor &functor) { for (int i = 0; i < (int)v.size(); ++i) functor(v[i]); //V607, причем в данном примере у этого метода даже нет ни одной подстановки! } }; int main() { }

Alexey
18.10.2018
14:09:49
а я бы тут ругнулся на int вместо size_t

Constantine
18.10.2018
14:10:10
а я бы тут ругнулся на int вместо size_t
а это холивар хуже некуда

size_t в возврате size() вроде считается архитектурной ошибкой С++

Alexey
18.10.2018
14:11:01
это с какого?

самого языка или пользующего кода?

Constantine
18.10.2018
14:12:36
это с какого?
bool someFunc(std::vector<int> v) { std::sort(v.begin(), v.end()); for (size_t i = 0; i < v.size() - 1; i++) //PVS уже нашел ошибку? if (v[i] == v[i+1]) return true; return false; }

это с какого?
вообще интересно, задумайтесь, для int[10] что стоит в operator [] как аргумент

Alexey
18.10.2018
14:26:26
не распарсил вопрос

Constantine
18.10.2018
14:26:46
ну какой тип аргумента в int x[] = { 1, 2, 3 }; x[arg]

Google
Constantine
18.10.2018
14:27:32
видимо, все-таки, ptrdiff_t

Anatoly
18.10.2018
14:29:39
да, и кодогенерация при пробеге по int полегче, поскольку int не обременен гарантиями в случае overflow

Alexander
18.10.2018
14:32:21
Constantine
18.10.2018
14:32:35
Почему?
там же *(ptr + x)

и в данном контексте кажется, что это элемент группы разностей указателей в явном виде

Alexander
18.10.2018
14:34:22
там же *(ptr + x)
Я про другое. Что ptrdiff_t может не хватить

Но это из области фантастики

Ioann V
18.10.2018
14:34:39
Это, пожалуй, важно в данном вопросе

Я про другое. Что ptrdiff_t может не хватить
А разве такое может быть? Разве птрдифф недостаточен для указателя?

Constantine
18.10.2018
14:35:21
Я про другое. Что ptrdiff_t может не хватить
Ну может я что-то не знаю и assert(ptr1 + (ptr2 - ptr1) == ptr2) не выполняется

Spoonson
18.10.2018
14:35:32
К слову о size_t и контейнерах - какой нормальный способ обойти вектор с конца вместе с индексом? И без static_cast

Constantine
18.10.2018
14:36:05
Alexey
18.10.2018
14:36:13
Алексей, ты тут ошибку то увидел?
Я - да, PVS - нет. Зарепортил им багу.

Constantine
18.10.2018
14:37:23
Александр
18.10.2018
14:37:43
Ну может я что-то не знаю и assert(ptr1 + (ptr2 - ptr1) == ptr2) не выполняется
Формирование указателя не указывающего на элементы массива или следующий за последним - это UB. http://eel.is/c++draft/expr.add#4 Это как раз чтобы "всегда хватало"

Spoonson
18.10.2018
14:38:17
range-based for
и как интерфейс обертки выглядит? Индекс возвращается, или индекс вместе с элементом?

Google
Constantine
18.10.2018
14:40:13
там беда (спасибо комитету за наше счастливое детство!) и нужно две версии

Spoonson
18.10.2018
14:40:31
по сути pair<index, value> или pair<index, value ref>
без structured bindings не так весело использовать

Constantine
18.10.2018
14:40:49
последнее сокращение для p.element.

Spoonson
18.10.2018
14:41:55
а как же for (auto [index, value] : index_wrapper(vector)) ?

ну да, писать все равно не очень много будет

Constantine
18.10.2018
14:42:20
а как же for (auto [index, value] : index_wrapper(vector)) ?
for (auto [index, value] : utils::indexed(vector)) это работает, конечно

там только беда, что structured binding делают decltype(auto) и их не волнует

так что indexed/indexed_view

и немного const шаманств, чтобы не путать

Spoonson
18.10.2018
14:45:58
там только беда, что structured binding делают decltype(auto) и их не волнует
а как проблема проявляется? не могу пока понять

Constantine
18.10.2018
14:46:26
а как проблема проявляется? не могу пока понять
вы возвращаете pair<size_t, T> или pair<size_t, T&> либо не работает auto, либо auto&

Constantine
18.10.2018
14:50:35
а как проблема проявляется? не могу пока понять
нашел пример #include <functional> #include <utility> template <typename... Args> auto proxy(Args&&... args) { return std::forward_as_tuple<Args...>(args...); } int f() { int x = 0; auto [y] = proxy(x); auto z = std::get<0>(proxy(x)); y = 1; z = 2; return x; //1 }

Spoonson
18.10.2018
14:54:32
да, теперь все стало ясно. Довольно интересно, почему было сделано именно так комитетом.

olologin
18.10.2018
16:13:12
Господа

помните я рассказывал о нестабильности недавно

которая не ловится валгриндом

и проявляется только при -O2

Google
olologin
18.10.2018
16:13:49
что ещё выяснил:

Нестабильность как-то зависит от рандомизации памяти, типа ASLR

если я ASLR отрубаю в системе - нестабильность стабильно ломается

Alexen
18.10.2018
16:14:41
значит у тебя стабильно кривой код

olologin
18.10.2018
16:14:58
если в одном процессе запускать 10 раз всё с включенным ASLR - нестабильность или стабильно ломается, или стабильно неломается

значит у тебя стабильно кривой код
Да если бы мой я бы уже давно нашёл

вот думаю куда теперь отсюда копать

Alexander
18.10.2018
16:15:31
Ты гонял с убсаном?

olologin
18.10.2018
16:15:51
что это? Санитайзер какой?

Alexen
18.10.2018
16:15:58
да

olologin
18.10.2018
16:16:02
Я клангом собирать наш код не могу

Alexen
18.10.2018
16:16:20
так санитайзеры есть и под гцц

olologin
18.10.2018
16:16:22
короче есть какая-то зависимость от расположения дллок в памяти

Alexander
18.10.2018
16:16:28
Ubsan там есть

olologin
18.10.2018
16:16:39
memory санитайзера нет

ок, я если честно о таком не слышал, ща почитаю

Alexen
18.10.2018
16:17:21
у вас в проекте нет memory санитайзера? ну что я могу вам сказать - только посочувствовать

Страница 2448 из 2477