From 6cb99d4516a774e9654a572ec20a2a8c601452f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonathan=20M=C3=BCller?= Date: Mon, 26 Mar 2018 20:49:16 +0200 Subject: [PATCH 1/3] Revert "Add (crude) workaround for _DEBUGGER_STEP_INTO #line in MSVC" This reverts commit 2004780ea623825765e7a29b911403bcfa50ce00. --- src/libclang/preprocessor.cpp | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/src/libclang/preprocessor.cpp b/src/libclang/preprocessor.cpp index 9ccdcad..8d8564c 100644 --- a/src/libclang/preprocessor.cpp +++ b/src/libclang/preprocessor.cpp @@ -88,8 +88,7 @@ namespace } // parse and log diagnostic - // returns true if a diagnostic was logged due to a bug, but it is otherwise harmless - bool log_diagnostic(const diagnostic_logger& logger, const std::string& msg) + void log_diagnostic(const diagnostic_logger& logger, const std::string& msg) { auto ptr = msg.c_str(); @@ -105,13 +104,7 @@ namespace while (*ptr && *ptr != '\n') message.push_back(*ptr++); - // see https://github.com/foonathan/cppast/issues/46 - auto harmless_diag = - message.find("invalid filename for #line directive") != std::string::npos; - logger.log("preprocessor", diagnostic{std::move(message), std::move(loc), sev}); - - return harmless_diag; } // parses missing header file diagnostic and returns the file name, @@ -362,8 +355,6 @@ namespace std::string write_macro_file(const libclang_compile_config& c, const std::string& full_path, const diagnostic_logger& logger) { - auto expect_bad_exit_code = false; - std::string diagnostic; auto diagnostic_logger = [&](const char* str, std::size_t n) { diagnostic.reserve(diagnostic.size() + n); @@ -373,7 +364,7 @@ namespace else if (*str == '\n') { // consume current diagnostic - expect_bad_exit_code |= log_diagnostic(logger, diagnostic); + log_diagnostic(logger, diagnostic); diagnostic.clear(); } else @@ -396,7 +387,7 @@ namespace auto exit_code = process.get_exit_status(); DEBUG_ASSERT(diagnostic.empty(), detail::assert_handler{}); - if (exit_code != 0 && !expect_bad_exit_code) + if (exit_code != 0) throw libclang_error("preprocessor (macro): command '" + cmd + "' exited with non-zero exit code (" + std::to_string(exit_code) + ")"); @@ -438,7 +429,7 @@ namespace expect_bad_exit_code = true; } else - expect_bad_exit_code |= log_diagnostic(logger, diagnostic); + log_diagnostic(logger, diagnostic); diagnostic.clear(); } From 045a33fbd69cf314fa7b1f8fdff229cc73b6e5de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonathan=20M=C3=BCller?= Date: Mon, 26 Mar 2018 21:21:38 +0200 Subject: [PATCH 2/3] Add a proper workaround for #46 --- src/libclang/libclang_parser.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/libclang/libclang_parser.cpp b/src/libclang/libclang_parser.cpp index 3edecd7..fe13f96 100644 --- a/src/libclang/libclang_parser.cpp +++ b/src/libclang/libclang_parser.cpp @@ -91,7 +91,7 @@ namespace } return result; } -} +} // namespace libclang_compile_config::libclang_compile_config() : compile_config({}), @@ -150,7 +150,7 @@ namespace // relative w/o separator return dir.std_str() + file; } -} +} // namespace void detail::for_each_file(const libclang_compilation_database& database, void* user_data, void (*callback)(void*, std::string)) @@ -226,7 +226,7 @@ namespace // else skip argument } } -} +} // namespace libclang_compile_config::libclang_compile_config(const libclang_compilation_database& database, const std::string& file) @@ -303,7 +303,12 @@ void libclang_compile_config::do_set_flags(cpp_standard standard, compile_flags } if (flags & compile_flag::ms_compatibility) + { add_flag("-fms-compatibility"); + // see https://github.com/foonathan/cppast/issues/46 + define_macro("_DEBUG_FUNCTIONAL_MACHINERY", ""); + } + if (flags & compile_flag::ms_extensions) add_flag("-fms-extensions"); } @@ -484,7 +489,7 @@ namespace clang_getPresumedLocation(loc, nullptr, &line, nullptr); return line; } -} +} // namespace std::unique_ptr libclang_parser::do_parse(const cpp_entity_index& idx, std::string path, const compile_config& c) const try From e67e354d9b3835b65b2c9e4552b1c2945ff75bf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonathan=20M=C3=BCller?= Date: Mon, 26 Mar 2018 21:23:08 +0200 Subject: [PATCH 3/3] Fix bad assertion --- src/cpp_token.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cpp_token.cpp b/src/cpp_token.cpp index 8664f33..e1b1df1 100644 --- a/src/cpp_token.cpp +++ b/src/cpp_token.cpp @@ -216,7 +216,7 @@ namespace for (; is_digit(*ptr) || *ptr == '\''; ++ptr) if (*ptr != '\'') result += *ptr; - DEBUG_ASSERT(result.back() != '\'', detail::assert_handler{}); + DEBUG_ASSERT(result.empty() || result.back() != '\'', detail::assert_handler{}); return result; } @@ -569,7 +569,7 @@ namespace return type_safe::nullopt; } -} +} // namespace cpp_token_string cpp_token_string::tokenize(std::string str) { @@ -605,7 +605,7 @@ namespace { return std::isalnum(c) || c == '_'; } -} +} // namespace std::string cpp_token_string::as_string() const {