Array-sizing bug fix: multiple array initializers of different size in the same declaration.
Handles the case of
float[] x = float[] (1.0, 2.0, 3.0),
y = float[] (1.0, 2.0, 3.0, 4.0);
where a shallow copy of the type arrayness from the left-most float[]
was getting used twice.
This commit is contained in:
parent
dad6408542
commit
989df85dcd
5 changed files with 74 additions and 5 deletions
|
|
@ -4447,7 +4447,13 @@ void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType
|
|||
//
|
||||
TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& identifier, const TPublicType& publicType, TArraySizes* arraySizes, TIntermTyped* initializer)
|
||||
{
|
||||
TType type(publicType);
|
||||
TType type(publicType); // shallow copy; 'type' shares the arrayness and structure definition with 'publicType'
|
||||
if (type.isImplicitlySizedArray()) {
|
||||
// Because "int[] a = int[2](...), b = int[3](...)" makes two arrays a and b
|
||||
// of different sizes, for this case sharing the shallow copy of arrayness
|
||||
// with the publicType oversubscribes it, so get a deep copy of the arrayness.
|
||||
type.newArraySizes(*publicType.arraySizes);
|
||||
}
|
||||
|
||||
if (voidErrorCheck(loc, identifier, type.getBasicType()))
|
||||
return nullptr;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue