aboutsummaryrefslogtreecommitdiff
path: root/src/build_settings.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/build_settings.cpp')
-rw-r--r--src/build_settings.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/build_settings.cpp b/src/build_settings.cpp
index 40bbe41e5..a6dce5233 100644
--- a/src/build_settings.cpp
+++ b/src/build_settings.cpp
@@ -352,12 +352,28 @@ u64 get_vet_flag_from_name(String const &name) {
enum OptInFeatureFlags : u64 {
OptInFeatureFlag_NONE = 0,
OptInFeatureFlag_DynamicLiterals = 1u<<0,
+
+ OptInFeatureFlag_IntegerDivisionByZero_Trap = 1u<<1,
+ OptInFeatureFlag_IntegerDivisionByZero_Zero = 1u<<2,
+ OptInFeatureFlag_IntegerDivisionByZero_Self = 1u<<3,
+
+ OptInFeatureFlag_IntegerDivisionByZero_ALL = OptInFeatureFlag_IntegerDivisionByZero_Trap|OptInFeatureFlag_IntegerDivisionByZero_Zero|OptInFeatureFlag_IntegerDivisionByZero_Self,
+
};
u64 get_feature_flag_from_name(String const &name) {
if (name == "dynamic-literals") {
return OptInFeatureFlag_DynamicLiterals;
}
+ if (name == "integer-division-by-zero:trap") {
+ return OptInFeatureFlag_IntegerDivisionByZero_Trap;
+ }
+ if (name == "integer-division-by-zero:zero") {
+ return OptInFeatureFlag_IntegerDivisionByZero_Zero;
+ }
+ if (name == "integer-division-by-zero:self") {
+ return OptInFeatureFlag_IntegerDivisionByZero_Self;
+ }
return OptInFeatureFlag_NONE;
}
@@ -404,6 +420,12 @@ String linker_choices[Linker_COUNT] = {
str_lit("radlink"),
};
+enum IntegerDivisionByZeroKind : u8 {
+ IntegerDivisionByZero_Trap,
+ IntegerDivisionByZero_Zero,
+ IntegerDivisionByZero_Self,
+};
+
// This stores the information for the specify architecture of this build
struct BuildContext {
// Constants
@@ -485,6 +507,8 @@ struct BuildContext {
bool keep_object_files;
bool disallow_do;
+ IntegerDivisionByZeroKind integer_division_by_zero_behaviour;
+
LinkerChoice linker_choice;
StringSet custom_attributes;