是否有可能将GCC带入无限循环?

Kar*_*oor 12 gcc

是否可以通过输入奇怪的源代码将GCC置于无限循环中?如果是,怎么样?也许人们可以用模板元编程做点什么?

pes*_*669 11

是.

几乎每个计算机程序都有循环终止问题.我认为GCC会在无限循环变得明显之前耗尽RAM.其设计中没有太多"免费"操作.

解析器和预处理器不会产生问题.我愿意打赌你可以针对优化器,这可能会有更多的实现错误.它可能不是关于语言,更多的是利用您可以从源代码中发现的漏洞.即漏洞利用是不明显的.

UPDATE

这种特殊情况下,我的理论似乎是正确的.编译器不断分配RAM,优化器确实容易受到攻击.答案是肯定的.是的你可以.

  • 评论`/*理论上可能,但*高度*不太可能.*/`在那个bug报告中值得一千张图片. (3认同)

Pot*_*ter 7

错误特别短暂,例如@ Pestilence的答案在GCC 4.4.0中找到并在4.4.1中修复.有关将GCC置于无限循环的当前方法的列表,请检查他们的Bugzilla.

编辑:我刚刚发现了一种新的方式,也崩溃了Comeau.现在,这是一个更令人满意的答案.当然,它也应该尽快修复.

template< int n >
struct a { 
    a< n+1 > operator->() { return a< n+1 >(); }
};

int main() {
    a<0>()->x;
}
Run Code Online (Sandbox Code Playgroud)