LINUX.ORG.RU

Диагностики GCC — это хорошо, но недостаточно

 , , , ,


0

7

С++ компилятор, реализованный в GCC, умеет выполнять множество полезных диагностик. Эти диагностики весьма хороши, и многие считают, что их более чем достаточно. В том числе я нередко слышу, что анализатор PVS-Studio не нужен, так как все те же диагностики имеются у GCC. Конечно, я знаю, что это не так. Это то же самое как сравнивать бесплатный Paint.NET с платным Photoshop. Вроде одно и то же, и функции общие есть. Но платный профессиональный Photoshop всегда будет мощнее, чем такие инструменты как Paint.NET.

Теперь у меня есть не только скрытое знание, но и статья. Я могу демонстрировать, что изучать предупреждения GCC это хорошо, но недостаточно. Если программист действительно заботится о качестве кода, он должен использовать такие специализированные инструменты, как PVS-Studio.

Проверка GCC была ответственным испытанием для бета-версии PVS-Studio for Linux. Это и новая операционная система, это огромное количество макросов, это и код, который уже проверен многими инструментами, и найти в котором хоть что-то непростая задача.

Итак, приглашаю посмотреть, что интересного PVS-Studio нашел в коде GCC. Плюс в процессе повествования я даю ряд советов, как можно избегать подобные ошибки.

Находим ошибки в коде компилятора GCC с помощью анализатора PVS-Studio

Перемещено Aceler из proprietary

https://forums.embarcadero.com/message.jspa?messageID=673914

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

Go somewhere else to troll, it is not appreciated here.

блестящий ответ, как мне кажется.

dzidzitop ★★
()
Последнее исправление: dzidzitop (всего исправлений: 1)

Спасибо, но у нас лицензия на Coverity.

anonymous
()
Ответ на: комментарий от dzidzitop

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

eao197 ★★★★★
()

А кто и чем собирал pvs studio?) Хз, может ответили. В ней же тоже ошибки. Идеального кода не бывает.

Deleted
()

Что, не покупают? Переквалифицируйся лучше в сишарпники. С этих лошков можно больше надоить.

rupert ★★★★★
()
Ответ на: комментарий от rupert

Что, не покупают? Переквалифицируйся лучше в сишарпники. С этих лошков можно больше надоить.

Ну почему же так. Покупают. Многие клиенты с нами уже не первый год. Есть такие, которые с нами 5 лет. Конечно клиентов меньше, чем бы хотелось, но это связано не с продуктом или ценой, а с тем, что о нас мало знают. Например, иногда к нам на собеседование заходят программисты, которые впервые узнали о PVS-Studio, читаю вакансию. Это значит, что мы мало рекламируем себя. Будем стараться.

По поводу C#. Так ведь уже... На нашем сайте Вы можете познакомиться со статьями о проверке C# проектов.

Andrey_Karpov_2009
() автор топика
Ответ на: комментарий от Andrey_Karpov_2009

Ды хоть как-нибудь. Судя по комментариям здесь, для многих написание письма является непреодолимым барьером. И это славно.

Тогда зачем ты сюда пишешь? Наверное, ты считаешь, что даже дурная известность лучше безвестности? Это не так. К тому же откровенная жадность и неуважение к людям ещё никого до добра не доводила. Это наглядно показано в сказке Пушкина о попе и его работнике Балде. Поэтому твоей конторе неизбежно придёт конец рано или поздно. Туда и дорога.

anonymous
()
Ответ на: комментарий от Andrey_Karpov_2009

о нас мало знают. Например, иногда к нам на собеседование заходят программисты, которые впервые узнали о PVS-Studio

Это значит, что ваш продукт за такие бабки никому не нужен. Был бы нужен — все бы знали про вас.

Это значит, что мы мало рекламируем себя

Горшочек не вари. Ваши «исследовательские статьи» уже в печенках сидят. Если у меня будет проект на С++ и понадобится статический анализ, я выберу другой продукт.

Deleted
()
Ответ на: комментарий от Deleted

Это значит, что ваш продукт за такие бабки никому не нужен. Был бы нужен — все бы знали про вас.

