Skip to content

Commit 7dac76b

Browse files
[vt, sdf, usd] fix array-bounds warnings on GCC 13
Five false-positive warning sites caused by GCC 13 losing bound information during aggressive inlining. pxr/base/vt/streamOut.cpp Ensure dimension is less than Vt_ShapeData::NumOtherDims before indexing into shape.otherDims pxr/usd/sdf/schema.cpp Add TF_AXIOM(static_cast<size_t>(level) < std::size(valueTupleDimensions.d)) to the else-if in _AddValuesToValueContext. GCC cannot bound the plain size_t size member but can see std::size(d) == 2. pxr/usd/usd/clip.cpp Add TF_AXIOM(numTimes <= brackingTimes.size()) so GCC can see that numTimes is correctly bounded before std::sort
1 parent 15a2bff commit 7dac76b

3 files changed

Lines changed: 6 additions & 0 deletions

File tree

pxr/base/vt/streamOut.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include "pxr/pxr.h"
99
#include "pxr/base/arch/demangle.h"
10+
#include "pxr/base/tf/diagnostic.h"
1011
#include "pxr/base/tf/stringUtils.h"
1112
#include "pxr/base/vt/streamOut.h"
1213
#include "pxr/base/vt/types.h"
@@ -84,6 +85,7 @@ _StreamArrayRecursive(
8485
}
8586
}
8687
else {
88+
TF_AXIOM(dimension < Vt_ShapeData::NumOtherDims);
8789
for (size_t j = 0; j < shape.otherDims[dimension]; ++j) {
8890
if (j) { out << ", "; }
8991
_StreamArrayRecursive(

pxr/usd/sdf/schema.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "pxr/base/vt/dictionary.h"
3232

3333
#include <deque>
34+
#include <iterator>
3435
#include <map>
3536
#include <set>
3637
#include <vector>
@@ -1539,6 +1540,7 @@ _AddValuesToValueContext(std::deque<Value> *values, Sdf_ParserValueContext *cont
15391540
values->pop_front();
15401541
}
15411542
} else if (static_cast<size_t>(level) < context->valueTupleDimensions.size) {
1543+
TF_AXIOM(static_cast<size_t>(level) < std::size(context->valueTupleDimensions.d));
15421544
context->BeginTuple();
15431545
for (size_t i = 0; i < context->valueTupleDimensions.d[level]; i++) {
15441546
_AddValuesToValueContext(values, context, level + 1);

pxr/usd/usd/clip.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "pxr/usd/usd/tokens.h"
2525

2626
#include "pxr/base/gf/interval.h"
27+
#include "pxr/base/tf/diagnostic.h"
2728
#include "pxr/base/tf/preprocessorUtilsLite.h"
2829
#include "pxr/base/tf/stringUtils.h"
2930
#include "pxr/base/vt/array.h"
@@ -430,6 +431,7 @@ Usd_Clip::GetBracketingTimeSamplesForPath(
430431
return true;
431432
}
432433

434+
TF_AXIOM(numTimes <= bracketingTimes.size());
433435
std::sort(bracketingTimes.begin(), bracketingTimes.begin() + numTimes);
434436
auto uniqueIt = std::unique(
435437
bracketingTimes.begin(), bracketingTimes.begin() + numTimes);

0 commit comments

Comments
 (0)