C++ 当(CUDA 7.5';s)nvcc/cudafe++;故障导致的车祸?

C++ 当(CUDA 7.5';s)nvcc/cudafe++;故障导致的车祸?,c++,compilation,cuda,segmentation-fault,C++,Compilation,Cuda,Segmentation Fault,今天我正在编译一些TEPDATED CUDA代码,突然,我发现: nvcc foo.cu -dc -o foo.o -m64 --std c++11 -gencode arch=compute_30,code=compute_30 -I/usr/local/cuda/include -I/path/to/includes Segmentation fault (core dumped) 这是Debian Stretch上的CUDA 7.5和GCC 4.9.3。触发segfault的代码实

今天我正在编译一些TEPDATED CUDA代码,突然,我发现:

nvcc foo.cu -dc -o foo.o -m64 --std c++11 -gencode arch=compute_30,code=compute_30  -I/usr/local/cuda/include  -I/path/to/includes 
Segmentation fault (core dumped)
这是Debian Stretch上的CUDA 7.5和GCC 4.9.3。触发segfault的代码实际上没有使用Boost和CUB

运行gdb,我得到:

...
Reading symbols from /usr/local/cuda/bin/cudafe++...(no debugging symbols found)...done.
[New LWP 26725]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `cudafe++ --allow_managed --m64 --gnu_version=40903 --c++11 --parse_templates --'.

Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x0000000000458b48 in ?? ()
(gdb) bt
#0  0x0000000000458b48 in ?? ()
#1  0x0000000000447989 in ?? ()
#2  0x0000000000449a77 in ?? ()
#3  0x0000000000444d6b in ?? ()
#4  0x00000000004467f1 in ?? ()
#5  0x0000000000446bd5 in ?? ()
#6  0x00000000004536e7 in ?? ()
#7  0x0000000000446c95 in ?? ()
#8  0x00000000004536e7 in ?? ()
#9  0x0000000000446c95 in ?? ()
#10 0x0000000000448403 in ?? ()
#11 0x000000000040b042 in ?? ()
#12 0x00007f3637c17610 in __libc_start_main (main=0x40af50, argc=14, argv=0x7ffd24a32058, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffd24a32048) at libc-start.c:291
#13 0x0000000000401769 in ?? ()
#14 0x00007ffd24a32048 in ?? ()
#15 0x000000000000001c in ?? ()
#16 0x000000000000000e in ?? ()
#17 0x00007ffd24a33e7b in ?? ()
#18 0x00007ffd24a33e84 in ?? ()
#19 0x00007ffd24a33e94 in ?? ()
#20 0x00007ffd24a33e9a in ?? ()
#21 0x00007ffd24a33eae in ?? ()
#22 0x00007ffd24a33eb6 in ?? ()
#23 0x00007ffd24a33ec8 in ?? ()
#24 0x00007ffd24a33ed3 in ?? ()
#25 0x00007ffd24a33ee5 in ?? ()
#26 0x00007ffd24a33f16 in ?? ()
#27 0x00007ffd24a33f27 in ?? ()
#28 0x00007ffd24a33f56 in ?? ()
#29 0x00007ffd24a33f6c in ?? ()
#30 0x00007ffd24a33f9b in ?? ()
#31 0x0000000000000000 in ?? ()
。。。
正在从/usr/local/cuda/bin/cudafe++…读取符号(未找到调试符号)…完成。
[新LWP 26725]
[已启用使用libthread_db的线程调试]
使用主机libthread_db library“/lib/x86_64-linux-gnu/libthread_db.so.1”。
核心由'cudafe++--allow_managed--m64--gnu_version=40903--c++11--parse_templates--'生成。
程序以信号SIGSEGV终止,分段故障。
#0 0x0000000000458b48英寸??()
(gdb)英国电信
#0 0x0000000000458b48英寸??()
#1 0x0000000000447989英寸??()
#2 0x0000000000449a77英寸??()
#3 0x00000000004444D6B英寸??()
#4 0x00000000004467f1英寸??()
#5 0x0000000000446bd5英寸??()
#6 0x00000000004536e7英寸??()
#7 0x0000000000446c95英寸??()
#8 0x00000000004536e7英寸??()
#9 0x0000000000446c95英寸??()
#10 0x0000000000448403英寸??()
#11 0x000000000040b042英寸??()
#12 0x00007f3637c17610位于libc start处的uu libc_start_main(main=0x40af50,argc=14,argv=0x7ffd24a32058,init=,fini=,rtld_fini=,stack_end=0x7ffd24a32048)中。c:291
#13 0x0000000000401769英寸??()
#14 0x00007ffd24a32048英寸??()
#15 0x000000000000001c英寸??()
#16 0x000000000000000e英寸??()
#17 0x00007ffd24a33e7b英寸??()
#18 0x00007ffd24a33e84英寸??()
#19 0x00007ffd24a33e94英寸??()
#20 0x00007ffd24a33e9a英寸??()
#21 0x00007ffd24a33eae英寸??()
#22 0x00007ffd24a33eb6英寸??()
#23 0x00007ffd24a33ec8英寸??()
#24 0x00007ffd24a33ed3英寸??()
#25 0x00007ffd24a33ee5英寸??()
#26 0x00007ffd24a33f16英寸??()
#27 0x00007ffd24a33f27英寸??()
#28 0x00007ffd24a33f56英寸??()
#29 0x00007ffd24a33f6c英寸??()
#30 0x00007ffd24a33f9b英寸??()
#31 0x0000000000000000英寸??()
所以这不是很有用。我可以尝试做什么来避免此故障?或者去弄清楚为什么会这样


编辑:我刚注意到-但还没有答案。

崩溃的原因似乎是未能防止使用
关键字不当使用
。这是一个非MCVE(稍后我可能会制作成MCVE):

enum类foo:bool{duol=false,snafu=true};
模板类栏{
公众:
使用foo::愚蠢;
使用foo::snafu;
}

这是错误的C++,应该让编译器给出一个错误,但是由于某种原因,可能是因为与这个片段中的更多代码结合,所以没有发生。相反,

cudafe++
被骗接受了这一点,变得困惑和崩溃

正如@Talonmes所建议的,我们将尝试向nVIDIA提交一份适当的错误报告


编辑:现在很难复制:-(

@JesperJuhl:不是我的代码出错,而是nvcc(或cudafe++)…我会在适当的时候处理我的错误…哦,我想我缺少了一行引号。现在修复。向NVIDIA提交一份错误报告。也许可以尝试简化您试图编译的代码,以分离可能导致金鱼窒息的代码。nvcc 7.0是否重现?对我来说,它“已解决”问题是…如果你能做到的话,向nvidia报告一个bug可能是一件好事it@RegisPortalez:将尝试CUDA 7.0并查看。@Talonmes:在进行此操作的过程中,我注意到即使我注释掉了所有实际实例化的代码,只留下模板,而没有任何新的实现,也会发生segfault。
enum class foo : bool { foolish = false, snafu = true };

template <typename T> class bar {
public:
    using foo::foolish;
    using foo::snafu;
}