[
https://issues.apache.org/jira/browse/DERBY-6699?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14135158#comment-14135158
]
Knut Anders Hatlen commented on DERBY-6699:
-------------------------------------------
There were some other similar test failures in the same test run:
{noformat}
Failed Statement is: update media set name = 'Mon Liza', description =
'Something snarky.' where mediaID = 1
org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED ByteCode
Conditional then/else stack depths differ then:3 else: 4
if stack:
[org.apache.derby.iapi.sql.execute.ExecRow, 7,
Lorg/apache/derby/iapi/sql/execute/ExecRow;,
org/apache/derby/iapi/sql/execute/ExecRow]
[int, 2, I, I]
[org.apache.derby.iapi.types.UserDataValue, 7,
Lorg/apache/derby/iapi/types/UserDataValue;,
org/apache/derby/iapi/types/UserDataValue]
else stack:
[org.apache.derby.iapi.sql.execute.ExecRow, 7,
Lorg/apache/derby/iapi/sql/execute/ExecRow;,
org/apache/derby/iapi/sql/execute/ExecRow]
[int, 2, I, I]
[org.apache.derby.iapi.types.UserDataValue, 7,
Lorg/apache/derby/iapi/types/UserDataValue;,
org/apache/derby/iapi/types/UserDataValue]
[org.apache.derby.iapi.types.UserDataValue, 7,
Lorg/apache/derby/iapi/types/UserDataValue;,
org/apache/derby/iapi/types/UserDataValue]
at
org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162)
at
org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147)
at
org.apache.derby.impl.services.bytecode.Conditional.end(Conditional.java:227)
at
org.apache.derby.impl.services.bytecode.BCMethod.completeConditional(BCMethod.java:1055)
at
org.apache.derby.impl.sql.compile.JavaToSQLValueNode.generateExpression(JavaToSQLValueNode.java:172)
at
org.apache.derby.impl.sql.compile.CastNode.generateExpression(CastNode.java:885)
at
org.apache.derby.impl.sql.compile.ResultColumn.generateExpression(ResultColumn.java:1061)
at
org.apache.derby.impl.sql.compile.ResultColumnList.generateEvaluatedRow(ResultColumnList.java:1458)
at
org.apache.derby.impl.sql.compile.ResultColumnList.generateCore(ResultColumnList.java:1195)
at
org.apache.derby.impl.sql.compile.ResultColumnList.generate(ResultColumnList.java:1149)
at
org.apache.derby.impl.sql.compile.RowResultSetNode.generate(RowResultSetNode.java:878)
at
org.apache.derby.impl.sql.compile.ScrollInsensitiveResultSetNode.generate(ScrollInsensitiveResultSetNode.java:86)
at
org.apache.derby.impl.sql.compile.CursorNode.generate(CursorNode.java:640)
at
org.apache.derby.impl.sql.compile.StatementNode.generate(StatementNode.java:317)
at
org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:549)
at
org.apache.derby.impl.sql.GenericStatement.prepareStorable(GenericStatement.java:687)
at
org.apache.derby.iapi.sql.dictionary.SPSDescriptor.compileStatement(SPSDescriptor.java:373)
at
org.apache.derby.iapi.sql.dictionary.SPSDescriptor.prepareAndRelease(SPSDescriptor.java:264)
at
org.apache.derby.iapi.sql.dictionary.SPSDescriptor.getPreparedStatement(SPSDescriptor.java:739)
at
org.apache.derby.iapi.sql.dictionary.SPSDescriptor.getPreparedStatement(SPSDescriptor.java:655)
at
org.apache.derby.impl.sql.execute.GenericTriggerExecutor.executeSPS(GenericTriggerExecutor.java:171)
at
org.apache.derby.impl.sql.execute.GenericTriggerExecutor.executeWhenClauseAndAction(GenericTriggerExecutor.java:346)
at
org.apache.derby.impl.sql.execute.RowTriggerExecutor.fireTrigger(RowTriggerExecutor.java:113)
at
org.apache.derby.impl.sql.execute.TriggerEventActivator.notifyEvent(TriggerEventActivator.java:272)
at
org.apache.derby.impl.sql.execute.UpdateResultSet.fireAfterTriggers(UpdateResultSet.java:831)
at
org.apache.derby.impl.sql.execute.UpdateResultSet.open(UpdateResultSet.java:282)
at
org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:470)
at
org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:349)
at
org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1338)
at
org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:704)
at
org.apache.derby.impl.jdbc.EmbedStatement.executeLargeUpdate(EmbedStatement.java:181)
at
org.apache.derby.impl.jdbc.EmbedStatement.executeUpdate(EmbedStatement.java:170)
at
org.apache.derbyTesting.functionTests.tests.upgradeTests.BasicSetup.testDERBY5121TriggerTest2(BasicSetup.java:386)
{noformat}
{noformat}
org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED ByteCode
Conditional then/else stack depths differ then:1 else: 2
if stack:
[org.apache.derby.iapi.types.UserDataValue, 7,
Lorg/apache/derby/iapi/types/UserDataValue;,
org/apache/derby/iapi/types/UserDataValue]
else stack:
[org.apache.derby.iapi.types.UserDataValue, 7,
Lorg/apache/derby/iapi/types/UserDataValue;,
org/apache/derby/iapi/types/UserDataValue]
[org.apache.derby.iapi.types.UserDataValue, 7,
Lorg/apache/derby/iapi/types/UserDataValue;,
org/apache/derby/iapi/types/UserDataValue]
at
org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162)
at
org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147)
at
org.apache.derby.impl.services.bytecode.Conditional.end(Conditional.java:227)
at
org.apache.derby.impl.services.bytecode.BCMethod.completeConditional(BCMethod.java:1055)
at
org.apache.derby.impl.sql.compile.JavaToSQLValueNode.generateExpression(JavaToSQLValueNode.java:172)
at
org.apache.derby.impl.sql.compile.CastNode.generateExpression(CastNode.java:885)
at
org.apache.derby.impl.sql.compile.BinaryRelationalOperatorNode.generateQualMethod(BinaryRelationalOperatorNode.java:890)
at
org.apache.derby.impl.sql.compile.PredicateList.generateSingleQualifierCode(PredicateList.java:2807)
at
org.apache.derby.impl.sql.compile.PredicateList.generateQualifiers(PredicateList.java:3073)
at
org.apache.derby.impl.sql.compile.BaseJoinStrategy.fillInScanArgs1(BaseJoinStrategy.java:106)
at
org.apache.derby.impl.sql.compile.NestedLoopJoinStrategy.getScanArgs(NestedLoopJoinStrategy.java:256)
at
org.apache.derby.impl.sql.compile.FromBaseTable.getScanArguments(FromBaseTable.java:3808)
at
org.apache.derby.impl.sql.compile.FromBaseTable.generateResultSet(FromBaseTable.java:3498)
at
org.apache.derby.impl.sql.compile.FromBaseTable.generate(FromBaseTable.java:3425)
at
org.apache.derby.impl.sql.compile.ProjectRestrictNode.generateMinion(ProjectRestrictNode.java:1367)
at
org.apache.derby.impl.sql.compile.ProjectRestrictNode.generate(ProjectRestrictNode.java:1319)
at
org.apache.derby.impl.sql.compile.ProjectRestrictNode.generateMinion(ProjectRestrictNode.java:1464)
at
org.apache.derby.impl.sql.compile.ProjectRestrictNode.generate(ProjectRestrictNode.java:1319)
at
org.apache.derby.impl.sql.compile.UpdateNode.generate(UpdateNode.java:1028)
at
org.apache.derby.impl.sql.compile.StatementNode.generate(StatementNode.java:317)
at
org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:549)
at
org.apache.derby.impl.sql.GenericStatement.prepareStorable(GenericStatement.java:687)
at
org.apache.derby.iapi.sql.dictionary.SPSDescriptor.compileStatement(SPSDescriptor.java:373)
at
org.apache.derby.iapi.sql.dictionary.SPSDescriptor.prepareAndRelease(SPSDescriptor.java:264)
at
org.apache.derby.iapi.sql.dictionary.SPSDescriptor.getPreparedStatement(SPSDescriptor.java:739)
at
org.apache.derby.iapi.sql.dictionary.SPSDescriptor.getPreparedStatement(SPSDescriptor.java:655)
at
org.apache.derby.impl.sql.execute.GenericTriggerExecutor.executeSPS(GenericTriggerExecutor.java:171)
at
org.apache.derby.impl.sql.execute.GenericTriggerExecutor.executeWhenClauseAndAction(GenericTriggerExecutor.java:346)
at
org.apache.derby.impl.sql.execute.RowTriggerExecutor.fireTrigger(RowTriggerExecutor.java:113)
at
org.apache.derby.impl.sql.execute.TriggerEventActivator.notifyEvent(TriggerEventActivator.java:272)
at
org.apache.derby.impl.sql.execute.UpdateResultSet.fireAfterTriggers(UpdateResultSet.java:831)
at
org.apache.derby.impl.sql.execute.UpdateResultSet.open(UpdateResultSet.java:282)
at
org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:470)
at
org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:349)
at
org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1338)
at
org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:704)
at
org.apache.derby.impl.jdbc.EmbedStatement.executeLargeUpdate(EmbedStatement.java:181)
at
org.apache.derby.impl.jdbc.EmbedStatement.executeUpdate(EmbedStatement.java:170)
at
org.apache.derbyTesting.functionTests.tests.upgradeTests.BasicSetup.testDERBY5289TriggerUpgradeFormat(BasicSetup.java:1923)
{noformat}
{noformat}
Failed Statement is: create trigger d534_tr1 after insert on d534_t1
referencing new as new for each row mode db2sql when (new.x <> 2) insert into
d534_t2 values new.x
org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED ByteCode
Conditional then/else stack depths differ then:5 else: 6
if stack:
[org.apache.derby.iapi.sql.execute.ExecRow, 7,
Lorg/apache/derby/iapi/sql/execute/ExecRow;,
org/apache/derby/iapi/sql/execute/ExecRow]
[int, 2, I, I]
[org.apache.derby.iapi.types.DataValueDescriptor, 7,
Lorg/apache/derby/iapi/types/DataValueDescriptor;,
org/apache/derby/iapi/types/DataValueDescriptor]
[org.apache.derby.iapi.types.DataValueDescriptor, 7,
Lorg/apache/derby/iapi/types/DataValueDescriptor;,
org/apache/derby/iapi/types/DataValueDescriptor]
[org.apache.derby.iapi.types.UserDataValue, 7,
Lorg/apache/derby/iapi/types/UserDataValue;,
org/apache/derby/iapi/types/UserDataValue]
else stack:
[org.apache.derby.iapi.sql.execute.ExecRow, 7,
Lorg/apache/derby/iapi/sql/execute/ExecRow;,
org/apache/derby/iapi/sql/execute/ExecRow]
[int, 2, I, I]
[org.apache.derby.iapi.types.DataValueDescriptor, 7,
Lorg/apache/derby/iapi/types/DataValueDescriptor;,
org/apache/derby/iapi/types/DataValueDescriptor]
[org.apache.derby.iapi.types.DataValueDescriptor, 7,
Lorg/apache/derby/iapi/types/DataValueDescriptor;,
org/apache/derby/iapi/types/DataValueDescriptor]
[org.apache.derby.iapi.types.UserDataValue, 7,
Lorg/apache/derby/iapi/types/UserDataValue;,
org/apache/derby/iapi/types/UserDataValue]
[org.apache.derby.iapi.types.UserDataValue, 7,
Lorg/apache/derby/iapi/types/UserDataValue;,
org/apache/derby/iapi/types/UserDataValue]
at
org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162)
at
org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147)
at
org.apache.derby.impl.services.bytecode.Conditional.end(Conditional.java:227)
at
org.apache.derby.impl.services.bytecode.BCMethod.completeConditional(BCMethod.java:1055)
at
org.apache.derby.impl.sql.compile.JavaToSQLValueNode.generateExpression(JavaToSQLValueNode.java:172)
at
org.apache.derby.impl.sql.compile.CastNode.generateExpression(CastNode.java:885)
at
org.apache.derby.impl.sql.compile.BinaryOperatorNode.generateExpression(BinaryOperatorNode.java:577)
at
org.apache.derby.impl.sql.compile.ResultColumn.generateExpression(ResultColumn.java:1061)
at
org.apache.derby.impl.sql.compile.ResultColumnList.generateEvaluatedRow(ResultColumnList.java:1458)
at
org.apache.derby.impl.sql.compile.ResultColumnList.generateCore(ResultColumnList.java:1195)
at
org.apache.derby.impl.sql.compile.ResultColumnList.generate(ResultColumnList.java:1149)
at
org.apache.derby.impl.sql.compile.RowResultSetNode.generate(RowResultSetNode.java:878)
at
org.apache.derby.impl.sql.compile.ScrollInsensitiveResultSetNode.generate(ScrollInsensitiveResultSetNode.java:86)
at
org.apache.derby.impl.sql.compile.CursorNode.generate(CursorNode.java:640)
at
org.apache.derby.impl.sql.compile.StatementNode.generate(StatementNode.java:317)
at
org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:549)
at
org.apache.derby.impl.sql.GenericStatement.prepareStorable(GenericStatement.java:687)
at
org.apache.derby.iapi.sql.dictionary.SPSDescriptor.compileStatement(SPSDescriptor.java:373)
at
org.apache.derby.iapi.sql.dictionary.SPSDescriptor.prepareAndRelease(SPSDescriptor.java:264)
at
org.apache.derby.iapi.sql.dictionary.SPSDescriptor.prepareAndRelease(SPSDescriptor.java:292)
at
org.apache.derby.impl.sql.execute.CreateTriggerConstantAction.createSPS(CreateTriggerConstantAction.java:423)
at
org.apache.derby.impl.sql.execute.CreateTriggerConstantAction.executeConstantAction(CreateTriggerConstantAction.java:340)
at
org.apache.derby.impl.sql.execute.MiscResultSet.open(MiscResultSet.java:61)
at
org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:470)
at
org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:349)
at
org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1338)
at
org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:704)
at
org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:631)
at
org.apache.derbyTesting.functionTests.tests.upgradeTests.Changes10_11.testTriggerWhenClause(Changes10_11.java:110)
{noformat}
All of these failures seem to have in common that the top of the if stack has
one UserDataValue and the top of the else stack has two UserDataValues.
All of these failures happened when compiling trigger actions. That was not the
case in the originally reported incidence here or in DERBY-6694.
All of these failures happened in JavaToSQLValueNode.generateExpression()
called from CastNode.generateExpression(). That was not the case in the
previously reported incidents here or in DERBY-6694, where it happened in
StaticMethodCallNode.generateExpression() called from
JavaToSQLValueNode.generateExpression().
> Error in PredicatePushdownTest.test_predicatePushdown
> -----------------------------------------------------
>
> Key: DERBY-6699
> URL: https://issues.apache.org/jira/browse/DERBY-6699
> Project: Derby
> Issue Type: Bug
> Components: Test
> Affects Versions: 10.11.1.1
> Reporter: Rick Hillegas
> Attachments: derby-6699-diagnostics.diff
>
>
> The following error was seen in the nightly tests on the 10.11 branch on
> Solaris_sparc_jdk8:
> http://download.java.net/javadesktop/derby/request_5594365/
> {noformat}
> java.sql.SQLException: Java exception: 'ASSERT FAILED ByteCode
> Conditional then/else stack depths differ then:1 else: 2:
> org.apache.derby.shared.common.sanity.AssertFailure'.
> at
> org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:107)
> at
> org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:133)
> at org.apache.derby.impl.jdbc.Util.seeNextException(Util.java:255)
> at org.apache.derby.impl.jdbc.Util.javaException(Util.java:277)
> at
> org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:437)
> at
> org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:353)
> at
> org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:2396)
> at
> org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:82)
> at
> org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:691)
> at
> org.apache.derby.impl.jdbc.EmbedStatement.executeQuery(EmbedStatement.java:147)
> at
> org.apache.derbyTesting.functionTests.tests.lang.PredicatePushdownTest.test_predicatePushdown(PredicatePushdownTest.java:770)
> at
> org.apache.derbyTesting.junit.BaseTestCase.runBare(BaseTestCase.java:118)
> at
> org.apache.derbyTesting.junit.BaseJDBCTestCase.runBareOverridable(BaseJDBCTestCase.java:440)
> at
> org.apache.derbyTesting.junit.BaseJDBCTestCase.runBare(BaseJDBCTestCase.java:457)
> at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
> at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
> at junit.extensions.TestSetup.run(TestSetup.java:25)
> at
> org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:57)
> at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
> at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
> at junit.extensions.TestSetup.run(TestSetup.java:25)
> Caused by: ERROR XJ001: Java exception: 'ASSERT FAILED ByteCode Conditional
> then/else stack depths differ then:1 else: 2:
> org.apache.derby.shared.common.sanity.AssertFailure'.
> at
> org.apache.derby.iapi.error.StandardException.newException(StandardException.java:290)
> at
> org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(SQLExceptionFactory.java:162)
> at
> org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:74)
> Caused by: org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED
> ByteCode Conditional then/else stack depths differ then:1 else: 2
> at
> org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162)
> at
> org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147)
> at
> org.apache.derby.impl.services.bytecode.Conditional.end(Conditional.java:210)
> at
> org.apache.derby.impl.services.bytecode.BCMethod.completeConditional(BCMethod.java:1055)
> at
> org.apache.derby.impl.sql.compile.StaticMethodCallNode.generateExpression(StaticMethodCallNode.java:1334)
> at
> org.apache.derby.impl.sql.compile.JavaToSQLValueNode.generateExpression(JavaToSQLValueNode.java:160)
> at
> org.apache.derby.impl.sql.compile.ResultColumn.generateExpression(ResultColumn.java:1061)
> at
> org.apache.derby.impl.sql.compile.ResultColumnList.generateEvaluatedRow(ResultColumnList.java:1458)
> at
> org.apache.derby.impl.sql.compile.ResultColumnList.generateCore(ResultColumnList.java:1195)
> at
> org.apache.derby.impl.sql.compile.ProjectRestrictNode.generateMinion(ProjectRestrictNode.java:1539)
> at
> org.apache.derby.impl.sql.compile.ProjectRestrictNode.generate(ProjectRestrictNode.java:1319)
> at
> org.apache.derby.impl.sql.compile.UnionNode.generate(UnionNode.java:654)
> at
> org.apache.derby.impl.sql.compile.NormalizeResultSetNode.generate(NormalizeResultSetNode.java:644)
> at
> org.apache.derby.impl.sql.compile.ProjectRestrictNode.generateMinion(ProjectRestrictNode.java:1367)
> at
> org.apache.derby.impl.sql.compile.ProjectRestrictNode.generate(ProjectRestrictNode.java:1319)
> at
> org.apache.derby.impl.sql.compile.DistinctNode.generate(DistinctNode.java:288)
> at
> org.apache.derby.impl.sql.compile.ProjectRestrictNode.generateMinion(ProjectRestrictNode.java:1464)
> at
> org.apache.derby.impl.sql.compile.ProjectRestrictNode.generate(ProjectRestrictNode.java:1319)
> at
> org.apache.derby.impl.sql.compile.ProjectRestrictNode.generateMinion(ProjectRestrictNode.java:1367)
> at
> org.apache.derby.impl.sql.compile.ProjectRestrictNode.generate(ProjectRestrictNode.java:1319)
> at
> org.apache.derby.impl.sql.compile.JoinNode.getJoinArguments(JoinNode.java:1648)
> at
> org.apache.derby.impl.sql.compile.JoinNode.generateCore(JoinNode.java:1624)
> at
> org.apache.derby.impl.sql.compile.JoinNode.generateCore(JoinNode.java:1561)
> at
> org.apache.derby.impl.sql.compile.HalfOuterJoinNode.generate(HalfOuterJoinNode.java:786)
> at
> org.apache.derby.impl.sql.compile.ProjectRestrictNode.generateMinion(ProjectRestrictNode.java:1367)
> at
> org.apache.derby.impl.sql.compile.ProjectRestrictNode.generate(ProjectRestrictNode.java:1319)
> at
> org.apache.derby.impl.sql.compile.ProjectRestrictNode.generateMinion(ProjectRestrictNode.java:1464)
> at
> org.apache.derby.impl.sql.compile.ProjectRestrictNode.generate(ProjectRestrictNode.java:1319)
> at
> org.apache.derby.impl.sql.compile.ScrollInsensitiveResultSetNode.generate(ScrollInsensitiveResultSetNode.java:86)
> at
> org.apache.derby.impl.sql.compile.CursorNode.generate(CursorNode.java:640)
> at
> org.apache.derby.impl.sql.compile.StatementNode.generate(StatementNode.java:317)
> at
> org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:549)
> at
> org.apache.derby.impl.sql.GenericStatement.prepare(GenericStatement.java:99)
> at
> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(GenericLanguageConnectionContext.java:1114)
> at
> org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:683)
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)