Skip to content

Commit a15b629

Browse files
committed
Revert "Strip the full path from __FILE__ in the LDBG macro and keep only the filename (#150677)"
This reverts commit 5d26e3c. It breaks the modules build of clang, since every source file has a different version of this macro, which causes https://green.lab.llvm.org/job/clang-stage2-Rthinlto/ to run out of space. We should probably be using __FILE_NAME__ instead when the host compiler supports it, but until then let's revert-to-green, and un-block the bots. see: #150677 see: #150677 (comment) rdar://157465825
1 parent 342bf58 commit a15b629

File tree

2 files changed

+21
-85
lines changed

2 files changed

+21
-85
lines changed

llvm/cmake/modules/LLVMProcessSources.cmake

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -58,21 +58,6 @@ function(llvm_process_sources OUT_VAR)
5858
set(sources ${ARG_UNPARSED_ARGUMENTS})
5959
llvm_check_source_file_list(${sources})
6060

61-
# Don't generate __SHORT_FILE__ on VS builds as it can prevent build parallelisation.
62-
if(NOT CMAKE_GENERATOR MATCHES "Visual Studio")
63-
foreach(fn ${sources})
64-
get_filename_component(suf ${fn} EXT)
65-
if("${suf}" STREQUAL ".cpp" OR "${suf}" STREQUAL ".c")
66-
get_filename_component(short_name ${fn} NAME)
67-
set_property(
68-
SOURCE ${fn}
69-
APPEND
70-
PROPERTY COMPILE_DEFINITIONS __SHORT_FILE__="${short_name}")
71-
endif()
72-
endforeach()
73-
endif()
74-
75-
7661
# This adds .td and .h files to the Visual Studio solution:
7762
add_td_sources(sources)
7863
find_all_header_files(hdrs "${ARG_ADDITIONAL_HEADER_DIRS}")

llvm/include/llvm/Support/DebugLog.h

Lines changed: 21 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -41,81 +41,32 @@ namespace llvm {
4141
//
4242
#define LDBG(...) _GET_LDBG_MACRO(__VA_ARGS__)(__VA_ARGS__)
4343

44-
// Helper macros to choose the correct macro based on the number of arguments.
45-
#define LDBG_FUNC_CHOOSER(_f1, _f2, ...) _f2
46-
#define LDBG_FUNC_RECOMPOSER(argsWithParentheses) \
47-
LDBG_FUNC_CHOOSER argsWithParentheses
48-
#define LDBG_CHOOSE_FROM_ARG_COUNT(...) \
49-
LDBG_FUNC_RECOMPOSER((__VA_ARGS__, LDBG_LOG_LEVEL, ))
50-
#define LDBG_NO_ARG_EXPANDER() , LDBG_LOG_LEVEL_1
51-
#define _GET_LDBG_MACRO(...) \
52-
LDBG_CHOOSE_FROM_ARG_COUNT(LDBG_NO_ARG_EXPANDER __VA_ARGS__())
53-
54-
// Dispatch macros to support the `level` argument or none (default to 1)
55-
#define LDBG_LOG_LEVEL(LEVEL) \
56-
DEBUGLOG_WITH_STREAM_AND_TYPE(llvm::dbgs(), LEVEL, DEBUG_TYPE)
57-
#define LDBG_LOG_LEVEL_1() LDBG_LOG_LEVEL(1)
58-
59-
#define DEBUGLOG_WITH_STREAM_TYPE_FILE_AND_LINE(STREAM, LEVEL, TYPE, FILE, \
60-
LINE) \
61-
for (bool _c = \
62-
(::llvm::DebugFlag && ::llvm::isCurrentDebugType(TYPE, LEVEL)); \
63-
_c; _c = false) \
64-
for (::llvm::impl::RAIINewLineStream NewLineStream{(STREAM)}; _c; \
65-
_c = false) \
66-
::llvm::impl::raw_ldbg_ostream{ \
67-
::llvm::impl::computePrefix(TYPE, FILE, LINE, LEVEL), NewLineStream} \
68-
.asLvalue()
69-
70-
#define DEBUGLOG_WITH_STREAM_TYPE_AND_FILE(STREAM, LEVEL, TYPE, FILE) \
71-
DEBUGLOG_WITH_STREAM_TYPE_FILE_AND_LINE(STREAM, LEVEL, TYPE, FILE, __LINE__)
72-
// When __SHORT_FILE__ is not defined, the File is the full path,
73-
// otherwise __SHORT_FILE__ is defined in CMake to provide the file name
74-
// without the path prefix.
75-
#if defined(__SHORT_FILE__)
76-
#define DEBUGLOG_WITH_STREAM_AND_TYPE(STREAM, LEVEL, TYPE) \
77-
DEBUGLOG_WITH_STREAM_TYPE_AND_FILE(STREAM, LEVEL, TYPE, __SHORT_FILE__)
78-
#else
79-
#define DEBUGLOG_WITH_STREAM_AND_TYPE(STREAM, LEVEL, TYPE) \
80-
DEBUGLOG_WITH_STREAM_TYPE_AND_FILE(STREAM, LEVEL, TYPE, \
81-
::llvm::impl::getShortFileName(__FILE__))
82-
#endif
44+
#define DEBUGLOG_WITH_STREAM_AND_TYPE(STREAM, TYPE) \
45+
for (bool _c = (::llvm::DebugFlag && ::llvm::isCurrentDebugType(TYPE)); _c; \
46+
_c = false) \
47+
::llvm::impl::LogWithNewline(TYPE, __FILE__, __LINE__, (STREAM))
8348

