Skip to content

Commit 722784a

Browse files
committed
Merge branch 'ogrsf_generic_WFLAG_DOUBLE_PROMOTION'
2 parents 6c8b3e6 + 285d36d commit 722784a

File tree

9 files changed

+57
-41
lines changed

9 files changed

+57
-41
lines changed

frmts/gtiff/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ add_gdal_driver(
3939
BUILTIN)
4040
gdal_standard_includes(gdal_GTIFF)
4141

42+
target_compile_options(gdal_GTIFF PRIVATE ${WFLAG_DOUBLE_PROMOTION})
43+
4244
if (GDAL_ENABLE_DRIVER_JPEG)
4345
target_compile_definitions(gdal_GTIFF PRIVATE -DHAVE_LIBJPEG)
4446
target_include_directories(gdal_GTIFF PRIVATE ${GDAL_RASTER_FORMAT_SOURCE_DIR}/jpeg)

frmts/gtiff/gt_overview.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1078,15 +1078,17 @@ CPLErr GTIFFBuildOverviewsEx(const char *pszFilename, int nBands,
10781078
{
10791079
const float fJXLDistance =
10801080
static_cast<float>(CPLAtof(pszJXLDistance));
1081-
TIFFSetField(hTIFF, TIFFTAG_JXL_DISTANCE, fJXLDistance);
1081+
TIFFSetField(hTIFF, TIFFTAG_JXL_DISTANCE,
1082+
static_cast<double>(fJXLDistance));
10821083
GTIFFSetJXLDistance(GDALDataset::ToHandle(hODS), fJXLDistance);
10831084
}
10841085
if (const char *pszJXLAlphaDistance = GetOptionValue(
10851086
"JXL_ALPHA_DISTANCE", "JXL_ALPHA_DISTANCE_OVERVIEW"))
10861087
{
10871088
const float fJXLAlphaDistance =
10881089
static_cast<float>(CPLAtof(pszJXLAlphaDistance));
1089-
TIFFSetField(hTIFF, TIFFTAG_JXL_ALPHA_DISTANCE, fJXLAlphaDistance);
1090+
TIFFSetField(hTIFF, TIFFTAG_JXL_ALPHA_DISTANCE,
1091+
static_cast<double>(fJXLAlphaDistance));
10901092
GTIFFSetJXLAlphaDistance(GDALDataset::ToHandle(hODS),
10911093
fJXLAlphaDistance);
10921094
}

frmts/gtiff/gtiffdataset.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -981,9 +981,10 @@ void GTiffDataset::RestoreVolatileParameters(TIFF *hTIFF)
981981
TIFFSetField(hTIFF, TIFFTAG_JXL_LOSSYNESS,
982982
m_bJXLLossless ? JXL_LOSSLESS : JXL_LOSSY);
983983
TIFFSetField(hTIFF, TIFFTAG_JXL_EFFORT, m_nJXLEffort);
984-
TIFFSetField(hTIFF, TIFFTAG_JXL_DISTANCE, m_fJXLDistance);
984+
TIFFSetField(hTIFF, TIFFTAG_JXL_DISTANCE,
985+
static_cast<double>(m_fJXLDistance));
985986
TIFFSetField(hTIFF, TIFFTAG_JXL_ALPHA_DISTANCE,
986-
m_fJXLAlphaDistance);
987+
static_cast<double>(m_fJXLAlphaDistance));
987988
}
988989
#endif
989990
}

