Skip to content
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

Enum with 2 items of the same name crash the engine #70665

Closed
whiteshampoo opened this issue Dec 28, 2022 · 5 comments · Fixed by #71329
Closed

Enum with 2 items of the same name crash the engine #70665

whiteshampoo opened this issue Dec 28, 2022 · 5 comments · Fixed by #71329

Comments

@whiteshampoo
Copy link

whiteshampoo commented Dec 28, 2022

Godot version

4.0 beta 10

System information

Windows 10

Issue description

Godot crashes when i accidently name 2 items in an enum the same

EDIT:
The editor freeze for some seconds, then both editor- and console-window dissapear

Steps to reproduce

Write

enum {
    A,
}

and then add a second line with another A:

enum {
    A,
    A # <- crash
}

Does not always immediatly happen if i copy&paste items.
Does not happen when i change the script in another editor and open the script in Godot.

Minimal reproduction project

enum.zip

@KoBeWi
Copy link
Member

KoBeWi commented Dec 28, 2022

Looks more like a freeze. There is no stack trace.

@whiteshampoo
Copy link
Author

here it freezes for some seconds and then crashes.
(crash = editor-window and console-window dissapear)

@KoBeWi
Copy link
Member

KoBeWi commented Dec 28, 2022

OK here's stack from a debugger (part of it)

__chkstk() Line 109 (d:\a\_work\1\s\src\vctools\crt\vcstartup\src\misc\amd64\chkstk.asm:109)
GDScriptAnalyzer::resolve_class_inheritance(GDScriptParser::ClassNode * p_class, const GDScriptParser::Node * p_source) Line 240 (c:\godot_source\modules\gdscript\gdscript_analyzer.cpp:240)
GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode * p_class, int p_index, const GDScriptParser::Node * p_source) Line 745 (c:\godot_source\modules\gdscript\gdscript_analyzer.cpp:745)
GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode * p_class, StringName p_name, const GDScriptParser::Node * p_source) Line 695 (c:\godot_source\modules\gdscript\gdscript_analyzer.cpp:695)
GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode * p_class, int p_index, const GDScriptParser::Node * p_source) Line 1002 (c:\godot_source\modules\gdscript\gdscript_analyzer.cpp:1002)
GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode * p_class, StringName p_name, const GDScriptParser::Node * p_source) Line 695 (c:\godot_source\modules\gdscript\gdscript_analyzer.cpp:695)
GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode * p_class, int p_index, const GDScriptParser::Node * p_source) Line 1002 (c:\godot_source\modules\gdscript\gdscript_analyzer.cpp:1002)
GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode * p_class, StringName p_name, const GDScriptParser::Node * p_source) Line 695 (c:\godot_source\modules\gdscript\gdscript_analyzer.cpp:695)
GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode * p_class, int p_index, const GDScriptParser::Node * p_source) Line 1002 (c:\godot_source\modules\gdscript\gdscript_analyzer.cpp:1002)
GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode * p_class, StringName p_name, const GDScriptParser::Node * p_source) Line 695 (c:\godot_source\modules\gdscript\gdscript_analyzer.cpp:695)
GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode * p_class, int p_index, const GDScriptParser::Node * p_source) Line 1002 (c:\godot_source\modules\gdscript\gdscript_analyzer.cpp:1002)
GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode * p_class, StringName p_name, const GDScriptParser::Node * p_source) Line 695 (c:\godot_source\modules\gdscript\gdscript_analyzer.cpp:695)
GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode * p_class, int p_index, const GDScriptParser::Node * p_source) Line 1002 (c:\godot_source\modules\gdscript\gdscript_analyzer.cpp:1002)
GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode * p_class, StringName p_name, const GDScriptParser::Node * p_source) Line 695 (c:\godot_source\modules\gdscript\gdscript_analyzer.cpp:695)
GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode * p_class, int p_index, const GDScriptParser::Node * p_source) Line 1002 (c:\godot_source\modules\gdscript\gdscript_analyzer.cpp:1002)
GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode * p_class, StringName p_name, const GDScriptParser::Node * p_source) Line 695 (c:\godot_source\modules\gdscript\gdscript_analyzer.cpp:695)
GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode * p_class, int p_index, const GDScriptParser::Node * p_source) Line 1002 (c:\godot_source\modules\gdscript\gdscript_analyzer.cpp:1002)
GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode * p_class, StringName p_name, const GDScriptParser::Node * p_source) Line 695 (c:\godot_source\modules\gdscript\gdscript_analyzer.cpp:695)
GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode * p_class, int p_index, const GDScriptParser::Node * p_source) Line 1002 (c:\godot_source\modules\gdscript\gdscript_analyzer.cpp:1002)
GDScriptAnalyzer::resolve_class_member(GDScriptParser::ClassNode * p_class, StringName p_name, const GDScriptParser::Node * p_source) Line 695 (c:\godot_source\modules\gdscript\gdscript_analyzer.cpp:695)

Looks like infinite recursion.

@essial
Copy link

essial commented Dec 28, 2022

Reproduced in latest dev build. It works sometimes, sometimes it crashes.

@KoBeWi
Copy link
Member

KoBeWi commented Dec 28, 2022

For me it always crashes when I

  1. Paste this code
enum {
    A,
    A # <- crash
}
  1. Remove the whole A # <- crash line
  2. Add new line under A,
  3. Retype A with leading tab
    godot windows editor dev x86_64_PLrfPOsl9v

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
4 participants