LINUX.ORG.RU

GCC Developers Summit


0

0

Закончился GCC Developers Summit (http://www.gccsummit.org). Встречались и решали пути дальнейшего развития gcc. Как можно посмотреть тут: http://tricolour.net/photos/2003/05/2... Результаты встречи можно посмотреть тут: http://www.linux.org.uk/~ajh/gcc/gccs... (похоже был получен мощный импульс энергии FUN - надеюсь теперь мы сможем получить ее в новых версиях gcc :)

>>> Подробности

anonymous

Проверено: green

Да не поймет он ответа, зря стараетесь.

anonymous
()

Используйте valgrind и ваша кожа будет мягкой и шелковистой.

Valgrind is a tool to help you find memory-management problems in your
programs. When a program is run under Valgrind's supervision, all
reads and writes of memory are checked, and calls to
malloc/new/free/delete are intercepted. As a result, Valgrind can
detect problems such as:

   Use of uninitialised memory
   Reading/writing memory after it has been free'd
   Reading/writing off the end of malloc'd blocks
   Reading/writing inappropriate areas on the stack
   Memory leaks -- where pointers to malloc'd blocks are lost forever
   Passing of uninitialised and/or unaddressible memory to system calls
   Mismatched use of malloc/new/new [] vs free/delete/delete []
   Some abuses of the POSIX pthread API

lenin
()

кстати видели последний "красивый" баг в gcc-3.2 ?
зацените:
/*

Compile with: gcc -Wall prog.c -o prog && ./prog

I'm using gcc version 3.2 20020903 (Red Hat Linux 8.0 3.2-7)
Also tested on gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5) [RH9]
This problem is solved in gcc version 3.2.3 [RawHide]

 Actual output:

  0 1 0
  1 0 0
  1 2 1
  2 3 4

 Expected output:

  2 2 3
  1 3 3
  1 2 4
  2 3 4

*/


#include <stdio.h>


typedef struct {
 int _0, _1, _2;
} POINT;


POINT xform(POINT p) {
 return (POINT) { p._0 + 1, p._1 + 2, p._2 + 3 };
}


int main(void) {
 int i;
 POINT p[4] =
  { xform((POINT) { 1, 0, 0 }),
   xform((POINT) { 0, 1, 0 }),
   xform((POINT) { 0, 0, 1 }),
   xform((POINT) { 1, 1, 1 }) };

 for (i = 0; i < 4; i++)
  printf("  %d %d %d\n", p[i]._0, p[i]._1, p[i]._2);

 return 0;
}

вообщем gcc-2.95 рулит !!!

anonymous
()

2gcc-teapot: make >out и все дела. Если ты имешь ввиду использование mingw - то тебе нужен redir: redir -e список_ошибок.out gcc программа_с_кучей_ошибок.c -o чего-нибудь.exe

если в linux: make &> ./out

...и не слушай всяких никсов ! :)

anonymous
()

>>Лучше конечно нахер, но на это зрители уже и не надеются. :))) Ничего ! С такими знаниями он в любом случае пойдет нахер :) Еще больше будет любить C# :) А мы спокойно будем чтить стандарт и писать быстрые, надежные и переносимые программы на прекрасном языке C++ :)

anonymous
()

>> А, опять пришел клоун-анонимус, облажавшийся с main() return и >> #pragma warning! ;-)))) А это малыш у тебя в глазах троиться - мы абсолютно разные люди :) Последний раз предлагаю - СФОРМУЛИРУЙ СВОИ ПРЕТЕНЗИИ !!!

anonymous
()

2малыш-никс: >>Но меня вчера опять хотели за подобный вопрос на жаркое отправить.;-((( >>"Ведь все компиляторы одинаковы! При чем тут компилятор?"

Мальчик ты даун ?! Тебе уже 15 раз сказали: по СТАНДАРТУ ПОВЕДЕНИЕ НЕ ОПРЕДЕЛЕНО ! Ты знаешь что такое НЕ ОПРЕДЕЛЕНО ? Объясняю для таких тупых как ты - это значит что может быть ВСЕ что угодно ! Ориентироваться нужно на СТАНДАРТ, если какой либо компилятор не поддерживает этот стандарт - это его проблемы (пиши баг репорт или выкидывай его нафиг). На данный момент gcc НАИБОЛЕЕ близок к СТАНДАРТУ. Точка.

СПЕЦИАЛЬНО для того чтобы ты глупыш мог отличить меня от тех кто говорил про return - подписываюсь:

zzz

anonymous
()

>>кстати видели последний "красивый" баг в gcc-3.2 ? А бы батенька не гоните а ? gcc 2.95.4 / gcc 3.3 - полет нормальный

zzz

anonymous
()

2малыш-никс:
>>Что выдаст:

#include <stdio.h>
#include <iostream>

main()
{
int *p;
try
{
*p = 1;
printf("%d\n", *p);
}
catch(...)
{
std::cout << "Sorry!" << std::endl;
}
}

>>С MSVC? С Intel? Мозги есть - думайте.
Мы то всегда думаем - не мешало бы и тебе иногда !
Повторяю для таких олигофренов как ты в очередной раз:
1) руководствоваться нужно ТОЛЬКО СТАНДАРТОМ
2) по СТАНДАРТУ - ПОВЕДЕНИЕ НЕ ОПРЕДЕЛЕНО
3) перехват аппаратных исключений в try - НЕ СТАНДАРТ
4) извраты конкретного компилятора не уважающего СТАНДАРТ никого
не интересуют
5) ты опять обосрался - иди смени трусы засранец !

zzz

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


>кстати видели последний "красивый" баг в gcc-3.2 ?
>зацените:

...skip...
> Actual output:
>
>  0 1 0
>  1 0 0
>  1 2 1
>  2 3 4
>
> Expected output:
>
>  2 2 3
>  1 3 3
>  1 2 4
>  2 3 4
>
>*/

$ gcc --version
gcc (GCC) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)
$ ./a.out
2 2 3
1 3 3
1 2 4
2 3 4

Ну и где косяк ?
или ты по рассылкам древних багов лазишь ??




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

У клоуна zzz ровно 2 часа осталось для ответа на мой вопрос.

>"Переносимые программы"

Размечтался, эникейщик! Ну-ка, быстренько перенесите

#pragma comment (lib, "uuid.lib")

Жду ответа! Еще раз анонимус облажался?

Понятно, почему клоун малыш-онанимус говорит про "детский садик". Это он там C изучал, cудя по его уровню знаний - НИ НА ОДИН вопрос он НЕ ответил. (Кстати, как там "переносимость" ключа "/we"? Вам это в детском садике объясняли?)

"чтим стандарты"

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

Короче, жду ответа через 2 часа. Кроме того, раз заикнулись про "переносимось" добавляю вопрос про #pragma comment.

NikS.

anonymous
()

Dolboebs Summit

NikS, желаю тебе получить сертификат. Чем больше дебилов его будут иметь, тем меньше он будет цениться.

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

2zzz, ты придурок или как? я же говорю что это баг в gcc-3.2, в 2.95 и 3.3 его нету

anonymous
()

>>я же говорю что это баг в gcc-3.2, в 2.95 и 3.3 его нету я понимаю :) ну и кого это имеет если в 2.95 и в 3.3 этого НЕТ ?!!

zzz

anonymous
()

>>я же говорю что это баг в gcc-3.2, в 2.95 и 3.3 его нету
я понимаю :) ну и кого это имеет если в 2.95 и в 3.3 этого НЕТ ?!!

zzz

anonymous
()
Ответ на: Dolboebs Summit от anonymous

> NikS, желаю тебе получить сертификат. Чем больше дебилов его будут иметь, тем меньше он будет цениться.

Согласен..

anonymous
()