frmts/gtiff/gtiffdataset_read.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5187,7 +5187,8 @@ CPLErr GTiffDataset::OpenOffset(TIFF *hTIFFIn, toff_t nDirOffsetIn,
51875187
{
51885188
m_dfNoDataValue =
51895189
GDALAdjustNoDataCloseToFloatMax(m_dfNoDataValue);
5190-
m_dfNoDataValue = static_cast<float>(m_dfNoDataValue);
5190+
m_dfNoDataValue =
5191+
static_cast<double>(static_cast<float>(m_dfNoDataValue));
51915192
}
51925193
}
51935194
}
@@ -5285,7 +5286,8 @@ CPLErr GTiffDataset::OpenOffset(TIFF *hTIFFIn, toff_t nDirOffsetIn,
52855286
float fVal = 0.0;
52865287
if (TIFFGetField(m_hTIFF, pasTIFFTags[iTag].nTagVal, &fVal))
52875288
{
5288-
CPLsnprintf(szWorkMDI, sizeof(szWorkMDI), "%.8g", fVal);
5289+
CPLsnprintf(szWorkMDI, sizeof(szWorkMDI), "%.8g",
5290+
static_cast<double>(fVal));
52895291
m_oGTiffMDMD.SetMetadataItem(pasTIFFTags[iTag].pszTagName,
52905292
szWorkMDI);
52915293
}
@@ -6467,11 +6469,11 @@ const char *GTiffDataset::GetMetadataItem(const char *pszName,
64676469
}
64686470
else if (EQUAL(pszName, "JXL_DISTANCE"))
64696471
{
6470-
return CPLSPrintf("%f", m_fJXLDistance);
6472+
return CPLSPrintf("%f", static_cast<double>(m_fJXLDistance));
64716473
}
64726474
else if (EQUAL(pszName, "JXL_ALPHA_DISTANCE"))
64736475
{
6474-
return CPLSPrintf("%f", m_fJXLAlphaDistance);
6476+
return CPLSPrintf("%f", static_cast<double>(m_fJXLAlphaDistance));
64756477
}
64766478
else if (EQUAL(pszName, "JXL_EFFORT"))
64776479
{

frmts/gtiff/gtiffdataset_write.cpp

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4683,17 +4683,19 @@ bool GTiffDataset::WriteMetadata(GDALDataset *poSrcDS, TIFF *l_hTIFF,
46834683
else
46844684
{
46854685
fDistance = GTiffGetJXLDistance(papszCreationOptions);
4686-
AppendMetadataItem(&psRoot, &psTail, "JXL_DISTANCE",
4687-
CPLSPrintf("%f", fDistance), 0, nullptr,
4688-
"IMAGE_STRUCTURE");
4686+
AppendMetadataItem(
4687+
&psRoot, &psTail, "JXL_DISTANCE",
4688+
CPLSPrintf("%f", static_cast<double>(fDistance)), 0,
4689+
nullptr, "IMAGE_STRUCTURE");
46894690
}
46904691
const float fAlphaDistance =
46914692
GTiffGetJXLAlphaDistance(papszCreationOptions);
46924693
if (fAlphaDistance >= 0.0f && fAlphaDistance != fDistance)
46934694
{
4694-
AppendMetadataItem(&psRoot, &psTail, "JXL_ALPHA_DISTANCE",
4695-
CPLSPrintf("%f", fAlphaDistance), 0, nullptr,
4696-
"IMAGE_STRUCTURE");
4695+
AppendMetadataItem(
4696+
&psRoot, &psTail, "JXL_ALPHA_DISTANCE",
4697+
CPLSPrintf("%f", static_cast<double>(fAlphaDistance)), 0,
4698+
nullptr, "IMAGE_STRUCTURE");
46974699
}
46984700
AppendMetadataItem(
46994701
&psRoot, &psTail, "JXL_EFFORT",
@@ -4966,7 +4968,7 @@ void GTiffDataset::SaveICCProfile(GTiffDataset *pDS, TIFF *l_hTIFF,
49664968
if (j == 2)
49674969
{
49684970
// Last term of xyY color must be 1.0.
4969-
if (v != 1.0)
4971+
if (v != 1.0f)
49704972
{
49714973
bOutputCHR = false;
49724974
break;
@@ -5011,7 +5013,7 @@ void GTiffDataset::SaveICCProfile(GTiffDataset *pDS, TIFF *l_hTIFF,
50115013
if (j == 2)
50125014
{
50135015
// Last term of xyY color must be 1.0.
5014-
if (v != 1.0)
5016+
if (v != 1.0f)
50155017
{
50165018
bOutputWhitepoint = false;
50175019
break;
@@ -6308,8 +6310,10 @@ TIFF *GTiffDataset::CreateLL(const char *pszFilename, int nXSize, int nYSize,
63086310
TIFFSetField(l_hTIFF, TIFFTAG_JXL_LOSSYNESS,
63096311
l_bJXLLossless ? JXL_LOSSLESS : JXL_LOSSY);
63106312
TIFFSetField(l_hTIFF, TIFFTAG_JXL_EFFORT, l_nJXLEffort);
6311-
TIFFSetField(l_hTIFF, TIFFTAG_JXL_DISTANCE, l_fJXLDistance);
6312-
TIFFSetField(l_hTIFF, TIFFTAG_JXL_ALPHA_DISTANCE, l_fJXLAlphaDistance);
6313+
TIFFSetField(l_hTIFF, TIFFTAG_JXL_DISTANCE,
6314+
static_cast<double>(l_fJXLDistance));
6315+
TIFFSetField(l_hTIFF, TIFFTAG_JXL_ALPHA_DISTANCE,
6316+
static_cast<double>(l_fJXLAlphaDistance));
63136317
}
63146318
#endif
63156319
if (l_nCompression == COMPRESSION_WEBP)
@@ -8435,9 +8439,10 @@ GDALDataset *GTiffDataset::CreateCopy(const char *pszFilename,
84358439
TIFFSetField(l_hTIFF, TIFFTAG_JXL_LOSSYNESS,
84368440
poDS->m_bJXLLossless ? JXL_LOSSLESS : JXL_LOSSY);
84378441
TIFFSetField(l_hTIFF, TIFFTAG_JXL_EFFORT, poDS->m_nJXLEffort);
8438-
TIFFSetField(l_hTIFF, TIFFTAG_JXL_DISTANCE, poDS->m_fJXLDistance);
8442+
TIFFSetField(l_hTIFF, TIFFTAG_JXL_DISTANCE,
8443+
static_cast<double>(poDS->m_fJXLDistance));
84398444
TIFFSetField(l_hTIFF, TIFFTAG_JXL_ALPHA_DISTANCE,
8440-
poDS->m_fJXLAlphaDistance);
8445+
static_cast<double>(poDS->m_fJXLAlphaDistance));
84418446
}
84428447
#endif
84438448
if (l_nCompression == COMPRESSION_WEBP)

frmts/gtiff/tif_jxl.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1224,11 +1224,12 @@ static int JXLVSetField(TIFF *tif, uint32_t tag, va_list ap)
12241224

12251225
case TIFFTAG_JXL_DISTANCE:
12261226
{
1227-
float distance = (float)va_arg(ap, double);
1227+
const double dfDistance = va_arg(ap, double);
1228+
const float distance = (float)dfDistance;
12281229
if (distance < 0 || distance > 15)
12291230
{
12301231
TIFFErrorExtR(tif, module, "Invalid value for Distance: %f",
1231-
distance);
1232+
dfDistance);
12321233
return 0;
12331234
}
12341235
sp->distance = distance;
@@ -1237,13 +1238,14 @@ static int JXLVSetField(TIFF *tif, uint32_t tag, va_list ap)
12371238

12381239
case TIFFTAG_JXL_ALPHA_DISTANCE:
12391240
{
1240-
float alpha_distance = (float)va_arg(ap, double);
1241+
const double dfAlphaDistance = va_arg(ap, double);
1242+
const float alpha_distance = (float)dfAlphaDistance;
12411243
if (alpha_distance != -1 &&
12421244
(alpha_distance < 0 || alpha_distance > 15))
12431245
{
12441246
TIFFErrorExtR(tif, module,
12451247
"Invalid value for AlphaDistance: %f",
1246-
alpha_distance);
1248+
dfAlphaDistance);
12471249
return 0;
12481250
}
12491251
sp->alpha_distance = alpha_distance;

ogr/ogrsf_frmts/generic/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ add_library(
4444
ograrrowarrayhelper.cpp)
4545
gdal_standard_includes(ogrsf_generic)
4646
add_dependencies(ogrsf_generic generate_gdal_version_h)
47-
target_compile_options(ogrsf_generic PRIVATE ${GDAL_CXX_WARNING_FLAGS} ${WFLAG_OLD_STYLE_CAST} ${WFLAG_EFFCXX})
47+
target_compile_options(ogrsf_generic PRIVATE ${GDAL_CXX_WARNING_FLAGS} ${WFLAG_OLD_STYLE_CAST} ${WFLAG_EFFCXX} ${WFLAG_DOUBLE_PROMOTION})
4848
target_sources(${GDAL_LIB_TARGET_NAME} PRIVATE $<TARGET_OBJECTS:ogrsf_generic>)
4949
set_property(TARGET ogrsf_generic PROPERTY POSITION_INDEPENDENT_CODE ${GDAL_OBJECT_LIBRARIES_POSITION_INDEPENDENT_CODE})
5050

ogr/ogrsf_frmts/generic/ograrrowarrayhelper.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ class CPL_DLL OGRArrowArrayHelper
180180
brokenDown.tm_sec = static_cast<int>(ogrField.Date.Second);
181181
auto nVal =
182182
CPLYMDHMSToUnixTime(&brokenDown) * 1000 +
183-
(static_cast<int>(ogrField.Date.Second * 1000 + 0.5) % 1000);
183+
(static_cast<int>(ogrField.Date.Second * 1000 + 0.5f) % 1000);
184184
if (nFieldTZFlag >= OGR_TZFLAG_MIXED_TZ &&
185185
ogrField.Date.TZFlag > OGR_TZFLAG_MIXED_TZ)
186186
{

ogr/ogrsf_frmts/generic/ogrlayerarrow.cpp

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1738,7 +1738,7 @@ static bool FillTimeArray(struct ArrowArray *psChild,
17381738
panValues[iFeat] =
17391739
psRawField->Date.Hour * 3600000 +
17401740
psRawField->Date.Minute * 60000 +
1741-
static_cast<int>(psRawField->Date.Second * 1000 + 0.5);
1741+
static_cast<int>(psRawField->Date.Second * 1000 + 0.5f);
17421742
}
17431743
else if (bIsNullable)
17441744
{
@@ -1795,7 +1795,8 @@ FillDateTimeArray(struct ArrowArray *psChild,
17951795
brokenDown.tm_sec = static_cast<int>(psRawField->Date.Second);
17961796
auto nVal =
17971797
CPLYMDHMSToUnixTime(&brokenDown) * 1000 +
1798-
(static_cast<int>(psRawField->Date.Second * 1000 + 0.5) % 1000);
1798+
(static_cast<int>(psRawField->Date.Second * 1000 + 0.5f) %
1799+
1000);
17991800
if (nFieldTZFlag >= OGR_TZFLAG_MIXED_TZ &&
18001801
psRawField->Date.TZFlag > OGR_TZFLAG_MIXED_TZ)
18011802
{
@@ -3882,7 +3883,7 @@ inline static void FillFieldListFromHalfFloat(
38823883
const auto nFloat16AsUInt32 = CPLHalfToFloat(paValues[i]);
38833884
float f;
38843885
memcpy(&f, &nFloat16AsUInt32, sizeof(f));
3885-
aValues.push_back(f);
3886+
aValues.push_back(static_cast<double>(f));
38863887
}
38873888
oFeature.SetField(iOGRFieldIdx, static_cast<int>(aValues.size()),
38883889
aValues.data());
@@ -4105,9 +4106,9 @@ static void AddToArray(CPLJSONArray &oArray, const struct ArrowSchema *schema,
41054106
else if (IsInt64(schema->format))
41064107
oArray.Add(static_cast<GIntBig>(GetValue<int64_t>(array, nIdx)));
41074108
else if (IsFloat16(schema->format))
4108-
oArray.Add(GetValueFloat16(array, nIdx));
4109+
oArray.Add(static_cast<double>(GetValueFloat16(array, nIdx)));
41094110
else if (IsFloat32(schema->format))
4110-
oArray.Add(GetValue<float>(array, nIdx));
4111+
oArray.Add(static_cast<double>(GetValue<float>(array, nIdx)));
41114112
else if (IsFloat64(schema->format))
41124113
oArray.Add(GetValue<double>(array, nIdx));
41134114
else if (IsString(schema->format))
@@ -4229,9 +4230,9 @@ static void AddToDict(CPLJSONObject &oDict, const std::string &osKey,
42294230
else if (IsInt64(schema->format))
42304231
oDict.Add(osKey, static_cast<GIntBig>(GetValue<int64_t>(array, nIdx)));
42314232
else if (IsFloat16(schema->format))
4232-
oDict.Add(osKey, GetValueFloat16(array, nIdx));
4233+
oDict.Add(osKey, static_cast<double>(GetValueFloat16(array, nIdx)));
42334234
else if (IsFloat32(schema->format))
4234-
oDict.Add(osKey, GetValue<float>(array, nIdx));
4235+
oDict.Add(osKey, static_cast<double>(GetValue<float>(array, nIdx)));
42354236
else if (IsFloat64(schema->format))
42364237
oDict.Add(osKey, GetValue<double>(array, nIdx));
42374238
else if (IsString(schema->format))
@@ -4400,8 +4401,8 @@ static bool SetFieldForOtherFormats(OGRFeature &oFeature,
44004401
{
44014402
oFeature.SetField(
44024403
iOGRFieldIndex,
4403-
GetValueFloat16(array, nOffsettedIndex -
4404-
static_cast<size_t>(array->offset)));
4404+
static_cast<double>(GetValueFloat16(
4405+
array, nOffsettedIndex - static_cast<size_t>(array->offset))));
44054406
}
44064407

44074408
else if (IsFixedWidthBinary(format))
@@ -4596,8 +4597,8 @@ static bool SetFieldForOtherFormats(OGRFeature &oFeature,
45964597
std::vector<double> aValues;
45974598
for (int i = 0; i < nItems; ++i)
45984599
{
4599-
aValues.push_back(
4600-
GetValueFloat16(childArray, nOffsettedIndex * nItems + i));
4600+
aValues.push_back(static_cast<double>(
4601+
GetValueFloat16(childArray, nOffsettedIndex * nItems + i)));
46014602
}
46024603
oFeature.SetField(iOGRFieldIndex, static_cast<int>(aValues.size()),
46034604
aValues.data());
@@ -5128,9 +5129,10 @@ static size_t FillValidityArrayFromAttrQuery(
51285129
}
51295130
else if (IsFloat32(format))
51305131
{
5131-
oFeature.SetField(iOGRFieldIndex,
5132-
static_cast<const float *>(
5133-
psArray->buffers[1])[nOffsettedIndex]);
5132+
oFeature.SetField(
5133+
iOGRFieldIndex,
5134+
static_cast<double>(static_cast<const float *>(
5135+
psArray->buffers[1])[nOffsettedIndex]));
51345136
}
51355137
else if (IsFloat64(format))
51365138
{
@@ -7377,7 +7379,7 @@ static bool FillFeature(OGRLayer *poLayer, const struct ArrowSchema *schema,
73777379
}
73787380
else if (IsFloat32(format))
73797381
{
7380-
FillField<float>(array, iOGRFieldIdx, iFeature, oFeature);
7382+
FillField<float, double>(array, iOGRFieldIdx, iFeature, oFeature);
73817383
return true;
73827384
}
73837385
else if (IsFloat64(format))

0 commit comments

Comments
 (0)