Jac*_*sey 6 c++ openmp clang++
我想我已经发现了一个clang ++ bug,但是我很欣赏有关我的代码是否正确的建议.Clang静态分析器认为它没问题,并且编译时没有问题,但是当使用clang 3.7进行编译时,它会使传递的参考向量的大小完全错误.GCC和clang 3.8都给出了正确的答案.我把它减少到这个测试用例:
#include <vector>
#include <iostream>
// including or excluding omp makes no difference
#include <omp.h>
void doSomething(std::vector<int> &k) {
#pragma omp for
for (int i=0; i<2; ++i) {
std::cout << k.size() << "\n";
}
}
int main() {
std::vector<int> v;
v.push_back(1);
std::vector<int> &j = v;
doSomething(j);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
用libomp(我想),而不是libgomp:
clang-3.7++ -fopenmp clang-err.cpp
./a.out
18446708892352074976
18446708892352074976
clang-3.8++ -fopenmp clang-err.cpp
./a.out
1
1
Run Code Online (Sandbox Code Playgroud)
我在clang 3.7中找不到这样的bug但在3.8中修复了.我不知道如何确定我是否正在使用libomp,尽管这是LLVM/clang的编译方式.这似乎是一件简单的事情,所以我怀疑我做的事情很奇怪,而不是真正的铿锵声.
如果共识是一个铿锵的错误,我将针对3.7进行报告.谢谢.
| 归档时间: |
|
| 查看次数: |
180 次 |
| 最近记录: |