Можно ли привести GCC в бесконечный цикл, введя странный исходный код? И если да, то как? Может быть, можно что-то сделать с помощью шаблона метапрограммирования?Можно ли привести GCC в бесконечный цикл?
ответ
Ошибки особенно преходящи, например, ответ @ Pestilence был найден в GCC 4.4.0 и зафиксирован в 4.4.1. Список Текущий способов переноса GCC в бесконечный цикл, отметьте their Bugzilla.
EDIT: Я только что нашел новый способ, который также вылетает из Комо. На данный момент это более удовлетворительный ответ. Конечно, это should also be fixed soon.
template< int n >
struct a {
a< n+1 > operator->() { return a< n+1 >(); }
};
int main() {
a<0>()->x;
}
Мне нравится этот ответ. Я подожду, если будет еще что-то, но, вероятно, я его приму. –
Я думаю, что вы могли бы сделать это с #include
Просто #include "file1.c" в file2.c и #include "file2.c" в file1
предложение вызывает компилятор цикла много неудачно, а не контур бесконечно
Это было бы легко проверить, не так ли? – 2010-03-11 21:59:17
Нет, он обнаруживает круговую зависимость. – NomeN
gcc в конечном итоге завершится неудачей с ошибкой '#include inested too deep', а не бесконечным циклом. Быстрый тест показывает, что это так. gcc не обнаруживает круговую зависимость (gcc на OS X Snow Leopard), но она не бесконечна –
Возможно. Но большинство компиляторов (и большинство стандартизованных языков) имеют ограничения на такие вещи, как глубины рекурсии в шаблонах или включенные файлы, после чего компилятор должен выполнить диагностику. Компиляторы, которые этого не делают, обычно не нравятся пользователям.
Не знаю о gcc, но старый pcc использовал для перехода в бесконечный цикл, компилируя некоторые виды бесконечных циклов (те, которые скомпилированы до _x: jmp _x).
Да.
Почти каждая компьютерная программа имеет проблемы с завершением цикла. Я думаю, что GCC, однако, исчерпает RAM, прежде чем бесконечный цикл станет очевидным. В его дизайне не так много «свободных» операций.
Синтаксический анализатор & препроцессор не создаст проблем. Я готов поспорить, что вы можете настроить таргетинг на оптимизатор, который, скорее всего, будет иметь больше ошибок при реализации. Это будет меньше о языке и больше об использовании недостатков, которые вы можете обнаружить из исходного кода. т. е. эксплоит будет неочевидным.
UPDATE
В this particular case, моя теория кажется правильным. Компилятор продолжает выделять ОЗУ, и оптимизатор, похоже, уязвим. Ответ - да. Да, ты можешь.
Комментарий '/ * Теоретически возможно, но * очень маловероятно. */'в этом отчете об ошибке стоит тысячи изображений. – 2010-03-20 19:35:05
Bentley пишет в своей книге «Программирование Pearls», что следующий код привел в бесконечном цикле при оптимизированной компиляции:
void traverse(node* p) {
traverse(p->left);
traverse(p->right);
}
Он говорит: «оптимизатор попытался преобразовать хвостовую рекурсию в петлю, и умер когда он смог найти тест, чтобы закончить цикл ». (стр.139) Он не сообщает точную версию компилятора, где это произошло. Я предполагаю, что новые компиляторы обнаруживают случай.
Отсутствие бесконечного цикла во время компиляции моего компилятора (GCC 4.x) :( –
Поскольку метапрограммирование шаблона C++ на самом деле является завершением Turing, вы можете сделать бесконечную компиляцию.
Например:
template<typename T>
struct Loop {
typedef typename Loop<Loop<T> >::Temp Temp;
};
int main(int, char**) {
Loop<int> n;
return 0;
}
Однако, как ответ передо мной. gcc имеет флаг, чтобы остановить это от бесконечного продолжения (как переполнение стека в бесконечной рекурсии).
Хмм. В прошлый раз я проверяю ' man gcc' У него была опция, определяющая максимальный размер «стека», поэтому это невозможно, так как это не способ работать вокруг бесконечности итераций. –
'' глубина экземпляра шаблона превышает максимум 500'. –
- 1. gcc оптимизация дает бесконечный цикл или segfault
- 2. Бесконечный цикл C, бесконечный цикл
- 3. бесконечный цикл в makefiile
- 4. asp.net бесконечный цикл - это можно сделать?
- 5. Возможно ли обнаружить бесконечный цикл?
- 6. Перерыв в бесконечный цикл
- 7. бесконечный цикл в качели
- 8. Бесконечный цикл
- 9. gulp.watch в бесконечный цикл
- 10. Возможно ли иметь бесконечный цикл в pthread?
- 11. Является ли бесконечный цикл невозможным в nodejs?
- 12. Бесконечный цикл сценария java
- 13. Можно ли привести родной интерфейс в Cocos2dx
- 14. бесконечный цикл в C++
- 15. бесконечный цикл в python?
- 16. Бесконечный цикл в java.util.HashMap
- 17. Бесконечный цикл в shouldOverrideUrlLoading
- 18. Бесконечный цикл в JQuery
- 19. бесконечный цикл в JQuery?
- 20. Бесконечный цикл в программе
- 21. бесконечный цикл в WebHook
- 22. Бесконечный цикл в AbstractOioByteChannel
- 23. Бесконечный цикл в коде
- 24. Запуск в бесконечный цикл
- 25. бесконечный цикл в функциональном программировании?
- 26. Лучший бесконечный цикл
- 27. Бесконечный цикл событий
- 28. Почему for (;;) {...} бесконечный цикл?
- 29. Бесконечный цикл не работает
- 30. остановить бесконечный цикл в потоке
Я рекомендую сообщество wiki для этого. У меня есть способность редактирования, поэтому я установлю это сам, если никто не возражает. – Joshua
@Joshua: Почему сообщество wiki? Это не кажется мне субъективным. Это либо возможно, либо нет. –
Если есть, его следует отправить по адресу http://gcc.gnu.org/bugs/, где он может быть исправлен. – ephemient