Skip to content

perf: skip discarded syntax AST rebuild - #257

Open
lm-sousa wants to merge 4 commits into
dumper-polish-offsetof-basefrom
syntax-rebuild-optimization
Open

perf: skip discarded syntax AST rebuild#257
lm-sousa wants to merge 4 commits into
dumper-polish-offsetof-basefrom
syntax-rebuild-optimization

Conversation

@lm-sousa

@lm-sousa lm-sousa commented Sep 4, 2026

Copy link
Copy Markdown
Member

Clava's rebuildAst(false) path validated rewritten source by running clang/clang-dumper and then decoding the complete AST even though the rebuilt tree was immediately discarded.

This adds a diagnostics-only validation path: it invokes the same clang/clang-dumper pipeline, drains stdout without AST decoding, preserves stderr and exit-status handling, and leaves rebuildAst(true) on the full-parse path. The validator also receives the system resource directory required by the current clang setup.

Measured impact: six paired runs show a median execution-time reduction of 11.1% (14.02 s); the mean reduction is 13.2%. The paired 95% confidence interval for the saving is 9.42–23.42 s (p = 0.0018). Full benchmark report.

Verification:

  • gradle --project-dir ClavaWeaver clean installDist
  • git diff --check
  • output-checked Clava-JS suite: 161 passed, 3 skipped (excluding the pre-existing FileIterator failure from unrelated staged Lara changes)

Model: Codex (GPT-5.6-luna).

Keep rebuildAst(true) as the full replacement-tree path, while rebuildAst(false) validates woven sources through clang-dumper without decoding its output into a temporary Clava AST.
Update the diagnostics-only ClangAstDumper construction for the rebased constructor signature.
@sonarqubecloud

sonarqubecloud Bot commented Sep 4, 2026

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 992a85ec4c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".


Standard standard = getStandard(sources, options);
ClangResources clangResources = new ClangResources(this);
var clangFiles = clangResources.getClangFiles(get(ClangAstKeys.LIBC_CXX_MODE));

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Propagate the resolved libc mode to validation

When LIBC_CXX_MODE is SYSTEM (or AUTO resolves to system), clangFiles.builtinIncludes() is empty, but options still carries toDataStore()'s default BUILTIN_AND_LIBC; ClangAstDumper consequently adds -nostdinc and -nostdinc++, so syntax checking rejects otherwise valid files that include system headers. The normal parse path avoids this by setting options to clangFiles.libcMode() immediately after resolving resources; validation needs the same assignment.

Useful? React with 👍 / 👎.

Replace the parallel validateSyntax orchestration chain (abstract method on
CodeParser plus duplicated setup in ParallelCodeParser) with a SYNTAX_ONLY
flag consulted by the existing parse() path, so clang arguments, resources,
parallelism, and error handling have a single source of truth.
ClangAstDumper.validateSyntax now returns the error message directly.
@sonarqubecloud

sonarqubecloud Bot commented Sep 4, 2026

Copy link
Copy Markdown

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