8449
namespace impl {
85-
86-
/// A raw_ostream that tracks `\n` and print the prefix after each
87-
/// newline.
88-
class LLVM_ABI raw_ldbg_ostream final : public raw_ostream {
89-
std::string Prefix;
90-
raw_ostream &Os;
91-
bool HasPendingNewline;
92-
93-
/// Split the line on newlines and insert the prefix before each
94-
/// newline. Forward everything to the underlying stream.
95-
void write_impl(const char *Ptr, size_t Size) final {
96-
auto Str = StringRef(Ptr, Size);
97-
// Handle the initial prefix.
98-
if (!Str.empty())
99-
writeWithPrefix(StringRef());
100-
101-
auto Eol = Str.find('\n');
102-
while (Eol != StringRef::npos) {
103-
StringRef Line = Str.take_front(Eol + 1);
104-
if (!Line.empty())
105-
writeWithPrefix(Line);
106-
HasPendingNewline = true;
107-
Str = Str.drop_front(Eol + 1);
108-
Eol = Str.find('\n');
109-
}
110-
if (!Str.empty())
111-
writeWithPrefix(Str);
50+
class LogWithNewline {
51+
public:
52+
LogWithNewline(const char *debug_type, const char *file, int line,
53+
raw_ostream &os)
54+
: os(os) {
55+
if (debug_type)
56+
os << "[" << debug_type << "] ";
57+
os << file << ":" << line << " ";
11258
}
113-
void emitPrefix() { Os.write(Prefix.c_str(), Prefix.size()); }
114-
void writeWithPrefix(StringRef Str) {
115-
flushEol();
116-
Os.write(Str.data(), Str.size());
59+
~LogWithNewline() { os << '\n'; }
60+
template <typename T> raw_ostream &operator<<(const T &t) && {
61+
return os << t;
11762
}
11863

64+
// Prevent copying, as this class manages newline responsibility and is
65+
// intended for use as a temporary.
66+
LogWithNewline(const LogWithNewline &) = delete;
67+
LogWithNewline &operator=(const LogWithNewline &) = delete;
68+
LogWithNewline &operator=(LogWithNewline &&) = delete;
69+
11970
public:
12071
explicit raw_ldbg_ostream(std::string Prefix, raw_ostream &Os,
12172
bool HasPendingNewline = true)

0 commit comments

Comments
 (0)