Thread Safety Analysis: Avoid infinite recursion in an operator<<

r217556 introduced an operator<<(std::ostream &, StringRef) that seems
to self recurse on some systems, because str.data(), which is a char *,
was being implicitly converted back to StringRef in overload
resolution.

This manifested as SemaCXX/warn-thread-safety-analysis.cpp timing out
in release builds and overflowing the stack in debug builds. One of
the failing systems that saw this is here:

  http://lab.llvm.org:8013/builders/clang-x86_64-darwin11-nobootstrap-RAincremental/builds/4636

Using ostream's write method instead of operator<< should get the bots
going again.

llvm-svn: 217621
This commit is contained in:
Justin Bogner 2014-09-11 19:44:04 +00:00
parent 6f1048f94e
commit 88f0986782
1 changed files with 2 additions and 2 deletions

View File

@ -24,6 +24,7 @@
#include <cstddef>
#include <vector>
#include <utility>
#include <ostream>
namespace clang {
namespace threadSafety {
@ -360,8 +361,7 @@ private:
inline std::ostream& operator<<(std::ostream& ss, const StringRef str) {
ss << str.data();
return ss;
return ss.write(str.data(), str.size());
}