[Lldb-commits] [PATCH] D154271: [lldb] Fix data race when interacting with python scripts
mib added inline comments. Comment at: lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h:386 +// to add 1 to its return value. +return m_lock_count.fetch_add(1, std::memory_order_relaxed) + 1; + } JDevlieghere wrote: > Sorry if my previous comment wasn't clear. `std::atomic` provides these > operators so the old code was fine: > https://en.cppreference.com/w/cpp/atomic/atomic/operator_arith Makes sense, we shouldn't touch the implementation of `IncrementLockCount`. Comment at: lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h:389-398 uint32_t DecrementLockCount() { -if (m_lock_count > 0) - --m_lock_count; -return m_lock_count; +// std::atomic::fetch_sub is an atomic post-decrement operation so we need +// to subtract 1 from its return value. +uint32_t count = m_lock_count.fetch_sub(1, std::memory_order_relaxed) - 1; +if (static_cast(count) < 0) { + // Handle underflow here & reset count to zero. + count = 0; You're right, but I think we should at least keep the guardrails to prevent returning an underflow value and return 0 instead. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D154271/new/ https://reviews.llvm.org/D154271 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D154271: [lldb] Fix data race when interacting with python scripts
mib updated this revision to Diff 536573. mib added a comment. Make `DecrementLockCount` actually thread-safe and revert `IncrementLockCount` to its original implementation. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D154271/new/ https://reviews.llvm.org/D154271 Files: lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h lldb/source/Target/Process.cpp Index: lldb/source/Target/Process.cpp === --- lldb/source/Target/Process.cpp +++ lldb/source/Target/Process.cpp @@ -2467,6 +2467,7 @@ } void Process::LoadOperatingSystemPlugin(bool flush) { + std::lock_guard guard(m_thread_mutex); if (flush) m_thread_list.Clear(); m_os_up.reset(OperatingSystem::FindPlugin(this, nullptr)); Index: lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h === --- lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h +++ lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h @@ -383,9 +383,13 @@ uint32_t IncrementLockCount() { return ++m_lock_count; } uint32_t DecrementLockCount() { -if (m_lock_count > 0) - --m_lock_count; -return m_lock_count; +// std::atomic::fetch_sub is an atomic post-decrement operation so we need +// to subtract 1 from its return value. +uint32_t count = m_lock_count.fetch_sub(1, std::memory_order_relaxed) - 1; +if (static_cast(count) < 0) + // Handle underflow here & reset count to zero. + count = 0; +return count; } enum ActiveIOHandler { @@ -421,7 +425,7 @@ bool m_session_is_active; bool m_pty_secondary_is_open; bool m_valid_session; - uint32_t m_lock_count; + std::atomic m_lock_count; PyThreadState *m_command_thread_state; }; Index: lldb/source/Target/Process.cpp === --- lldb/source/Target/Process.cpp +++ lldb/source/Target/Process.cpp @@ -2467,6 +2467,7 @@ } void Process::LoadOperatingSystemPlugin(bool flush) { + std::lock_guard guard(m_thread_mutex); if (flush) m_thread_list.Clear(); m_os_up.reset(OperatingSystem::FindPlugin(this, nullptr)); Index: lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h === --- lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h +++ lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h @@ -383,9 +383,13 @@ uint32_t IncrementLockCount() { return ++m_lock_count; } uint32_t DecrementLockCount() { -if (m_lock_count > 0) - --m_lock_count; -return m_lock_count; +// std::atomic::fetch_sub is an atomic post-decrement operation so we need +// to subtract 1 from its return value. +uint32_t count = m_lock_count.fetch_sub(1, std::memory_order_relaxed) - 1; +if (static_cast(count) < 0) + // Handle underflow here & reset count to zero. + count = 0; +return count; } enum ActiveIOHandler { @@ -421,7 +425,7 @@ bool m_session_is_active; bool m_pty_secondary_is_open; bool m_valid_session; - uint32_t m_lock_count; + std::atomic m_lock_count; PyThreadState *m_command_thread_state; }; ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D151683: [clang] Enable C++11-style attributes in all language modes
philnik updated this revision to Diff 536620. philnik marked 16 inline comments as done. philnik added a comment. Address comments Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D151683/new/ https://reviews.llvm.org/D151683 Files: clang/docs/LanguageExtensions.rst clang/docs/ReleaseNotes.rst clang/include/clang/Basic/DiagnosticParseKinds.td clang/include/clang/Basic/Features.def clang/include/clang/Driver/Options.td clang/include/clang/Parse/Parser.h clang/lib/Basic/Attributes.cpp clang/lib/Lex/Lexer.cpp clang/lib/Parse/ParseDeclCXX.cpp clang/test/AST/ast-dump-attr.m clang/test/AST/ast-dump-c-attr.c clang/test/AST/attr-annotate-type.c clang/test/CodeGen/attr-btf_type_tag-func.c clang/test/CodeGen/attr-btf_type_tag-var.c clang/test/Frontend/noderef.c clang/test/OpenMP/assumes_messages_attr.c clang/test/OpenMP/openmp_attribute_compat.cpp clang/test/Parser/asm.c clang/test/Parser/c2x-attributes.c clang/test/Parser/c2x-attributes.m clang/test/Parser/cxx-decl.cpp clang/test/Parser/objc-attr.m clang/test/ParserHLSL/group_shared.hlsl clang/test/Preprocessor/has_c_attribute.c clang/test/Sema/annotate-type.c clang/test/Sema/annotate.c clang/test/Sema/attr-availability-square-brackets.c clang/test/Sema/attr-external-source-symbol-cxx.cpp clang/test/Sema/attr-external-source-symbol.c clang/test/Sema/attr-likelihood.c clang/test/Sema/attr-objc-bridge-related.m clang/test/Sema/attr-regparm.c clang/test/Sema/attr-type-safety.c clang/test/Sema/c2x-attr.c clang/test/Sema/c2x-noreturn.c clang/test/Sema/internal_linkage.c clang/test/Sema/matrix-type-builtins.c clang/test/Sema/neon-vector-types.c clang/test/Sema/overload-arm-mve.c clang/test/Sema/overloadable.c clang/test/Sema/vector-gcc-compat.c clang/test/SemaCXX/attr-cxx-disabled.cpp clang/test/SemaCXX/cxx98-compat.cpp clang/test/SemaCXX/warn-c++11-extensions.cpp clang/test/SemaObjC/attr-objc-gc.m clang/unittests/AST/AttrTest.cpp clang/utils/TableGen/ClangAttrEmitter.cpp lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp Index: lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp === --- lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp +++ lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp @@ -575,7 +575,6 @@ // FIXME: We should ask the driver for the appropriate default flags. lang_opts.GNUMode = true; lang_opts.GNUKeywords = true; -lang_opts.DoubleSquareBracketAttributes = true; lang_opts.CPlusPlus11 = true; // The Darwin libc expects this macro to be set. Index: clang/utils/TableGen/ClangAttrEmitter.cpp === --- clang/utils/TableGen/ClangAttrEmitter.cpp +++ clang/utils/TableGen/ClangAttrEmitter.cpp @@ -3394,14 +3394,10 @@ // If this is the C++11 variety, also add in the LangOpts test. if (Variety == "CXX11") Test += " && LangOpts.CPlusPlus11"; - else if (Variety == "C2x") -Test += " && LangOpts.DoubleSquareBracketAttributes"; } else if (Variety == "CXX11") // C++11 mode should be checked against LangOpts, which is presumed to be // present in the caller. Test = "LangOpts.CPlusPlus11"; -else if (Variety == "C2x") - Test = "LangOpts.DoubleSquareBracketAttributes"; std::string TestStr = !Test.empty() ? Test + " ? " + llvm::itostr(Version) + " : 0" Index: clang/unittests/AST/AttrTest.cpp === --- clang/unittests/AST/AttrTest.cpp +++ clang/unittests/AST/AttrTest.cpp @@ -157,7 +157,7 @@ AST = buildASTFromCodeWithArgs(R"c( __auto_type [[clang::annotate_type("auto")]] auto_var = 1; )c", - {"-fdouble-square-bracket-attributes"}, + {}, "input.c"); { Index: clang/test/SemaObjC/attr-objc-gc.m === --- clang/test/SemaObjC/attr-objc-gc.m +++ clang/test/SemaObjC/attr-objc-gc.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -fdouble-square-bracket-attributes -verify %s +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -verify %s static id __attribute((objc_gc(weak))) a; static id __attribute((objc_gc(strong))) b; Index: clang/test/SemaCXX/warn-c++11-extensions.cpp === --- clang/test/SemaCXX/warn-c++11-extensions.cpp +++ clang/test/SemaCXX/warn-c++11-extensions.cpp @@ -7,3 +7,5 @@ enum struct E1 { A, B }; // expected-warning {{scoped enumerations are a C++11 extension}} enum class E2 { C, D }; // expected-warning {{scoped enumerations are a C++11 extension}
[Lldb-commits] [PATCH] D151683: [clang] Enable C++11-style attributes in all language modes
philnik updated this revision to Diff 536623. philnik edited the summary of this revision. philnik added a comment. Try to fix CI Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D151683/new/ https://reviews.llvm.org/D151683 Files: clang/docs/LanguageExtensions.rst clang/docs/ReleaseNotes.rst clang/include/clang/Basic/DiagnosticParseKinds.td clang/include/clang/Basic/Features.def clang/include/clang/Driver/Options.td clang/include/clang/Parse/Parser.h clang/lib/Basic/Attributes.cpp clang/lib/Lex/Lexer.cpp clang/lib/Parse/ParseDeclCXX.cpp clang/test/AST/ast-dump-attr.m clang/test/AST/ast-dump-c-attr.c clang/test/AST/attr-annotate-type.c clang/test/CodeGen/attr-btf_type_tag-func.c clang/test/CodeGen/attr-btf_type_tag-var.c clang/test/Frontend/noderef.c clang/test/OpenMP/assumes_messages_attr.c clang/test/OpenMP/openmp_attribute_compat.cpp clang/test/Parser/asm.c clang/test/Parser/c2x-attributes.c clang/test/Parser/c2x-attributes.m clang/test/Parser/cxx-decl.cpp clang/test/Parser/objc-attr.m clang/test/ParserHLSL/group_shared.hlsl clang/test/Preprocessor/has_c_attribute.c clang/test/Sema/annotate-type.c clang/test/Sema/annotate.c clang/test/Sema/attr-availability-square-brackets.c clang/test/Sema/attr-external-source-symbol-cxx.cpp clang/test/Sema/attr-external-source-symbol.c clang/test/Sema/attr-likelihood.c clang/test/Sema/attr-objc-bridge-related.m clang/test/Sema/attr-regparm.c clang/test/Sema/attr-type-safety.c clang/test/Sema/c2x-attr.c clang/test/Sema/c2x-noreturn.c clang/test/Sema/internal_linkage.c clang/test/Sema/matrix-type-builtins.c clang/test/Sema/neon-vector-types.c clang/test/Sema/overload-arm-mve.c clang/test/Sema/overloadable.c clang/test/Sema/vector-gcc-compat.c clang/test/SemaCXX/attr-cxx-disabled.cpp clang/test/SemaCXX/cxx98-compat.cpp clang/test/SemaCXX/warn-c++11-extensions.cpp clang/test/SemaObjC/attr-objc-gc.m clang/unittests/AST/AttrTest.cpp clang/utils/TableGen/ClangAttrEmitter.cpp lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp Index: lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp === --- lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp +++ lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp @@ -575,7 +575,6 @@ // FIXME: We should ask the driver for the appropriate default flags. lang_opts.GNUMode = true; lang_opts.GNUKeywords = true; -lang_opts.DoubleSquareBracketAttributes = true; lang_opts.CPlusPlus11 = true; // The Darwin libc expects this macro to be set. Index: clang/utils/TableGen/ClangAttrEmitter.cpp === --- clang/utils/TableGen/ClangAttrEmitter.cpp +++ clang/utils/TableGen/ClangAttrEmitter.cpp @@ -3394,14 +3394,10 @@ // If this is the C++11 variety, also add in the LangOpts test. if (Variety == "CXX11") Test += " && LangOpts.CPlusPlus11"; - else if (Variety == "C2x") -Test += " && LangOpts.DoubleSquareBracketAttributes"; } else if (Variety == "CXX11") // C++11 mode should be checked against LangOpts, which is presumed to be // present in the caller. Test = "LangOpts.CPlusPlus11"; -else if (Variety == "C2x") - Test = "LangOpts.DoubleSquareBracketAttributes"; std::string TestStr = !Test.empty() ? Test + " ? " + llvm::itostr(Version) + " : 0" Index: clang/unittests/AST/AttrTest.cpp === --- clang/unittests/AST/AttrTest.cpp +++ clang/unittests/AST/AttrTest.cpp @@ -157,7 +157,7 @@ AST = buildASTFromCodeWithArgs(R"c( __auto_type [[clang::annotate_type("auto")]] auto_var = 1; )c", - {"-fdouble-square-bracket-attributes"}, + {}, "input.c"); { Index: clang/test/SemaObjC/attr-objc-gc.m === --- clang/test/SemaObjC/attr-objc-gc.m +++ clang/test/SemaObjC/attr-objc-gc.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -fdouble-square-bracket-attributes -verify %s +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -verify %s static id __attribute((objc_gc(weak))) a; static id __attribute((objc_gc(strong))) b; Index: clang/test/SemaCXX/warn-c++11-extensions.cpp === --- clang/test/SemaCXX/warn-c++11-extensions.cpp +++ clang/test/SemaCXX/warn-c++11-extensions.cpp @@ -7,3 +7,5 @@ enum struct E1 { A, B }; // expected-warning {{scoped enumerations are a C++11 extension}} enum class E2 { C, D }; // expected-warning {{scoped enumerations are a C++11 extension}}