2клоун-никс
>>У клоуна zzz ровно 2 часа осталось для ответа на мой вопрос.
У тебя осталось 5 минут чтобы застрелиться !!!

>>Размечтался, эникейщик!
Эникейщик это ты мой милый мальчик, а я дипломированный инженер-программист имеющий красный диплом и многолетний опыт разработок на ANSI C/ASNI C++ и asm'е нескольких процов.

>>Ну-ка, быстренько перенесите
>>#pragma comment (lib, "uuid.lib")
Во-первых быстренько заткнись, во-вторых засунь эту НЕ СТАНДАРТНУЮ конструкцию себе в зад ! :)

>>Понятно, почему клоун малыш-онанимус говорит про "детский садик".
>>Это он там C изучал, cудя по его уровню знаний - НИ НА ОДИН вопрос
>>он НЕ ответил. (Кстати, как там "переносимость" ключа "/we"?
Смотрим cl /? - такого ключа не находим, допускаю что он все-же есть,
поясните тогда нам что он делает в вашем сраном VC :)
И ЕЩЕ раз СПИСОК ПРЕТЕНЗИЙ к gcc - В СТУДИЮ !!!

>>Интересно, а если кто-то купит DVD плейер, то он будет читать >>стандарты DVD или инструкцию по конкретному DVD проигрывателю ?
Проблемы с восприятием ? Пользователь DVD и программист
это люди которым необходим несколько разный уровень знаний :)
Если человек купит проигрыватель DVD который не будет поддерживать стандарт DVD - на помойку такой проигрыватель. Своему приятелю этот человек тут же посоветует покупать DVD проигрыватели которые уважают стандарт DVD :)))

>>Короче, жду ответа через 2 часа. Кроме того, раз заикнулись про >>"переносимось" добавляю вопрос про #pragma comment.
Жду твоего самоубийства еще 2 минуты. Кроме того предлагаю затнуться и перечитать все что вам УЖЕ ответили !

zzz

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

Эй, анонимус-эникейщик, пишущий "переносимые программы"! ;-))

Вот это 

#include <iostream>

a()
{
   std::cout << "Intel" << std::endl;
   return 0;
}

main()
{
   a();
   std::cout << "Intel 7" << std::endl;
}

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

cl -WX -GX zzz.cpp ?

а так 

icl -WX -GX zzz.cpp ?

А если int a() {...}? Что там Intel говорит про стандарты?

А вот это

a()
{
   std::cout << "Intel" << std::endl;
   // умышленно, клоун ведь лажанулся с main() ;-)!!! 
   // return 0;
}

main()
{
   a();
   std::cout << "Intel 7" << std::endl;
}

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

cl -WX -GX zzz.cpp ?

а так 

icl -WX -GX zzz.cpp ?

Лажайтесь и дальше клоун-теоретик! ;-))))))

Остался час!


NikS.


anonymous
()

2monk: это НОРМАЛЬНО - если ты еще раз прочитаешь этот тред выкидывая сообщения некоего никса то ты увидишь что этому долбоебу уже необнократно объясняли что в данном случае ПОВЕДЕНИЕ НЕ ОПРЕДЕЛЕНО ! НЕ ОПРЕДЕЛЕНО !!!

anonymous
()

> многолетний опыт разработок на ANSI C/ASNI C++ и asm'е нескольких процов

"ASNI C++" ? Может быть ANSI/ISO C++? (Или совсем точно: C++ ISO/IEC)

Это случайно не про Вас, о великий:

http://www.compulenta.ru/2002/3/15/26804/

А ссылочку на ваши работы дайте, pls.

PS. Кстати, на lenta.ru был клоун с никнеймом "Инженер". Это случайно не Вы?

NikS.

anonymous
()

NikS, переносятся *приложения*, а не код. Код может быть изначально либо переносимым, либо нет. Переносимый = соответствущий стандартам.

lenin
()