Нет. Это значит - о нас мало знают. Не путайте. Не нужен - ради бога, не пользуйся. Но программист должен хотя бы раз где-то услышать про PVS-Studio.

Andrey_Karpov_2009
() автор топика
Ответ на: комментарий от Andrey_Karpov_2009

Но программист должен хотя бы раз где-то услышать про PVS-Studio.

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

Кстати, вы все еще думаете, что маленькие проекты с одним разработчикам не нуждаются в использовании статических анализаторов?

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Кстати, вы все еще думаете, что маленькие проекты с одним разработчикам не нуждаются в использовании статических анализаторов?

Могут нуждаться. Но денег на них заработать не получается. Вопрос для нас закрыт.

Andrey_Karpov_2009
() автор топика
Ответ на: комментарий от Andrey_Karpov_2009

Так сделайте версию чтобы работала несколько дней/часов, а после пауза на несколько дней/часов. Для корпоративов будет не годно, а обычным частникам вполне. Раз все равно не продаете частникам, а так хоть бета тестеры вам вполне выгодные получатся..

anonymous
()
Ответ на: комментарий от Andrey_Karpov_2009

Но программист должен хотя бы раз где-то услышать про PVS-Studio

И какие у него должны сложиться впечатления о продукте после мемчиков и жёлтых заголовков в ваших статьях? Возможно, вам стоит всё-таки не больше, а лучше себя рекламировать?

Deleted
()
Ответ на: комментарий от Deleted

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

SZT ★★★★★
()

А, вот кстати вам идея куда двигать дальше - статический анализ исходников ПО для микроконтроллеров. Там мрачняк.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Andrey_Karpov_2009

Но программист должен хотя бы раз где-то услышать про PVS-Studio.

Должен? Кому и главное почему?

anonymous
()
Ответ на: комментарий от Andrey_Karpov_2009

Могут нуждаться. Но денег на них заработать не получается. Вопрос для нас закрыт.

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

anonymous
()
Ответ на: комментарий от rupert

Еще лучше — сделать статический анализатор для Java. Там и рынок намного шире, и, главное, говнокода от джамшутов и равшанов в разы больше, чем где бы то еще.

eao197 ★★★★★
()
Ответ на: комментарий от SZT

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

Deleted
()
Ответ на: комментарий от Andrey_Karpov_2009

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

anonymous
()
Ответ на: комментарий от Andrey_Karpov_2009

Нет. Это значит - о нас мало знают. Не путайте. Не нужен - ради бога, не пользуйся. Но программист должен хотя бы раз где-то услышать про PVS-Studio.

А вы пробовали предлагать вузам свою продукцию с образовательной лицензией? Если получится, то точно знать будут, хотя минус, что пиратские версии тогда будут валяться на каждом углу. Студенты они такие.

praseodim ★★★★★
()

На оффсайте нет возможности скачать ни демку, ни триал, ни даже купить. Отсюда возникает вопрос: зачем вообще здесь этот пост?

Sectoid ★★★★★
()
Ответ на: комментарий от Andrey_Karpov_2009

Но программист должен

Аргумент уровня «мужик должен». Фу, читать противно.

anonymous
()
Ответ на: комментарий от anonymous

Могут нуждаться. Но денег на них заработать не получается. Вопрос для нас закрыт.

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

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

Andrey_Karpov_2009
() автор топика
Ответ на: комментарий от anonymous

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

Где же Вы усмотрели здесь высокомерное отношение? Казалось бы, наоборот, мы открыты, общительны. Вот, я здесь сижу, общаюсь, выслушиваю и отвечаю на всякие гадости. Был бы высокомерным, я использовал бы другие методы продвижения, причем более неприятные. Попробуете так пообщаться с Oracle или Microsoft.

Andrey_Karpov_2009
() автор топика
Ответ на: комментарий от praseodim

А вы пробовали предлагать вузам свою продукцию с образовательной лицензией?

Не пробовали, так как не знаем с какого конца приступить. Это не так просто, как кажется.

Andrey_Karpov_2009
() автор топика
Ответ на: комментарий от i-rinat

Весьма и весьма. Посыл автору дали абсолютно верный.

+ цена указана. За коверити, мы кста, платим больше, но коверити после PVS находит довольно сложные моменты и значит стоит своих денег. Ну и + свои пет-проектики с житхаба нахаляву проверяю :]

anonymous
()
Ответ на: комментарий от Sectoid

На оффсайте нет возможности скачать ни демку, ни триал, ни даже купить. Отсюда возникает вопрос: зачем вообще здесь этот пост?

Это пост о том, что полезно использовать анализаторы кода. Ну и о том, какие ошибки нашлись в GCC.

Andrey_Karpov_2009
() автор топика

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

anonymous
()
Ответ на: комментарий от Andrey_Karpov_2009

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

praseodim ★★★★★
()
Последнее исправление: praseodim (всего исправлений: 1)
Ответ на: комментарий от Andrey_Karpov_2009

Мы очень активно работаем в поддержке и собственно именно поэтому продукт дорогой.

А почему вы не предлагаете свой продукт без поддержки? И почему не продаете его по частям, скажем если кому-то нужен ваш анализатор только для проверки кода на Си и за ненужные плюсовые диагностики он платить не хочет? И почему вы решили продавать его по схеме подписки? Если эта подписка закончится, почему вы не оставляете пользователю возможность пользоваться инструментом, но без обновлений и поддержки? Если например у антивируса «истек срок годности», он все еще может ловить старые зловреды, а не превращается в тыкву.

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 1)
Ответ на: комментарий от Andrey_Karpov_2009

Это пост о том, что полезно использовать анализаторы кода.

Кэп?

Ну и о том, какие ошибки нашлись в GCC.

Тут вроде не багзилла GCC...

Sectoid ★★★★★
()

О! А оказывается у GCC уже есть Wlogical-op, который ловит простые ошибки:

$ cat q.c
int func1(int a) {
  return a == 2 && a == 3; // catches
}

int func2(int a) {
  return a == 2 && 2 == 2 && a == 3; // misses
}

int func3(int a) {
  return a == 2 && a == 2; // catches
}

int func4(int a) {
  return a == 2 && 3 == 3 && a == 2; // misses
}
$ gcc -Wlogical-op -c q.c
q.c: In function ‘func1’:
q.c:2:17: warning: logical ‘and’ of mutually exclusive tests is always false [-Wlogical-op]
   return a == 2 && a == 3; // catches
                 ^~
q.c: In function ‘func3’:
q.c:10:17: warning: logical ‘and’ of equal expressions [-Wlogical-op]
   return a == 2 && a == 2; // catches
                 ^~
$ 
i-rinat ★★★★★
()
Ответ на: комментарий от Sectoid

Тут вроде не багзилла GCC...

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

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

praseodim ★★★★★
()
Ответ на: комментарий от SZT

А почему вы не предлагаете свой продукт без поддержки?

Статический анализатор, это инструмент, который может сделать больно. И продавать его без поддержки смысла нет. Потому, что поддержка все равно будет. На основании опыта, могу объяснить, как это будет происходить. Пишет человек, что у нас баг в анализаторе, и что мы должны его поправить. Вроде как не поддержка, и мы должны отреагировать. Но на самом деле, вдруг выясняется, что это не у нас баг, а у клиента. Такое бывает достаточно часто. Ситуации могут быть разные, ну например, у него проект на Си и нет нужного #include. В результате анализатор выдает на первый взгляд странные, но правильные предупреждения, что int превращается в указатель или что-то подобное. Кто хочет конкретный пример, загляните сюда. Получается, что если мы разобрались в ситуации и всё объяснили, то мы бесплатно оказали поддержку. Причем время потратила не девочка на телефоне, а дорогой программист. Если же мы не будем отвечать, то человек будет считать, что анализатор глючный. Плюс мы не правим ошибки, которые он нам отписывает.

И почему не продаете его по частям, скажем если кому-то нужен ваш анализатор только для проверки кода на Си и за ненужные плюсовые диагностики он платить не хочет?

В качестве ответа процитирую фрагмент замечательной статьи "Отказались от демо и фримиума — и отсеяли кучу шлака". Я полностью согласен с этим:

