File tree Expand file tree Collapse file tree 2 files changed +28
-5
lines changed Expand file tree Collapse file tree 2 files changed +28
-5
lines changed Original file line number Diff line number Diff line change @@ -51,13 +51,15 @@ class PrettyStackTraceSwiftVersion : public llvm::PrettyStackTraceEntry {
5151};
5252
5353// / Aborts the program, printing a given message to a PrettyStackTrace frame
54- // / before exiting.
54+ // / before exiting. This should be preferred over manually logging to stderr and
55+ // / aborting since that won't be picked up by the crash reporter.
5556[[noreturn]]
5657void abortWithPrettyStackTraceMessage (
5758 llvm::function_ref<void (llvm::raw_ostream &)> message);
5859
5960// / Aborts the program, printing a given message to a PrettyStackTrace frame
60- // / before exiting.
61+ // / before exiting. This should be preferred over manually logging to stderr and
62+ // / aborting since that won't be picked up by the crash reporter.
6163[[noreturn]]
6264void abortWithPrettyStackTraceMessage (llvm::StringRef message);
6365
Original file line number Diff line number Diff line change @@ -40,17 +40,38 @@ void PrettyStackTraceSwiftVersion::print(llvm::raw_ostream &out) const {
4040 out << version::getSwiftFullVersion () << ' \n ' ;
4141}
4242
43+ namespace {
44+ // / Similar to PrettyStackTraceString, but formats multi-line strings for
45+ // / the stack trace.
46+ class PrettyStackTraceMultilineString : public llvm ::PrettyStackTraceEntry {
47+ StringRef Str;
48+
49+ public:
50+ PrettyStackTraceMultilineString (StringRef str) : Str(str) {}
51+ void print (raw_ostream &OS) const override {
52+ // For each line, add a leading character and indentation to better match
53+ // the formatting of the stack trace.
54+ for (auto c : Str.rtrim (' \n ' )) {
55+ OS << c;
56+ if (c == ' \n ' )
57+ OS << " | \t " ;
58+ }
59+ OS << ' \n ' ;
60+ }
61+ };
62+ } // end anonymous namespace
63+
4364void swift::abortWithPrettyStackTraceMessage (
4465 llvm::function_ref<void (llvm::raw_ostream &)> message) {
4566 llvm::SmallString<0 > errorStr;
4667 llvm::raw_svector_ostream out (errorStr);
4768 message (out);
48- llvm::PrettyStackTraceString trace (errorStr.c_str ());
69+
70+ PrettyStackTraceMultilineString trace (errorStr);
4971 abort ();
5072}
5173
5274void swift::abortWithPrettyStackTraceMessage (StringRef message) {
53- auto messageStr = message.str ();
54- llvm::PrettyStackTraceString trace (messageStr.c_str ());
75+ PrettyStackTraceMultilineString trace (message);
5576 abort ();
5677}
You can’t perform that action at this time.
0 commit comments