2клоун-никс: >>Специалистов без сертификата, будем реалистами, серьезные работодатели >>не рассматривают Ну вот тебя и не рассматривают :) У меня есть красный диплом и кой-какие сертификаты - однако мне они нафиг не нужны так как серьезных работадателей интересуют ЗНАНИЯ а не левые бумажки :))) Вообщем пальцы хватит гнуть дядя !

>>анонимус-знаток исключений и здесь облажался речь об исключениях завел не я и пока лажаешься здесь только ты - великий знаток стандарта C++ :))) Ты уж пожалуйста прочитай хоть одну книжку и только потом пишу сюда всякий бред - нам твои десткие откровения не интересны :)

zzz

anonymous
()

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

anonymous
()

> Переносимый = соответствущий стандартам

А, простите, Java каким стандартам соответствует? И переносимое ли по Вашему приложение, использующее COM?

NikS.

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


NikS - иди в жопу, со своими детскими вопросами
Тупость - не лечиться, умище за сертификатом не спрячешь

anonymous
()

2клоун-никс:
ЕЩЕ раз - ВАШЕ (кто ты такой мы уже выяснили) мнение
обо мне меня не интересует :)
СПИСОК ПРЕТЕНЗИЙ К gcc В СТУДИЮ !!!

zzz

anonymous
()

> лажается

Лажа анонимуса-краснодипломника:

1. return в main() 2.1. #pragma warning (error:###) 2.2. /we### 3. #pragma comment(...) 4. "A *a" в Intel == "A *a = NULL"; >на помойку такой проигрыватель.

Сходите на http://www.dvd.ru/, посмотрите списки совместимости - не лажайтесь уж и тут (впрочем с Вашей востребованностью на рынке DVD - вешь недоступная)

На помойку инженеров, которые "пишут процессоры на ассемблере"

NikS.

anonymous
()

Вот "Инженер", специально для Вас.

http://www.dvdspecial.ru/dvdfaq16.phtml#1.41

Помечтайте и пишите дальше процессоры на ассемблере ;-)))) Красный диплом очень Вам поможет.

У Вас полчаса до ответа.

NikS.

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

а того, что в последних дистрах RH 9, MDK9.1 идёт gcc-3.2

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

>Смотрим cl /? - такого ключа не находим,

Инженер, очки купите:

"/we<n> treat warning n as an error"

"#pragma warning (error: <n>)" == "/we<n>"

А лучше сходите не в детский садик, а в "Специалист.ру" Там Вас хоть как следует по M1011 обучат.

NikS.

PS. Но "на ANSI C/ASNI C++ и asm'е нескольких процов" я распечатую и на стеночку в рамке повешу!

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

>Ну-ка, быстренько перенесите
>#pragma comment (lib, "uuid.lib")

a preprocessing directive of the form
#pragma pp-tokens_opt new_line
causes the implementation to behave in an implementation-defined manner. Any pragma that is not recognized by the implementation is ignored.

Вопросы есть?

>Кстати, как там "переносимость" ключа "/we"?

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

>Интересно, а если кто-то купит DVD плейер, то он будет читать стандарты DVD или инструкцию по конкретному DVD проигрывателю?

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

AC
()

Hi!

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

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

"Секретарь комитета по стандартам ANSI/ISO C++ Херб Саттер стал членом подразделения .NET корпорации Microsoft 15 марта 2002 года, 11:58; текст: Компьюлента

Корпорация Microsoft объявила, что намерена привести язык Visual C++ .NET в соответствие со стандартом C++ ISO/IEC 14882-1998. Корпорации удалось привлечь к работе в своем подразделении Developer and Platform Evangelism Division, занимающемся разработкой платформы .NET, секретаря комитета по стандартам ANSI/ISO и специалиста по языку C++ Херба Саттера.

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