Идти на поводу у клиента можно, если делать это правильно

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

На самом деле, достаточно двух-трех комплектаций. Большинство людей — не задроты и не любят копаться в куче чекбоксов и дропдаунов, но вынуждены заниматься этим из-за пары процентов дотошных чудаков, которые просто кричали громче остальных. «Контур-Экстерн» (самый зарабатывающий saas в России) в своё время отменил более мелкие периоды и перешел на модель годовой подписки, потеряв часть тех самых чудаков. Однако, прибыль после этого магическим образом выросла и прогнозировать поступление денег стало проще, человек платит 1 раз и можно год к этому не возвращаться.

И почему вы решили продавать его по схеме подписке?

Потому, что этот инструмент в духе антивируса. Постоянно нужно поддерживать новые версии Visual Studio, фичи языка которые проявили себя в заголовочных h-файлах после апдейта Visual C++, в анализаторе появляются новые диагностики и глупо их не использовать и так далее.

Если эта подписка закончится, почему вы оставляете пользователю возможность пользоваться инструментом, но без обновлений и поддержки?

А кому это нужно? Нам - нет. Клиентом, если судить по общению, тоже нет. Т.е. возможно они не против иметь такую возможность, но обсуждая вопрос приобретения лицензий это вопрос как-то не всплывает. Отсюда я делаю вывод, что и им это не критично. Вы или пользуетесь и платите, или вам не нужно и тогда вы не пользуетесь и не платите.

Andrey_Karpov_2009
() автор топика

я вот не пойму, а как вообще можно писать проекты, полагаясь на warningи компилятора? по идее warning есть либо error, либо его надо явно в коде заглушить. например unused argument.

я может чего-то не понимаю, но вообще у меня складывается спечатление, что большинство кодает не приходя в сознание, без проектирования. а потом им С++ гадит в штаны. поэтому купите нашу PVS-studio чтоб высыпать из штанов говно.

это не критика PVS-studio - вы молодцы что пилите такую штуку, и даже молодцы что рекламируете её, потому что пусть знают, и молодцы что делаете версию под линукс.

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

i36_zubov
()
Ответ на: комментарий от Andrey_Karpov_2009

Статический анализатор, это инструмент, который может сделать больно. И продавать его без поддержки смысла нет. Потому, что поддержка все равно будет. На основании опыта, могу объяснить, как это будет происходить. Пишет человек, что у нас баг в анализаторе, и что мы должны его поправить. Вроде как не поддержка, и мы должны отреагировать. Но на самом деле, вдруг выясняется, что это не у нас баг, а у клиента.
...
Получается, что если мы разобрались в ситуации и всё объяснили, то мы бесплатно оказали поддержк

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

В качестве ответа процитирую фрагмент замечательной статьи «Отказались от демо и фримиума — и отсеяли кучу шлака». Я полностью согласен с этим:

У меня есть свой ответ на это: Влияние спонтанных социально-экономических факторов на качество программного обеспечения в расширенных социумах где как бы Билл Гейтс отвечает следующее:

“НЕ ДЕЛИ – НЕ ПРИДЕТСЯ ДЕЛИТЬСЯ”. Оно почти напрямую следует из предыдущего правила. Человек, приходя к Вам в магазин, очень обеспокоен количеством чего-либо. Когда он видит цену, он обеспокоен количеством его личных денег. Поэтому, если Вы будете продавать программу по частям, он купит у Вас часть, причем наименьшую. Остальное будет пылиться у вас на полке. И вам придется уволить программистов, которые это писали. Поэтому ПРОДОВАЙТЕ ВСЕ СКОПОМ. Наш гамбургер является неотъемлемой частью Кока-колы. “ЭМЭСДОС” был неотъемлемой частью ПК ИВМ. А “Основняк” частью “ЭМЭСДОС”. В результате за год, я получил 3 миллиона людей готовых с руками оторвать книги по “ЭМЭСДОС” и по “Основняку”. Другой пример. Моя офисная программа. До этого существовало отдельно и редакторы, и электронные таблицы, и многое другое. Я все это объединил и в сумме этот комплект стоил меньше, чем общая цена отдельно существующих компонентов. В результате, покажите мне ПК, где нет моей программы. Еще пример, наш пакет “Студия”. В него мы запихнули “Це++”, “Основняк”, СУБД, документацию разработчика программ и драйверов, а также отладчик критических ошибок ОС и многое другое. И последний пример. Это меня спасло. В конце 1996 года мне пророчили финансовый крах. Дело в том, что я не очень серьезно воспринимал Сеть и ее небезопасный протокол. В то время как, компания “Солнечные микросистемы” разработала для нее язык, а компания “Шкаф” переделала свой старый проект “Мозаика” для модемных клиентов с поддержкой этого языка. Их продажи стали расти. Мои падать. Но я победил за один месяц! Я выпустил ПАТЧ для ОС, для “Офиса” и для других продуктов. Куда я запихнул, то, что сделали эти умники. А так как это патч, то сделал я это бесплатно. И дальше стал «продавать» бесплатно. “НЕ ДЕЛИ – НЕ ПРИДЕТСЯ ДЕЛИТЬСЯ” и я снова на вершине. Я продаю МОНОЛИТЫ. Никаких кирпичей.

Клиенты всегда говорят, что хотят самостоятельно выбирать набор опций под свои нужды, чтобы не переплачивать за лишние сервисы

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

На самом деле, достаточно двух-трех комплектаций.

А сколько у вас комплектаций? У вас есть комплектация, которая бы умела только ANSI C без всяких плюсов и GNU расширений? Или комплектация, которая проверяет максимум до GNU C99? Кстати, у Windows 10 комплектаций явно больше двух-трех https://blogs.windows.com/russia/2015/05/20/predstavljaem-redakcii-windows-10/ и никто от этого не страдает

Постоянно нужно поддерживать новые версии Visual Studio, фичи языка которые проявили себя в заголовочных h-файлах после апдейта Visual C++

Что там может поменяться, если надо например ANSI C без расширений? Какие новые диагностики можно придумать для ANSI C? Если такие диагностики будут придуманы, почему бы их не продавать отдельно как обновление? А если они окажутся не нужны?

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 1)
Ответ на: комментарий от Andrey_Karpov_2009

что этот инструмент в духе антивируса.

Высасывает деньги и создает иллюзию безопасности? Ок.

anonymous
()
Ответ на: комментарий от anonymous

Высасывает деньги и создает иллюзию безопасности? Ок.

Так можно говорить про что угодно. Про ремни безопасности, про прививки, про страховочный трос, про диплом врача на стене.

Andrey_Karpov_2009
() автор топика
Ответ на: комментарий от praseodim

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

Если бы это был именно анализ GCC, а не черезстрочный пиар продукта - было бы действительно интересно.

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

А чем компилятор хуже любой другой программы? Особенно с такой-то историей и размером, как GCC.

Sectoid ★★★★★
()
Ответ на: комментарий от Sectoid

А чем компилятор хуже любой другой программы? Особенно с такой-то историей и размером, как GCC.

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

praseodim ★★★★★
()
Ответ на: комментарий от praseodim

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

Видимо не столь критичны и замечаемы, что доехали неисправленными до сего анализатора.

Sectoid ★★★★★
()
Ответ на: комментарий от hateyoufeel

Дык, Coverity и C++ проверяет, довольно неплохо причем. Однако ж это не мешает кому-то платить за PVS-Studio.

Это менеджерам PVS-Studio, имхо, в сторону Java смотреть нужно. И в сторону Go и, может быть, Rust-а. А то ведь рынок C++ разработки постоянно скукоживается, а маркетинг и желание бороться за клиентов у них шансов на конкуренцию оставляет немного ;)

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Я чуть выше написал про микроконтроллерщиков. Вот где бездны говнокода и косяков. А надо-то iar/keil/gcc диалекты сишечки понимать + специфика жизни без ОС и stdlib. На плюсах под контроллеры если и пишут, то редко и в основном в виде си с классами + шаблоны.

Dark_SavanT ★★★★★
()
Последнее исправление: Dark_SavanT (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.