Skip to content

[RELAX] Improve well-formed checker error messages with function names#18791

Draft
guan404ming wants to merge 1 commit intoapache:mainfrom
guan404ming:well-formed-improve-error-messages
Draft

[RELAX] Improve well-formed checker error messages with function names#18791
guan404ming wants to merge 1 commit intoapache:mainfrom
guan404ming:well-formed-improve-error-messages

Conversation

@guan404ming
Copy link
Member

Why

Error messages for duplicate variables across functions lacked context about which functions were involved, making debugging difficult.

How

  • Add a function name map to resolve FunctionNode* to global variable names
  • Include both conflicting function names in duplicate parameter and symbolic var errors

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @guan404ming, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly improves the debugging experience for Relax IR by enhancing the well-formed checker's error messages. Previously, errors related to duplicate variables across functions lacked specific function context. The changes introduce a mechanism to map function pointers to their names and integrate these names into the error messages for duplicate parameters and symbolic variables, providing clearer and more actionable feedback to developers.

Highlights

  • Enhanced error messages for duplicate variables: Error messages for duplicate parameters and symbolic variables now include the names of the conflicting functions, providing clearer context for debugging.
  • Introduced function name mapping: A new internal map (func_name_map_) was added to store function names, allowing the well-formed checker to retrieve and display them in error messages.
  • Added helper function for function names: A FuncName utility method was introduced to consistently format function names for error output.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • 3rdparty/cnpy
    • Added cnpy as a Git submodule.
  • 3rdparty/dmlc-core
    • Added dmlc-core as a Git submodule.
  • 3rdparty/rang
    • Added rang as a Git submodule.
  • 3rdparty/zlib
    • Added zlib as a Git submodule.
  • src/relax/analysis/well_formed.cc
    • Included the <string> header for string manipulation.
    • Populated func_name_map_ with global function names during module visitation.
    • Implemented the FuncName helper method to retrieve formatted function names for error messages.
    • Modified the error message for duplicate parameters to explicitly specify the conflicting function names.
    • Modified the error message for symbolic variables used in different functions to explicitly specify the conflicting function names.
    • Declared func_name_map_ as a new member variable within the WellFormedChecker class.
Activity
  • No activity has occurred on this pull request yet.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@guan404ming guan404ming force-pushed the well-formed-improve-error-messages branch from 6da4c5d to 7bd91b2 Compare February 17, 2026 16:00
Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request improves the error messages in the well-formed checker by including function names when reporting duplicate variable usage across functions. This is a valuable enhancement for debugging. The implementation is straightforward and correct. I have one minor suggestion to optimize a map lookup in an error-reporting path.

Comment on lines 270 to 275
if (param_var_func_map_.count(param) == 1) {
// TODO(relax-team): Complete this error info after we integrate printer
Malformed(Diagnostic::Error(param->span)
<< "Relax variable " << param
<< " is repeatedly used as parameters in function.");
<< "Relax variable " << param << " is used as a parameter in both function "
<< FuncName(param_var_func_map_.at(param)) << " and function "
<< FuncName(cur_visited_func_) << ".");
}
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

To avoid a double lookup in param_var_func_map_, you can use find once and then use the resulting iterator. This is slightly more efficient and a common C++ pattern.

Suggested change
if (param_var_func_map_.count(param) == 1) {
// TODO(relax-team): Complete this error info after we integrate printer
Malformed(Diagnostic::Error(param->span)
<< "Relax variable " << param
<< " is repeatedly used as parameters in function.");
<< "Relax variable " << param << " is used as a parameter in both function "
<< FuncName(param_var_func_map_.at(param)) << " and function "
<< FuncName(cur_visited_func_) << ".");
}
auto it = param_var_func_map_.find(param);
if (it != param_var_func_map_.end()) {
Malformed(Diagnostic::Error(param->span)
<< "Relax variable " << param << " is used as a parameter in both function "
<< FuncName(it->second) << " and function "
<< FuncName(cur_visited_func_) << ".");
}

@guan404ming guan404ming force-pushed the well-formed-improve-error-messages branch 2 times, most recently from 484eeb7 to 8bc1f55 Compare February 17, 2026 16:13
Signed-off-by: Guan-Ming Chiu <guanmingchiu@gmail.com>
@guan404ming guan404ming force-pushed the well-formed-improve-error-messages branch from 8bc1f55 to af9f177 Compare February 17, 2026 16:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant