[PATCH] D37525: [docs] Add a note on iteration of unordered containers to coding standards
Mandeep Singh Grang via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 6 11:55:14 PDT 2017
mgrang created this revision.
Beware of non-determinism due to iteration order of unordered containers
Repository:
rL LLVM
https://reviews.llvm.org/D37525
Files:
docs/CodingStandards.rst
Index: docs/CodingStandards.rst
===================================================================
--- docs/CodingStandards.rst
+++ docs/CodingStandards.rst
@@ -811,6 +811,20 @@
for (const auto *Ptr : Container) { observe(*Ptr); }
for (auto *Ptr : Container) { Ptr->change(); }
+Beware of non-determinism due to iteration order of unordered containers
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Unordered containers like SmallPtrSet, DenseMap and DenseSet do not have
+a defined iteration order. As a result, iteration of such containers can
+result in non-deterministic code generation. While the generated code
+might not necessarily be "wrong code", this non-determinism might result
+in unexpected runtime crashes or simply hard to reproduce bugs on the
+customer side making it harder to debug and fix.
+
+As a rule of thumb, remember to sort an unordered container before
+iteration. Or try using ordered containers like SmallVector or MapVector
+in case iteration is needed.
+
Style Issues
============
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D37525.114039.patch
Type: text/x-patch
Size: 1057 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170906/b9af28b5/attachment.bin>
More information about the llvm-commits
mailing list