Integrated: 8361494: [IR Framework] Escape too much in replacement of placeholder
Marc Chevalier
mchevalier at openjdk.org
Fri Jul 11 10:48:48 UTC 2025
On Thu, 10 Jul 2025 12:54:55 GMT, Marc Chevalier <mchevalier at openjdk.org> wrote:
> In `RawIRNode::regex`, the call to `String::replaceAll` doesn't quote the replace string.
>
> Meaning that in the IR rule
>
> @IR(failOn = {IRNode.ALLOC_OF, "\\w+"})
>
> The interpreted `\w` is interpreted as a group reference, and we get
>
> java.lang.IllegalArgumentException: Illegal group reference
>
> so we should write instead
>
> @IR(failOn = {IRNode.ALLOC_OF, "\\\\w+"})
>
> To mean the interpreted string `\\w`, to mean an escaped single backslash. Same goes with `$` (used for nested classes).
>
> Since we don't want to refer to groups (and anyway, there are not in `IRNode.IS_REPLACED`), we just quote the replacement string with `java.util.regex.Matcher.quoteReplacement` to make it more usable.
>
> Note that you would still need to write `\$` since the `$` is the end of string regex, and needs to be escaped at the regex level (and not at the string, so it's not `$`, since `$` is not a special character). Before the fix, it should be `\\\$`. Phew! Regexes are bad enough, let's not escape them manually twice!
>
> In `test/hotspot/jtreg/compiler/c2/TestMergeStores.java`, that makes us save 1344 backslashes.
>
> Thanks,
> Marc
This pull request has now been integrated.
Changeset: 76442f39
Author: Marc Chevalier <mchevalier at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/76442f39b9dd583f09a7adebb0fc5f37b6ef88ef
Stats: 242 lines in 3 files changed: 15 ins; 0 del; 227 mod
8361494: [IR Framework] Escape too much in replacement of placeholder
Reviewed-by: mhaessig, chagedorn
-------------
PR: https://git.openjdk.org/jdk/pull/26243
More information about the hotspot-compiler-dev
mailing list