aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-08-16 16:30:49 +0100
committergingerBill <bill@gingerbill.org>2021-08-16 16:30:49 +0100
commit0051cd12e22d03b5442df98d82d9b8a586362082 (patch)
tree904e2b7a51a726e7b8ea4bdf084fd2c24fa5074a /src
parentdf159dbae73cf983f061a57aee3c6774ce105351 (diff)
Make flags atomic for `Entity` and `Type`
Diffstat (limited to 'src')
-rw-r--r--src/check_expr.cpp2
-rw-r--r--src/entity.cpp4
-rw-r--r--src/types.cpp6
3 files changed, 6 insertions, 6 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index e0eb5a954..581021ac7 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -923,7 +923,7 @@ bool is_polymorphic_type_assignable(CheckerContext *c, Type *poly, Type *source,
poly->kind = Type_EnumeratedArray;
poly->cached_size = -1;
poly->cached_align = -1;
- poly->flags = source->flags;
+ poly->flags.exchange(source->flags);
poly->failure = false;
poly->EnumeratedArray.elem = source->EnumeratedArray.elem;
poly->EnumeratedArray.index = source->EnumeratedArray.index;
diff --git a/src/entity.cpp b/src/entity.cpp
index e7b888365..fb65bc3a8 100644
--- a/src/entity.cpp
+++ b/src/entity.cpp
@@ -115,8 +115,8 @@ enum ProcedureOptimizationMode : u32 {
struct Entity {
EntityKind kind;
u64 id;
- u64 flags;
- EntityState state;
+ std::atomic<u64> flags;
+ std::atomic<EntityState> state;
Token token;
Scope * scope;
Type * type;
diff --git a/src/types.cpp b/src/types.cpp
index f497e9509..fd5bdbc6d 100644
--- a/src/types.cpp
+++ b/src/types.cpp
@@ -306,9 +306,9 @@ struct Type {
};
// NOTE(bill): These need to be at the end to not affect the unionized data
- i64 cached_size;
- i64 cached_align;
- u32 flags; // TypeFlag
+ std::atomic<i64> cached_size;
+ std::atomic<i64> cached_align;
+ std::atomic<u32> flags; // TypeFlag
bool failure;
};