Саттер является признанным экспертом в языке C++, ему принадлежат такие работы, как "Exceptional C++" и "More Exceptional C++," а также две книги из серии "C++ In Depth", заявленной автором языка Бьярном Стровструпом. Он также является редактором и колумнистом журнала "C/С++ User's Journal".

Саттер уже 15 лет занимается разработками коммерческого программного обеспечения. Ему принадлежат несколько десятков патентов на изобретения в области разработки и организации распределенных баз данных, организации распределенных сетей и криптографической защиты баз данных. Саттер также долгое время работал в комитете по стандартам ISO/ANSI SQL."

NikS.

anonymous
()

2клоун-неудачник-никс:
>>Лажа анонимуса-краснодипломника:
>>1. return в main()
глаза разуй - я тебе сказал что об этом писал не я

>>2.1. #pragma warning (error:###)
>>2.2. /we###
>>3. #pragma comment(...)
НЕ СТАНДАРТ - зачунь себе в зад

>>4. "A *a" в Intel == "A *a = NULL";
ПОВЕДЕНИЕ НЕ ОПРЕДЕЛЕНО - ты идешь в зад

>>>на помойку такой проигрыватель.
>>Сходите на http://www.dvd.ru/, посмотрите списки совместимости
Отлично - купи себе патефон и слушай на нем DVD - совместимость ведь не нужна ? :))) Впрочем откуда у тебя бабки ?! :)))

>>На помойку инженеров, которые "пишут процессоры на ассемблере"
а я пишу "процессоры на ассемблере" ?! :) тебя плющит малыш ?! :)

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

>а я пишу "процессоры на ассемблере" ?! :)

Цитирую:

>"многолетний опыт разработок на ANSI C/ASNI C++ и asm'е нескольких процов."

Великий и могучий русский языка Инженер хорошо знает, однака?

Списочек на Ваши работы в студию.

NikS.

anonymous
()

>>>Смотрим cl /? - такого ключа не находим, >>Инженер, очки купите: Что-ж а теперь возьми VC++6.0 comannd-line компилер версии 12.00.8168 сделай ему cl /? и иди в зад так как в нем опции /we нет :)

>>Но "на ANSI C/ASNI C++ и asm'е нескольких процов" я распечатую >>и на стеночку в рамке повешу! Я не против :))) Будешь смотреть и мечтать - как хорошо быть программистом, но ТЕБЕ этого не дано :)))

zzz

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

>a()
>{
> std::cout << "Intel" << std::endl;
> // умышленно, клоун ведь лажанулся с main() ;-)!!!
> // return 0;
>}

Flowing off the end of a function is equivalent to a return with no value; this results in undefined behaviour in a value-returning function.

>будет так компилироваться cl -WX -GX zzz.cpp ?

Как это будет компилироваться с ключами -Foo -Bar -Baz компилятора X версии Y.Z, никого не волнует. Нормальный человек знает, что ничего хорошего, если он забудет return, он не получит, поэтому при коденье функции ставит его на автомате. Настоящее знание -- не _как_, а _почему_.
Какое сообщение с каким ключом даст какой компилятор, и медведь может запомнить.

AC
()

>так как в нем опции /we нет :)

Инженер, "хорошо быть программистом" на фирме, которая даже MS.NET купить себе не может. Платят, наверное, офигительно - все DVD фильмы скупите.

NikS.

anonymous
()

>что ничего хорошего, если он забудет return, он не получит

Это все теория.

Intel в отличе от MS потребует 

int a()  // int! 
{
   std::cout << "Intel" << std::endl;
   return 0;
}

Уж извиняйте - customer first! И customer платит 
"медведям" за подобные знания и консультации.


NikS.



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

>Вот для этого я и загляну в инструкцию конкретного аппарата, а не в "стандарт".

Вот загляните тогда, и расскажите, как вы будете переносить ключ
--one_instantiation_per_object и restrict указатели.
Вы любите тут задавать "детские" вопросы -- и я задам. Что такое restrict указатель? Каковы правила пользования restrict указателями. Как наличие restrict указателей влияет на оптимизатор?

