From a70b1e5e9e9ceaad472f4765ad1c687cc61ce875 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 21 Mar 2016 12:49:00 +0000 Subject: [PATCH] Avoid downcasting station/vehicle subtypes before checking the type field. This is because it generates a lot of spam warnings when running with UndefinedBehaviourSantizer et al. --- src/base_station_base.h | 4 +++- src/vehicle_base.h | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/base_station_base.h b/src/base_station_base.h index 53e104a826..6d6b20ba3c 100644 --- a/src/base_station_base.h +++ b/src/base_station_base.h @@ -250,6 +250,8 @@ struct SpecializedStation : public BaseStation { } }; -#define FOR_ALL_BASE_STATIONS_OF_TYPE(name, var) FOR_ALL_ITEMS_FROM(name, station_index, var, 0) if (name::IsExpected(var)) +#define FOR_ALL_BASE_STATIONS_OF_TYPE(name, var) \ + for (size_t station_index = 0; var = NULL, station_index < name::GetPoolSize(); station_index++) \ + if ((var = name::GetIfValid(station_index)) != NULL) #endif /* BASE_STATION_BASE_H */ diff --git a/src/vehicle_base.h b/src/vehicle_base.h index 902bfc3e4f..40872dca0c 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -1170,7 +1170,9 @@ struct SpecializedVehicle : public Vehicle { * @param name The type of vehicle to iterate over. * @param var The variable used to iterate over. */ -#define FOR_ALL_VEHICLES_OF_TYPE(name, var) FOR_ALL_ITEMS_FROM(name, vehicle_index, var, 0) if (var->type == name::EXPECTED_TYPE) +#define FOR_ALL_VEHICLES_OF_TYPE(name, var) \ + for (size_t vehicle_index = 0; var = NULL, vehicle_index < name::GetPoolSize(); vehicle_index++) \ + if ((var = name::GetIfValid(vehicle_index)) != NULL) /** Generates sequence of free UnitID numbers */ struct FreeUnitIDGenerator {