Skip to content

[GEN][ZH] Remove unnecessary NULL pointer tests in AIPathfind, AIPlayer, AIStates #1095

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

xezon
Copy link

@xezon xezon commented Jun 19, 2025

This change removes unnecessary NULL pointer tests in AIPathfind, AIPlayer, AIStates and makes the compiler happy.

Unnecessary, because I saw no condition under which NULL would be passed to these pointers. They should always contain valid pointers, otherwise this would have crashed anyway.

GeneralsMD\Code\GameEngine\Source\GameLogic\AI\AIPathfind.cpp(6239): warning C6011: Dereferencing NULL pointer 'obj'.
GeneralsMD\Code\GameEngine\Source\GameLogic\AI\AIPathfind.cpp(6331): warning C6011: Dereferencing NULL pointer '<COMPLEX_EXPR>'. See line 6239 for an earlier location where this can occur
GeneralsMD\Code\GameEngine\Source\GameLogic\AI\AIPathfind.cpp(9386): warning C6011: Dereferencing NULL pointer 'objOther'.
GeneralsMD\Code\GameEngine\Source\GameLogic\AI\AIPathfind.cpp(10238): warning C6011: Dereferencing NULL pointer 'obj'.
GeneralsMD\Code\GameEngine\Source\GameLogic\AI\AIPathfind.cpp(10409): warning C6011: Dereferencing NULL pointer 'obj'.
GeneralsMD\Code\GameEngine\Source\GameLogic\AI\AIPathfind.cpp(10617): warning C6011: Dereferencing NULL pointer 'obj'.
GeneralsMD\Code\GameEngine\Source\GameLogic\AI\AIPathfind.cpp(10955): warning C6011: Dereferencing NULL pointer 'obj'.
GeneralsMD\Code\GameEngine\Source\GameLogic\AI\AIPlayer.cpp(2885): warning C6011: Dereferencing NULL pointer 'team'.
GeneralsMD\Code\GameEngine\Source\GameLogic\AI\AIStates.cpp(5237): warning C6011: Dereferencing NULL pointer 'm_att'. See line 5200 for an earlier location where this can occur

@xezon xezon added Minor Severity: Minor < Major < Critical < Blocker Refactor Edits the code with insignificant behavior changes, is never user facing labels Jun 19, 2025
@xezon xezon force-pushed the xezon/staticanalysis2/010 branch from 2c2dd8a to 32e2073 Compare June 20, 2025 07:32
@@ -6130,10 +6130,10 @@ Int Pathfinder::examineNeighboringCells(PathfindCell *parentCell, PathfindCell *
const Object *obj, Int attackDistance)
{
Bool canPathThroughUnits = false;
if (obj && obj->getAIUpdateInterface()) {
if (obj->getAIUpdateInterface()) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One function that calls examineNeighboringCells() is internalFindPath(). In the latter there are multiple times that obj is being NULL tested. None of these are getting removed in this PR.

It feels a bit random to remove some, but not others.
Consider the spaghetti-mess pathfinding is and how hard it was to find the cause of crashes, I think this PR should not be merged.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As long as it does not cause mismatch, it should be fine. The game would have crashed if any of these null checks were really necessary, otherwise the compiler would not emit this warning.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you rebase it to main , so I can mass test it?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rebased to Main.

@xezon xezon force-pushed the xezon/staticanalysis2/010 branch from 32e2073 to fc50831 Compare July 12, 2025 09:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Minor Severity: Minor < Major < Critical < Blocker Refactor Edits the code with insignificant behavior changes, is never user facing
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants