Skip to content

Commit

Permalink
Merge pull request #3309 from jcking/cpp-runtime-thread-safety
Browse files Browse the repository at this point in the history
Fix some thread sanitizer warnings in C++ runtime
  • Loading branch information
parrt authored Oct 31, 2021
2 parents a2a9820 + 5629af3 commit 6ab9d0f
Show file tree
Hide file tree
Showing 7 changed files with 13 additions and 9 deletions.
2 changes: 1 addition & 1 deletion contributors.txt
Original file line number Diff line number Diff line change
Expand Up @@ -317,4 +317,4 @@ YYYY/MM/DD, github id, Full name, email
2021/09/08, jmcken8, Joel McKenzie, joel.b.mckenzie@gmail.com
2021/09/23, skalt, Steven Kalt, kalt.steven@gmail.com
2021/10/10, tools4origins, Erwan Guyomarc'h, contact@erwan-guyomarch.fr
2021/10/25, jcking, Justin King, jcking@google.com
2021/10/19, jcking, Justin King, jcking@google.com
2 changes: 1 addition & 1 deletion runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

using namespace antlr4::atn;

ATNDeserializationOptions ATNDeserializationOptions::defaultOptions;
const ATNDeserializationOptions ATNDeserializationOptions::defaultOptions;

ATNDeserializationOptions::ATNDeserializationOptions() {
InitializeInstanceFields();
Expand Down
2 changes: 1 addition & 1 deletion runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ namespace atn {

class ANTLR4CPP_PUBLIC ATNDeserializationOptions {
private:
static ATNDeserializationOptions defaultOptions;
static const ATNDeserializationOptions defaultOptions;

bool readOnly;
bool verifyATN;
Expand Down
4 changes: 2 additions & 2 deletions runtime/Cpp/runtime/src/atn/LexerATNSimulator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ void LexerATNSimulator::SimState::InitializeInstanceFields() {
charPos = INVALID_INDEX;
}

int LexerATNSimulator::match_calls = 0;
std::atomic<int> LexerATNSimulator::match_calls(0);


LexerATNSimulator::LexerATNSimulator(const ATN &atn, std::vector<dfa::DFA> &decisionToDFA,
Expand All @@ -69,7 +69,7 @@ void LexerATNSimulator::copyState(LexerATNSimulator *simulator) {
}

size_t LexerATNSimulator::match(CharStream *input, size_t mode) {
match_calls++;
match_calls.fetch_add(1, std::memory_order_relaxed);
_mode = mode;
ssize_t mark = input->mark();

Expand Down
4 changes: 3 additions & 1 deletion runtime/Cpp/runtime/src/atn/LexerATNSimulator.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

#pragma once

#include <atomic>

#include "atn/ATNSimulator.h"
#include "atn/LexerATNConfig.h"
#include "atn/ATNConfigSet.h"
Expand Down Expand Up @@ -89,7 +91,7 @@ namespace atn {
SimState _prevAccept;

public:
static int match_calls;
static std::atomic<int> match_calls;

LexerATNSimulator(const ATN &atn, std::vector<dfa::DFA> &decisionToDFA, PredictionContextCache &sharedContextCache);
LexerATNSimulator(Lexer *recog, const ATN &atn, std::vector<dfa::DFA> &decisionToDFA, PredictionContextCache &sharedContextCache);
Expand Down
4 changes: 2 additions & 2 deletions runtime/Cpp/runtime/src/atn/PredictionContext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,12 @@ using namespace antlr4::atn;

using namespace antlrcpp;

size_t PredictionContext::globalNodeCount = 0;
std::atomic<size_t> PredictionContext::globalNodeCount(0);
const Ref<PredictionContext> PredictionContext::EMPTY = std::make_shared<EmptyPredictionContext>();

//----------------- PredictionContext ----------------------------------------------------------------------------------

PredictionContext::PredictionContext(size_t cachedHashCode) : id(globalNodeCount++), cachedHashCode(cachedHashCode) {
PredictionContext::PredictionContext(size_t cachedHashCode) : id(globalNodeCount.fetch_add(1, std::memory_order_relaxed)), cachedHashCode(cachedHashCode) {
}

PredictionContext::~PredictionContext() {
Expand Down
4 changes: 3 additions & 1 deletion runtime/Cpp/runtime/src/atn/PredictionContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

#pragma once

#include <atomic>

#include "Recognizer.h"
#include "atn/ATN.h"
#include "atn/ATNState.h"
Expand Down Expand Up @@ -48,7 +50,7 @@ namespace atn {
#endif

public:
static size_t globalNodeCount;
static std::atomic<size_t> globalNodeCount;
const size_t id;

/// <summary>
Expand Down

0 comments on commit 6ab9d0f

Please sign in to comment.