diff options
author | Justin Bogner <mail@justinbogner.com> | 2014-08-04 17:36:41 +0000 |
---|---|---|
committer | Justin Bogner <mail@justinbogner.com> | 2014-08-04 17:36:41 +0000 |
commit | 487e764b584ddc5954e8acbaaf3552fcc5d8b303 (patch) | |
tree | a25c940b36d9545f5f8dccd72f56e9f6b4211a75 /clang/lib/CodeGen/ModuleBuilder.cpp | |
parent | 90ba0533cd5698839181478140d6be89bfa4b13c (diff) | |
download | llvm-487e764b584ddc5954e8acbaaf3552fcc5d8b303.zip llvm-487e764b584ddc5954e8acbaaf3552fcc5d8b303.tar.gz llvm-487e764b584ddc5954e8acbaaf3552fcc5d8b303.tar.bz2 |
Path: Stop claiming path::const_iterator is bidirectional
path::const_iterator claims that it's a bidirectional iterator, but it
doesn't satisfy all of the contracts for a bidirectional iterator.
For example, n3376 24.2.5 p6 says "If a and b are both dereferenceable,
then a == b if and only if *a and *b are bound to the same object",
but this doesn't work with how we stash and recreate Components.
This means that our use of reverse_iterator on this type is invalid
and leads to many of the valgrind errors we're hitting, as explained
by Tilmann Scheller here:
http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20140728/228654.html
Instead, we admit that path::const_iterator is only an input_iterator,
and implement a second input_iterator for path::reverse_iterator (by
changing const_iterator::operator-- to reverse_iterator::operator++).
All of the uses of this just traverse once over the path in one
direction or the other anyway.
llvm-svn: 214737
Diffstat (limited to 'clang/lib/CodeGen/ModuleBuilder.cpp')
0 files changed, 0 insertions, 0 deletions