icecat: add release icecat-140.10.1-1gnu1 for ecne

This commit is contained in:
Ark74 2026-05-04 16:58:41 -06:00
parent a5f93cb214
commit ff85d7c623
1256 changed files with 63469 additions and 24141 deletions

View file

@ -12,6 +12,7 @@
#include <algorithm>
#include <array>
#include <cstdint>
#include <string>
#include <vector>

View file

@ -1,5 +1,5 @@
#define ANGLE_COMMIT_HASH "419cd2c3213b"
#define ANGLE_COMMIT_HASH "b0098a1ebdb0"
#define ANGLE_COMMIT_HASH_SIZE 12
#define ANGLE_COMMIT_DATE "2024-07-29 14:40:59 -0700"
#define ANGLE_COMMIT_POSITION 19739
#define ANGLE_COMMIT_DATE "2026-04-09 15:03:30 +0200"
#define ANGLE_COMMIT_POSITION 19751
#define ANGLE_HAS_BINARY_LOADING

View file

@ -1591,6 +1591,9 @@ inline const char *getQualifierString(TQualifier q)
case EvqLocalInvocationIndex: return "LocalInvocationIndex";
case EvqReadOnly: return "readonly";
case EvqWriteOnly: return "writeonly";
case EvqCoherent: return "coherent";
case EvqRestrict: return "restrict";
case EvqVolatile: return "volatile";
case EvqGeometryIn: return "in";
case EvqGeometryOut: return "out";
case EvqPerVertexIn: return "gl_in";

View file

