Incorrect behavior of reversed_range with -O2 g++ option
还没有人认领这个 Issue。
评估
调研方向
首先使用 g++ 或 clang++,分别以 -O0 和 -O2 编译 issue 中的示例代码,然后检查 boost::adaptors::reverse 使用的 reversed_range 入口点。确认优化后的构建产生预期的 2 1 0 输出,并添加一个涵盖报告中的编译器和优化级别的回归测试。
由索引模型根据 Issue 内容生成。
描述
Example code:
#include "boost/iterator/counting_iterator.hpp"
#include "boost/range/iterator_range.hpp"
#include "boost/range/adaptor/reversed.hpp"
#include <iostream>
int main(int, char **)
{
using iterator = boost::counting_iterator<int>;
using iterator_range = boost::iterator_range<iterator>;
using reversed_range = boost::reversed_range<iterator_range>;
iterator first(0), last(3);
iterator_range range(first, last);
reversed_range r_range = boost::adaptors::reverse(range);
reversed_range::const_iterator it = r_range.begin();
for (; it != r_range.end(); ++it)
std::cout << *it << " ";
std::cout << std::endl;
}
Compile with: -O2
Output: 3 integer numbers, different from run to run, similar to
22007 22007 22007
(with g++)
or
-1807142200 0 0
(with clang++)
When compiled with -O0 produces the correct output:
2 1 0
Reproducible with:
Boost 1.67.0, 1.68.0
g++ 6.4.0, 7.3.0, 8.2.0; clang++ 7.0.0-3
CPU architecture: x86-64 (Intel Xeon)
- 主要语言
- C++
- 星标
- 45
- 派生
- 104
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
boostorg/range 的其他 Issue
-
难度 1/5 1 小时以内 新手友好度 65/100
-
难度 1/5 1 小时以内 新手友好度 70/100
-
难度 3/5 1-2 天 新手友好度 45/100
-
难度 3/5 1-2 天 新手友好度 38/100
-
难度 1/5 1 小时以内 新手友好度 55/100
相似的 Issue
-
难度 1/5 1 小时以内 新手友好度 72/100
lxqt/qtermwidget#688 ·
维护者通常 1 天内回复
-
难度 1/5 1 小时以内 新手友好度 92/100
cpinitiative/usaco-guide#6665 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 75/100
mpfaffenberger/privateer_reimagined#658 ·
维护者通常 1 天内回复
-
难度 1/5 1 小时以内 新手友好度 85/100
microsoft/onnxruntime#33018 ·
维护者通常 2 天内回复
-
Type: bug
难度 2/5 1-3 小时 新手友好度 88/100
维护者通常 2 天内回复