diff --git a/clang/include/clang/AST/ASTContext.h b/clang/include/clang/AST/ASTContext.h --- a/clang/include/clang/AST/ASTContext.h +++ b/clang/include/clang/AST/ASTContext.h @@ -63,6 +63,7 @@ #include "llvm/Support/Allocator.h" #include "llvm/Support/Casting.h" #include "llvm/Support/Compiler.h" +#include #include #include #include @@ -2809,46 +2810,46 @@ //===--------------------------------------------------------------------===// /// The number of implicitly-declared default constructors. - static unsigned NumImplicitDefaultConstructors; + static std::atomic NumImplicitDefaultConstructors; /// The number of implicitly-declared default constructors for /// which declarations were built. - static unsigned NumImplicitDefaultConstructorsDeclared; + static std::atomic NumImplicitDefaultConstructorsDeclared; /// The number of implicitly-declared copy constructors. - static unsigned NumImplicitCopyConstructors; + static std::atomic NumImplicitCopyConstructors; /// The number of implicitly-declared copy constructors for /// which declarations were built. - static unsigned NumImplicitCopyConstructorsDeclared; + static std::atomic NumImplicitCopyConstructorsDeclared; /// The number of implicitly-declared move constructors. - static unsigned NumImplicitMoveConstructors; + static std::atomic NumImplicitMoveConstructors; /// The number of implicitly-declared move constructors for /// which declarations were built. - static unsigned NumImplicitMoveConstructorsDeclared; + static std::atomic NumImplicitMoveConstructorsDeclared; /// The number of implicitly-declared copy assignment operators. - static unsigned NumImplicitCopyAssignmentOperators; + static std::atomic NumImplicitCopyAssignmentOperators; /// The number of implicitly-declared copy assignment operators for /// which declarations were built. - static unsigned NumImplicitCopyAssignmentOperatorsDeclared; + static std::atomic NumImplicitCopyAssignmentOperatorsDeclared; /// The number of implicitly-declared move assignment operators. - static unsigned NumImplicitMoveAssignmentOperators; + static std::atomic NumImplicitMoveAssignmentOperators; /// The number of implicitly-declared move assignment operators for /// which declarations were built. - static unsigned NumImplicitMoveAssignmentOperatorsDeclared; + static std::atomic NumImplicitMoveAssignmentOperatorsDeclared; /// The number of implicitly-declared destructors. - static unsigned NumImplicitDestructors; + static std::atomic NumImplicitDestructors; /// The number of implicitly-declared destructors for which /// declarations were built. - static unsigned NumImplicitDestructorsDeclared; + static std::atomic NumImplicitDestructorsDeclared; public: /// Initialize built-in types. diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -94,18 +94,18 @@ using namespace clang; -unsigned ASTContext::NumImplicitDefaultConstructors; -unsigned ASTContext::NumImplicitDefaultConstructorsDeclared; -unsigned ASTContext::NumImplicitCopyConstructors; -unsigned ASTContext::NumImplicitCopyConstructorsDeclared; -unsigned ASTContext::NumImplicitMoveConstructors; -unsigned ASTContext::NumImplicitMoveConstructorsDeclared; -unsigned ASTContext::NumImplicitCopyAssignmentOperators; -unsigned ASTContext::NumImplicitCopyAssignmentOperatorsDeclared; -unsigned ASTContext::NumImplicitMoveAssignmentOperators; -unsigned ASTContext::NumImplicitMoveAssignmentOperatorsDeclared; -unsigned ASTContext::NumImplicitDestructors; -unsigned ASTContext::NumImplicitDestructorsDeclared; +std::atomic ASTContext::NumImplicitDefaultConstructors; +std::atomic ASTContext::NumImplicitDefaultConstructorsDeclared; +std::atomic ASTContext::NumImplicitCopyConstructors; +std::atomic ASTContext::NumImplicitCopyConstructorsDeclared; +std::atomic ASTContext::NumImplicitMoveConstructors; +std::atomic ASTContext::NumImplicitMoveConstructorsDeclared; +std::atomic ASTContext::NumImplicitCopyAssignmentOperators; +std::atomic ASTContext::NumImplicitCopyAssignmentOperatorsDeclared; +std::atomic ASTContext::NumImplicitMoveAssignmentOperators; +std::atomic ASTContext::NumImplicitMoveAssignmentOperatorsDeclared; +std::atomic ASTContext::NumImplicitDestructors; +std::atomic ASTContext::NumImplicitDestructorsDeclared; enum FloatingRank { Float16Rank, HalfRank, FloatRank, DoubleRank, LongDoubleRank, Float128Rank