@ -686,6 +686,14 @@ bool TCompiler::checkAndSimplifyAST(TIntermBlock *root,
// Desktop GLSL shaders don't have precision, so don't expect them to be specified.
mValidateASTOptions.validatePrecision = !IsDesktopGLSpec(mShaderSpec);
// Disallow expressions deemed too complex.
// This needs to be checked before other functions that will traverse the AST
// to prevent potential stack overflow crashes.
if (compileOptions.limitExpressionComplexity && !limitExpressionComplexity(root))
{
return false;
}
if (!validateAST(root))
{
return false;
@ -709,12 +717,6 @@ bool TCompiler::checkAndSimplifyAST(TIntermBlock *root,
}
}
// Disallow expressions deemed too complex.
if (compileOptions.limitExpressionComplexity && !limitExpressionComplexity(root))
{
return false;
}
if (shouldRunLoopAndIndexingValidation(compileOptions) &&
!ValidateLimitations(root, mShaderType, &mSymbolTable, &mDiagnostics))
{

View file

@ -790,6 +790,14 @@ bool TParseContext::checkIsAtGlobalLevel(const TSourceLoc &line, const char *tok
return true;
}
void TParseContext::checkIsValidExpressionStatement(const TSourceLoc &line, TIntermTyped *expr)
{
if (expr->isInterfaceBlock())
{
error(line, "expression statement is not allowed for interface blocks", "");
}
}
// ESSL 3.00.5 sections 3.8 and 3.9.
// If it starts "gl_" or contains two consecutive underscores, it's reserved.
// Also checks for "webgl_" and "_webgl_" reserved identifiers if parsing a webgl shader.
@ -950,6 +958,13 @@ bool TParseContext::checkConstructorArguments(const TSourceLoc &line,
"constructor");
return false;
}
if (argTyped->getBasicType() == EbtInterfaceBlock)
{
error(line,
"an interface block cannot be used as a constructor argument for this type",
"constructor");
return false;
}
if (argTyped->getType().isArray())
{
error(line, "constructing from a non-dereferenced array", "constructor");
@ -1335,9 +1350,6 @@ bool TParseContext::declareVariable(const TSourceLoc &line,
(*variable) = new TVariable(&symbolTable, identifier, type, symbolType);
ASSERT(type->getLayoutQualifier().index == -1 ||
(isExtensionEnabled(TExtension::EXT_blend_func_extended) &&
mShaderType == GL_FRAGMENT_SHADER && mShaderVersion >= 300));
if (type->getQualifier() == EvqFragmentOut)
{
if (type->getLayoutQualifier().index != -1 && type->getLayoutQualifier().location == -1)
@ -3377,7 +3389,10 @@ TIntermGlobalQualifierDeclaration *TParseContext::parseGlobalQualifierDeclaratio
typeQualifier.line);
checkMemoryQualifierIsNotSpecified(typeQualifier.memoryQualifier, typeQualifier.line);
symbolTable.addInvariantVarying(*variable);
if (typeQualifier.invariant)
{
symbolTable.addInvariantVarying(*variable);
}
TIntermSymbol *intermSymbol = new TIntermSymbol(variable);
intermSymbol->setLine(identifierLoc);
@ -4458,6 +4473,11 @@ bool TParseContext::checkUnsizedArrayConstructorArgumentDimensionality(
{
const TIntermTyped *element = arg->getAsTyped();
ASSERT(element);
if (element->getType().isUnsizedArray())
{
error(line, "constructing from an unsized array", "constructor");
return false;
}
size_t dimensionalityFromElement = element->getType().getNumArraySizes() + 1u;
if (dimensionalityFromElement > type.getNumArraySizes())
{
@ -5197,14 +5217,12 @@ TIntermTyped *TParseContext::addIndexExpression(TIntermTyped *baseExpression,
int TParseContext::checkIndexLessThan(bool outOfRangeIndexIsError,
const TSourceLoc &location,
int index,
int arraySize,
unsigned int arraySize,
const char *reason)
{
// Should not reach here with an unsized / runtime-sized array.
ASSERT(arraySize > 0);
// A negative index should already have been checked.
ASSERT(index >= 0);
if (index >= arraySize)
if (static_cast<unsigned int>(index) >= arraySize)
{
std::stringstream reasonStream = sh::InitializeStream<std::stringstream>();
reasonStream << reason << " '" << index << "'";
@ -6396,6 +6414,11 @@ bool TParseContext::binaryOpCommonCheck(TOperator op,
TIntermTyped *right,
const TSourceLoc &loc)
{
if (left->getBasicType() == EbtVoid || right->getBasicType() == EbtVoid)
{
error(loc, "operation with void operands", GetOperatorString(op));
return false;
}
// Check opaque types are not allowed to be operands in expressions other than array indexing
// and structure member selection.
if (IsOpaqueType(left->getBasicType()) || IsOpaqueType(right->getBasicType()))
@ -6842,6 +6865,10 @@ TIntermTyped *TParseContext::addComma(TIntermTyped *left,
"sequence operator is not allowed for void, arrays, or structs containing arrays",
",");
}
if (left->isInterfaceBlock() || right->isInterfaceBlock())
{
error(loc, "sequence operator is not allowed for interface blocks", ",");
}
TIntermBinary *commaNode = TIntermBinary::CreateComma(left, right, mShaderVersion);
markStaticReadIfSymbol(left);
@ -7345,8 +7372,8 @@ TIntermTyped *TParseContext::addMethod(TFunctionLookup *fnCall, const TSourceLoc
return CreateZeroNode(TType(EbtInt, EbpUndefined, EvqConst));
}
TIntermTyped *TParseContext::addNonConstructorFunctionCall(TFunctionLookup *fnCall,
const TSourceLoc &loc)
TIntermTyped *TParseContext::addNonConstructorFunctionCallImpl(TFunctionLookup *fnCall,
const TSourceLoc &loc)
{
// First check whether the function has been hidden by a variable name or struct typename by
// using the symbol looked up in the lexical phase. If the function is not hidden, look for one
@ -7408,10 +7435,7 @@ TIntermTyped *TParseContext::addNonConstructorFunctionCall(TFunctionLookup *fnCa
{
// Treat it like a built-in unary operator.
TIntermNode *unaryParamNode = fnCall->arguments().front();
TIntermTyped *callNode =
createUnaryMath(op, unaryParamNode->getAsTyped(), loc, fnCandidate);
ASSERT(callNode != nullptr);
return callNode;
return createUnaryMath(op, unaryParamNode->getAsTyped(), loc, fnCandidate);
}
TIntermAggregate *callNode =
@ -7436,7 +7460,17 @@ TIntermTyped *TParseContext::addNonConstructorFunctionCall(TFunctionLookup *fnCa
error(loc, "no matching overloaded function found", fnCall->name());
}
}
return nullptr;
}
TIntermTyped *TParseContext::addNonConstructorFunctionCall(TFunctionLookup *fnCall,
const TSourceLoc &loc)
{
TIntermTyped *result = addNonConstructorFunctionCallImpl(fnCall, loc);
if (result != nullptr)
{
return result;
}
// Error message was already written. Put on an unused node for error recovery.
return CreateZeroNode(TType(EbtFloat, EbpMedium, EvqConst));
}

View file

@ -129,6 +129,7 @@ class TParseContext : angle::NonCopyable
// Check functions - the ones that return bool return false if an error was generated.
void checkIsValidExpressionStatement(const TSourceLoc &line, TIntermTyped *expr);
bool checkIsNotReserved(const TSourceLoc &line, const ImmutableString &identifier);
void checkPrecisionSpecified(const TSourceLoc &line, TPrecision precision, TBasicType type);
bool checkCanBeLValue(const TSourceLoc &line, const char *op, TIntermTyped *node);
@ -538,7 +539,7 @@ class TParseContext : angle::NonCopyable
int checkIndexLessThan(bool outOfRangeIndexIsError,
const TSourceLoc &location,
int index,
int arraySize,
unsigned int arraySize,
const char *reason);
bool declareVariable(const TSourceLoc &line,
@ -651,6 +652,7 @@ class TParseContext : angle::NonCopyable
TIntermTyped *addMethod(TFunctionLookup *fnCall, const TSourceLoc &loc);
TIntermTyped *addConstructor(TFunctionLookup *fnCall, const TSourceLoc &line);
TIntermTyped *addNonConstructorFunctionCallImpl(TFunctionLookup *fnCall, const TSourceLoc &loc);
TIntermTyped *addNonConstructorFunctionCall(TFunctionLookup *fnCall, const TSourceLoc &loc);
// Return either the original expression or the folded version of the expression in case the

View file

@ -862,9 +862,9 @@ static const yytype_int16 yyrline[] = {
1330, 1333, 1336, 1339, 1342, 1350, 1358, 1366, 1374, 1382, 1390, 1400, 1410, 1420, 1423, 1430,
1437, 1444, 1447, 1455, 1455, 1458, 1458, 1464, 1467, 1473, 1476, 1483, 1487, 1493, 1496, 1502,
1506, 1510, 1511, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1527, 1531, 1531, 1531, 1538, 1539,
1543, 1543, 1544, 1544, 1549, 1553, 1560, 1564, 1571, 1572, 1576, 1582, 1586, 1595, 1595, 1602,
1605, 1611, 1615, 1621, 1621, 1626, 1626, 1630, 1630, 1638, 1641, 1647, 1650, 1656, 1660, 1667,
1670, 1673, 1676, 1679, 1687, 1693, 1699, 1702, 1708, 1708};
1543, 1543, 1544, 1544, 1549, 1553, 1560, 1564, 1571, 1572, 1579, 1585, 1589, 1598, 1598, 1605,
1608, 1614, 1618, 1624, 1624, 1629, 1629, 1633, 1633, 1641, 1644, 1650, 1653, 1659, 1663, 1670,
1673, 1676, 1679, 1682, 1690, 1696, 1702, 1705, 1711, 1711};
#endif
/** Accessing symbol of state STATE. */
@ -4483,6 +4483,7 @@ yyreduce:
case 297: /* expression_statement: expression SEMICOLON */
{
context->checkIsValidExpressionStatement((yyloc), (yyvsp[-1].interm.intermTypedNode));
(yyval.interm.intermNode) = (yyvsp[-1].interm.intermTypedNode);
}
break;

View file

@ -29,6 +29,10 @@ bool NeedsReturnStatement(TIntermFunctionDefinition *node, TType *returnType)
}
TIntermBlock *bodyNode = node->getBody();
if (bodyNode->getSequence()->empty())
{
return true;
}
TIntermBranch *returnNode = bodyNode->getSequence()->back()->getAsBranchNode();
if (returnNode != nullptr && returnNode->getFlowOp() == EOpReturn)
{

View file

@ -2064,8 +2064,14 @@ angle::Result Renderer11::drawLineLoop(const gl::Context *context,
GetLineLoopIndices(indices, type, static_cast<GLuint>(count),
glState.isPrimitiveRestartEnabled(), &mScratchIndexDataBuffer);
unsigned int spaceNeeded =
static_cast<unsigned int>(sizeof(GLuint) * mScratchIndexDataBuffer.size());
uint64_t spaceNeeded64 = sizeof(GLuint) * mScratchIndexDataBuffer.size();
ANGLE_CHECK(GetImplAs<Context11>(context), spaceNeeded64 <= std::numeric_limits<int>::max(),
"Failed to create a 32-bit looping index buffer for "
"a GL_LINE_LOOP of <32-bit element type; too many indices required.",
GL_OUT_OF_MEMORY);
int spaceNeeded = static_cast<int>(spaceNeeded64);
ANGLE_TRY(
mLineLoopIB->reserveBufferSpace(context, spaceNeeded, gl::DrawElementsType::UnsignedInt));
@ -2146,8 +2152,12 @@ angle::Result Renderer11::drawTriangleFan(const gl::Context *context,
GetTriFanIndices(indexPointer, type, count, glState.isPrimitiveRestartEnabled(),
&mScratchIndexDataBuffer);
const unsigned int spaceNeeded =
static_cast<unsigned int>(mScratchIndexDataBuffer.size() * sizeof(unsigned int));
uint64_t spaceNeeded64 = mScratchIndexDataBuffer.size() * sizeof(unsigned int);
ANGLE_CHECK(GetImplAs<Context11>(context), spaceNeeded64 <= std::numeric_limits<int>::max(),
"Failed to create a 32-bit looping index buffer for "
"a GL_TRIANGLE_FAN of <32-bit element type; too many indices required.",
GL_OUT_OF_MEMORY);
int spaceNeeded = static_cast<int>(spaceNeeded64);
ANGLE_TRY(mTriangleFanIB->reserveBufferSpace(context, spaceNeeded,
gl::DrawElementsType::UnsignedInt));

View file

@ -1,4 +1,10 @@
commit 419cd2c3213b594f8e2488bf48034fed20ace81d
commit b0098a1ebdb0400b515ff7a662685bda111e9e87
Author: Emilio Cobos Álvarez <emilio@crisal.io>
Date: Thu Apr 9 15:03:30 2026 +0200
Add a missing change to 7918168436578718b234bfd56da152e34a85af1d that is in Gecko.
commit 442302a3b7ae7cca7f85524e6bb3d774a10b6fbc
Author: Shahbaz Youssefi <syoussefi@chromium.org>
Date: Mon Mar 27 13:05:36 2023 -0400
@ -15,6 +21,198 @@ Date: Mon Mar 27 13:05:36 2023 -0400
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
commit 4f5c3dbc01f70efbaaed41743893ed2c8a7653cd
Author: Emilio Cobos Álvarez <emilio@crisal.io>
Date: Thu Apr 9 13:40:10 2026 +0200
Add missing codegen from #27.
commit be5a7593658365659dfc6384a95c44406e4e5d9e
Author: Kimmo Kinnunen <kkinnunen@apple.com>
Date: Thu Oct 24 11:46:54 2024 +0300
Disallow discarded uniform block references
Uniform block instances cannot be used by themselves, as there
is no way to refer to their type. Disallow the only typeless
access pattern, discarding via expression statement:
uniform MyBlock { int x; } b;
void main() {
b;
0, b;
}
Explained as disallowed in newer GLSL 300:
https://github.com/KhronosGroup/WebGL/issues/3644
The comma expression form would ASSERT in CollectVariables.
Bug: angleproject:42267026
Change-Id: I6c8b835482fd551bd97576c1bd24f005874da6af
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5961498
Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
commit 329044148ea14623910a1b33a4f1fd81445fd21e
Author: Scott Marcy <mscott@apple.com>
Date: Thu May 30 11:36:58 2024 -0600
Fix stack overflow crash by traversing a too-deep AST
This simply moves the check for a too-deep AST before the first attempts
to traverse the AST (i.e., `validateAST()`).
Bug: angleproject:343505104
Change-Id: Iafb658a30f74a666beab8c69745ca53d17d70dd3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5585186
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Auto-Submit: Scott M <mscott@apple.com>
commit 28669be7c0129fa7ed117f730484db302a39bcb2
Author: Nisha Jain <nisha_jain@apple.com>
Date: Thu Mar 7 14:19:58 2024 +0200
Avoid asserts when const folding binary ops on void variables
Fix asserts for example with / and % during constant folding when
the operands might be voids.
Bug: angleproject:8592
Change-Id: I22275642dbcdf9066940d3a94114e8daa5cbbe41
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5416376
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com>
commit ebaab5cd66b66183175f8c5d5f72210afcba38ca
Author: Kimmo Kinnunen <kkinnunen@apple.com>
Date: Fri Mar 8 14:26:56 2024 +0200
Check array index against unsigned array size
Fix an assert during GLSL parsing when a very
large array (~1U) type is indexed.
Bug: angleproject:8596
Change-Id: I219ac5c8f3fa58aa4c7d679eade6f32b59eb1103
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5352653
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
commit 5a3f53d8bff0709e94e9b5c2a97684c9a012f6f6
Author: Erica Li <lerica@apple.com>
Date: Fri Mar 8 12:40:09 2024 +0200
Avoid assert with multiple memory qualifiers
Add missing qualifier strings.
Bug: angleproject:8593
Change-Id: I484571c33effd85d52712b4876f6a3a5c73d8fde
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5352255
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
commit f95d411e7d0c5cfb4b0dfef2ecadb952cc92b06a
Author: Kimmo Kinnunen <kkinnunen@apple.com>
Date: Tue Mar 5 21:42:32 2024 +0200
Ensure unary math op parse to an node on error
Return the error node for ops like radians().
The math op parse can fail in multiple ways.
Fixed: angleproject:8583
Change-Id: Ief7e150dffefe711f567d95c62d1023fc7fa1c91
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5344716
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Kenneth Russell <kbr@chromium.org>
commit 386e3783a143a5268df86bdf93cd10892419f395
Author: Kimmo Kinnunen <kkinnunen@apple.com>
Date: Mon Mar 4 14:43:10 2024 +0200
Fix layout(index=) parse assert on es 100 shaders
Remove invalid assert about layout index qualifier being present only if
EXT_blend_func_extended is present.
The layout qualifier gets parsed to support EXT_shader_framebuffer_fetch
in ES 100 shaders to support
"layout(incoherent) mediump vec4 gl_FragData[gl_MaxDrawBuffers]"
Fixed: angleproject:8570
Change-Id: I0d0d99bcc882a0befd97c2510dec4a8ccf1690bd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5340249
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Kenneth Russell <kbr@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
commit abe9de5edc89a3db4188c8ddf52e61f6820ecebd
Author: Kimmo Kinnunen <kkinnunen@apple.com>
Date: Fri Feb 16 22:28:18 2024 +0200
Fix ASSERT in non-global precise var decls
Precise was treated as invariant. Precise can be
declared for non-global variables.
Bug: angleproject:8550
Change-Id: Ia0d00d67d0d1504b78294ee2256785fe3da3e399
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5300976
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
commit 718164d445a82bd24da61ff670deb5f1702fbfc3
Author: Kimmo Kinnunen <kkinnunen@apple.com>
Date: Tue Feb 13 17:54:12 2024 +0200
Uniform block reference in constuctors crash
Passing uniform block instance name to a built-in constructor would
cause type confusion. Block this by failing to parse.
Bug: angleproject:8533
Change-Id: I5a676b41e2f3d766ece4ed472debc1c874753293
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5290897
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
commit a7ce496eaa3ac8f108190ca544e00024edead840
Author: Kimmo Kinnunen <kkinnunen@apple.com>
Date: Wed Feb 7 14:25:32 2024 +0200
Fix an assert on multidim array constructors
Fail early instead of asserting when trying to parse a
multidimensional array constructor call with unsized
argument array argument.
int A[];
int B[int[][](A)];
Bug: angleproject:8519
Change-Id: Iee2c70318eebd2def57ffab8db709d1076692922
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5272434
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
commit 7918168436578718b234bfd56da152e34a85af1d
Author: Kelsey Gilbert <kelsey.gilbert@mozilla.com>
Date: Tue Jun 4 15:37:29 2024 -0700