А ваще, ваше пользанье по сковородке меня не перестает удивлять. Когда дело касается вашего любимого до-диеза, его "стандартность" вы приводите как достоинство. Когда дело касается C++, вам на нарушение стандарта наплевать. Потрахайтесь хоть раз с переносом -- и поймете, что стандарт придуман не абы как.

>я выберу тот компилятор, который наиболее востребован на рынке,

Этот компилятор работает только под одной ОС. Следовательно, в большом числе случаев просто не катит.

>Секретарь комитета по стандартам ANSI/ISO C++ Херб Саттер стал членом подразделения .NET корпорации Microsoft 15 марта 2002 года

Это было год назад. С тех пор никаких подвижек не видно.
Более того, пробегала инфа, что MS забивает на развитие C++ и приведение своего компайлера в соответствие стандарту, а будет концентрироваться на "возможностях для конечных программистов".

AC
()

>Настоящее знание -- не _как_, а _почему_.

Наука не отвечает на вопрос "почему". Наука отвечает на вопрос "как". Вопрос "почему" ставят, по выражению Луговского, "фаллософствующие".

NikS.

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

>Это все теория.

Это как раз практика. Которая заключается в том, что нельзя полагаться на обработку ошибок конкретным компилятором, а стараться писать правильно. Уж return то не забыть -- невелика сложность.

> И customer платит "медведям" за подобные знания и консультации.

Ни разу не видел кастомера, который платил бы за тупое знание ключей компилятора. Обычно кастомеры платят за работу.

AC
()

4gcc-teapot где-то на 3-й странице:
Под стабильным и бесплатным vc++ ты имел ввиду не vc++ 6, не обрезанный,
ставящийся нормально, без замены dll-ек (и ошибки на dll-ку), на
пиратских дисках?
Есть. :)

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

>Наука не отвечает на вопрос "почему". Наука отвечает на вопрос "как".

Программирование -- это не наука.
И вопросы "почему" не _ставят_. А на них _отвечают_.
Любой "практический" (вы их очень любите) инженер знает, хотя бы примерно, почему профиль такой-то конкретной балки именно такой.
Любой профессионал знает, _почему_ в данный момент он делает именно _так_. А тот, кто знает только _как_, но не знает, _зачем_ -- это не специалист, а извините, попугай. Который пишет, извиняюсь за намек, попугайские конструкции вида
void f() throw (A) {... }
для функции, которая не кидает и не собирается кидать никаких исключений.
Делает, не осознавая, что он делает -- а просто попугайски повторяя то, что он где-то когда-то видел.

AC
()

2клоун-неудачник-никс: >>Списочек на Ваши работы в студию. Что с чукотки приехал ? Фразы строить не умеешь ?! :)))

zzz

anonymous
()

2клоун-неудачник-никс:
>>Списочек на Ваши работы в студию. Что с чукотки приехал ?
Фразы строить не умеешь ?! :)))

zzz

anonymous
()

>большом числе случаев просто не катит.

Но катит в бОльшем числе случаев.

>С тех пор никаких подвижек не видно

Точно не отвечу, так как .NET2003 мы получим только на следующей неделе. Но С# и .NET это действительно в отличие от моей старой любви Джавы - это ECMA стандарты.

> Что такое restrict указатель

Простите, случайно не "restricted pointers"? Те которым гарантировно не иметь алиасов?

> хоть раз с переносом

У нас старые COBOL программы "влезли" в .NET.

NikS.

anonymous
()

>>Инженер, "хорошо быть программистом" на фирме, которая даже MS.NET >>купить себе не может.
Хе-хе - купить мы можем все - даже такого "специалиста" как ты со всем твоим дерьмом в мозгах, однако покупать откровенное говно типа VC++, MS.NET не будем. Мы уж как нибудь на нормальных компиляторах поработаем :)))

zzz

anonymous
()

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

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.