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:
parent
6f1048f94e
commit
88f0986782
|
@ -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());
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue