forked from OSchip/llvm-project
Make static counters in ASTContext non-static.
Summary: Fixes a data race and makes it possible to run clang-based tools in multithreaded environment with TSan. Reviewers: ilya-biryukov, riccibruno Reviewed By: riccibruno Subscribers: riccibruno, jfb, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D58612 llvm-svn: 354795
This commit is contained in:
parent
28441ac75f
commit
00c22db89f
|
@ -2809,46 +2809,46 @@ public:
|
|||
//===--------------------------------------------------------------------===//
|
||||
|
||||
/// The number of implicitly-declared default constructors.
|
||||
static unsigned NumImplicitDefaultConstructors;
|
||||
unsigned NumImplicitDefaultConstructors;
|
||||
|
||||
/// The number of implicitly-declared default constructors for
|
||||
/// which declarations were built.
|
||||
static unsigned NumImplicitDefaultConstructorsDeclared;
|
||||
unsigned NumImplicitDefaultConstructorsDeclared;
|
||||
|
||||
/// The number of implicitly-declared copy constructors.
|
||||
static unsigned NumImplicitCopyConstructors;
|
||||
unsigned NumImplicitCopyConstructors;
|
||||
|
||||
/// The number of implicitly-declared copy constructors for
|
||||
/// which declarations were built.
|
||||
static unsigned NumImplicitCopyConstructorsDeclared;
|
||||
unsigned NumImplicitCopyConstructorsDeclared;
|
||||
|
||||
/// The number of implicitly-declared move constructors.
|
||||
static unsigned NumImplicitMoveConstructors;
|
||||
unsigned NumImplicitMoveConstructors;
|
||||
|
||||
/// The number of implicitly-declared move constructors for
|
||||
/// which declarations were built.
|
||||
static unsigned NumImplicitMoveConstructorsDeclared;
|
||||
unsigned NumImplicitMoveConstructorsDeclared;
|
||||
|
||||
/// The number of implicitly-declared copy assignment operators.
|
||||
static unsigned NumImplicitCopyAssignmentOperators;
|
||||
unsigned NumImplicitCopyAssignmentOperators;
|
||||
|
||||
/// The number of implicitly-declared copy assignment operators for
|
||||
/// which declarations were built.
|
||||
static unsigned NumImplicitCopyAssignmentOperatorsDeclared;
|
||||
unsigned NumImplicitCopyAssignmentOperatorsDeclared;
|
||||
|
||||
/// The number of implicitly-declared move assignment operators.
|
||||
static unsigned NumImplicitMoveAssignmentOperators;
|
||||
unsigned NumImplicitMoveAssignmentOperators;
|
||||
|
||||
/// The number of implicitly-declared move assignment operators for
|
||||
/// which declarations were built.
|
||||
static unsigned NumImplicitMoveAssignmentOperatorsDeclared;
|
||||
unsigned NumImplicitMoveAssignmentOperatorsDeclared;
|
||||
|
||||
/// The number of implicitly-declared destructors.
|
||||
static unsigned NumImplicitDestructors;
|
||||
unsigned NumImplicitDestructors;
|
||||
|
||||
/// The number of implicitly-declared destructors for which
|
||||
/// declarations were built.
|
||||
static unsigned NumImplicitDestructorsDeclared;
|
||||
unsigned NumImplicitDestructorsDeclared;
|
||||
|
||||
public:
|
||||
/// Initialize built-in types.
|
||||
|
|
|
@ -94,19 +94,6 @@
|
|||
|
||||
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;
|
||||
|
||||
enum FloatingRank {
|
||||
Float16Rank, HalfRank, FloatRank, DoubleRank, LongDoubleRank, Float128Rank
|
||||
};
|
||||
|
|
|
@ -7971,14 +7971,14 @@ void Sema::ActOnFinishCXXMemberSpecification(
|
|||
/// definition of the class is complete.
|
||||
void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
|
||||
if (ClassDecl->needsImplicitDefaultConstructor()) {
|
||||
++ASTContext::NumImplicitDefaultConstructors;
|
||||
++getASTContext().NumImplicitDefaultConstructors;
|
||||
|
||||
if (ClassDecl->hasInheritedConstructor())
|
||||
DeclareImplicitDefaultConstructor(ClassDecl);
|
||||
}
|
||||
|
||||
if (ClassDecl->needsImplicitCopyConstructor()) {
|
||||
++ASTContext::NumImplicitCopyConstructors;
|
||||
++getASTContext().NumImplicitCopyConstructors;
|
||||
|
||||
// If the properties or semantics of the copy constructor couldn't be
|
||||
// determined while the class was being declared, force a declaration
|
||||
|
@ -8000,7 +8000,7 @@ void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
|
|||
}
|
||||
|
||||
if (getLangOpts().CPlusPlus11 && ClassDecl->needsImplicitMoveConstructor()) {
|
||||
++ASTContext::NumImplicitMoveConstructors;
|
||||
++getASTContext().NumImplicitMoveConstructors;
|
||||
|
||||
if (ClassDecl->needsOverloadResolutionForMoveConstructor() ||
|
||||
ClassDecl->hasInheritedConstructor())
|
||||
|
@ -8008,7 +8008,7 @@ void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
|
|||
}
|
||||
|
||||
if (ClassDecl->needsImplicitCopyAssignment()) {
|
||||
++ASTContext::NumImplicitCopyAssignmentOperators;
|
||||
++getASTContext().NumImplicitCopyAssignmentOperators;
|
||||
|
||||
// If we have a dynamic class, then the copy assignment operator may be
|
||||
// virtual, so we have to declare it immediately. This ensures that, e.g.,
|
||||
|
@ -8021,7 +8021,7 @@ void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
|
|||
}
|
||||
|
||||
if (getLangOpts().CPlusPlus11 && ClassDecl->needsImplicitMoveAssignment()) {
|
||||
++ASTContext::NumImplicitMoveAssignmentOperators;
|
||||
++getASTContext().NumImplicitMoveAssignmentOperators;
|
||||
|
||||
// Likewise for the move assignment operator.
|
||||
if (ClassDecl->isDynamicClass() ||
|
||||
|
@ -8031,7 +8031,7 @@ void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
|
|||
}
|
||||
|
||||
if (ClassDecl->needsImplicitDestructor()) {
|
||||
++ASTContext::NumImplicitDestructors;
|
||||
++getASTContext().NumImplicitDestructors;
|
||||
|
||||
// If we have a dynamic class, then the destructor may be virtual, so we
|
||||
// have to declare the destructor immediately. This ensures that, e.g., it
|
||||
|
@ -11013,7 +11013,7 @@ CXXConstructorDecl *Sema::DeclareImplicitDefaultConstructor(
|
|||
DefaultCon->setTrivial(ClassDecl->hasTrivialDefaultConstructor());
|
||||
|
||||
// Note that we have declared this constructor.
|
||||
++ASTContext::NumImplicitDefaultConstructorsDeclared;
|
||||
++getASTContext().NumImplicitDefaultConstructorsDeclared;
|
||||
|
||||
Scope *S = getScopeForContext(ClassDecl);
|
||||
CheckImplicitSpecialMemberDeclaration(S, DefaultCon);
|
||||
|
@ -11286,7 +11286,7 @@ CXXDestructorDecl *Sema::DeclareImplicitDestructor(CXXRecordDecl *ClassDecl) {
|
|||
ClassDecl->hasTrivialDestructorForCall());
|
||||
|
||||
// Note that we have declared this destructor.
|
||||
++ASTContext::NumImplicitDestructorsDeclared;
|
||||
++getASTContext().NumImplicitDestructorsDeclared;
|
||||
|
||||
Scope *S = getScopeForContext(ClassDecl);
|
||||
CheckImplicitSpecialMemberDeclaration(S, Destructor);
|
||||
|
@ -11896,7 +11896,7 @@ CXXMethodDecl *Sema::DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl) {
|
|||
: ClassDecl->hasTrivialCopyAssignment());
|
||||
|
||||
// Note that we have added this copy-assignment operator.
|
||||
++ASTContext::NumImplicitCopyAssignmentOperatorsDeclared;
|
||||
++getASTContext().NumImplicitCopyAssignmentOperatorsDeclared;
|
||||
|
||||
Scope *S = getScopeForContext(ClassDecl);
|
||||
CheckImplicitSpecialMemberDeclaration(S, CopyAssignment);
|
||||
|
@ -12219,7 +12219,7 @@ CXXMethodDecl *Sema::DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl) {
|
|||
: ClassDecl->hasTrivialMoveAssignment());
|
||||
|
||||
// Note that we have added this copy-assignment operator.
|
||||
++ASTContext::NumImplicitMoveAssignmentOperatorsDeclared;
|
||||
++getASTContext().NumImplicitMoveAssignmentOperatorsDeclared;
|
||||
|
||||
Scope *S = getScopeForContext(ClassDecl);
|
||||
CheckImplicitSpecialMemberDeclaration(S, MoveAssignment);
|
||||
|
@ -12602,7 +12602,7 @@ CXXConstructorDecl *Sema::DeclareImplicitCopyConstructor(
|
|||
: ClassDecl->hasTrivialCopyConstructorForCall()));
|
||||
|
||||
// Note that we have declared this constructor.
|
||||
++ASTContext::NumImplicitCopyConstructorsDeclared;
|
||||
++getASTContext().NumImplicitCopyConstructorsDeclared;
|
||||
|
||||
Scope *S = getScopeForContext(ClassDecl);
|
||||
CheckImplicitSpecialMemberDeclaration(S, CopyConstructor);
|
||||
|
@ -12732,7 +12732,7 @@ CXXConstructorDecl *Sema::DeclareImplicitMoveConstructor(
|
|||
: ClassDecl->hasTrivialMoveConstructorForCall()));
|
||||
|
||||
// Note that we have declared this constructor.
|
||||
++ASTContext::NumImplicitMoveConstructorsDeclared;
|
||||
++getASTContext().NumImplicitMoveConstructorsDeclared;
|
||||
|
||||
Scope *S = getScopeForContext(ClassDecl);
|
||||
CheckImplicitSpecialMemberDeclaration(S, MoveConstructor);
|
||||
|
|
Loading…
Reference in New Issue