Follow-up Comment #31, bug #64421 (project groff):
Hi Peter,
I instrumented _mom_ with the following diff.
diff --git a/contrib/mom/om.tmac b/contrib/mom/om.tmac
index b0fd1ef55..2a34ba0f2 100644
--- a/contrib/mom/om.tmac
+++ b/contrib/mom/om.tmac
@@ -1871,11 +1871,13 @@ end
\# as a macro.
\#
.MAC COLOR END
+. tm GBR: COLOR: $1=\\$1, .u=\\n[.u]
. ie \\n[.u]=1 \{\
\c
\\*[\\$1]\c
. \}
-. el \\*[\\$1]
+. el \X'x GBR COLOR: debug marker 1 $1=\\$1
\\\\*[default]=\\*[default]'\\*[\\$1]\X'x GBR COLOR: debug marker 2'
+.\" device x GBR COLOR: debug marker 2
.END
\#
\# NEWCOLOR
@@ -2854,7 +2856,10 @@ end
. di NULL
. if \\n[#NUM_ARGS]>=1 .RULE_WEIGHT \\*[$RL_WEIGHT]
. di
+. device x GBR DRH: debug marker 1
. COLOR \\*[$RL_COLOR]
+. device x GBR DRH: debug marker 2
+.\" device x GBR debug marker 2
. ie \\n[#NUM_ARGS]=0 \{\
. ie \\n[#INDENT_ACTIVE] \{\
. nr #RESTORE_L_LENGTH \\n[.l]
I ran "./build/test-groff -Z -m om -T pdf", pasted in all but the last of
Günther's original reproducer except for the last line, then, typed the last
(".DRH") by hand; that's where all the trouble seems to come in.
Here's (the end of) what I got with the buggy, `-flto=auto` version.
.DRH
GBR: COLOR: $1=default, .u=0
V78000
H81000
V78000
H81000
x X x GBR DRH: debug marker 1
V78000
H81000
x X x GBR COLOR: debug marker 1 $1=default \*[default]=black
tblack
V78000
H106992
x X x GBR COLOR: debug marker 2
n13571 0
V91571
H81000
V91571
H81000
x X x GBR DRH: debug marker 2
Dt 500 0
H81250
v250
Dl 433000 0
V91321
Dt 0 0
n13571 0
Here's what I get with a "good" _troff_, "groff -M ./contrib/mom -Z -m om -T
pdf".
.DRH
GBR: COLOR: $1=black, .u=0
V78000
H81000
V78000
H81000
x X x GBR DRH: debug marker 1
V78000
H81000
x X x GBR COLOR: debug marker 1 $1=black \*[default]=black
V78000
H81000
mr 0 0 0
x X x GBR COLOR: debug marker 2
n13571 0
V91571
H81000
V91571
H81000
x X x GBR DRH: debug marker 2
Dt 500 0
H81250
v250
Dl 433000 0
V91321
Dt 0 0
n13571 0
Here's a diff.
$ diff -u GOOD BAD
--- GOOD 2023-09-05 23:01:56.074166418 -0500
+++ BAD 2023-09-05 23:02:09.510125214 -0500
@@ -1,5 +1,5 @@
.DRH
-GBR: COLOR: $1=black, .u=0
+GBR: COLOR: $1=default, .u=0
V78000
H81000
V78000
@@ -7,10 +7,10 @@
x X x GBR DRH: debug marker 1
V78000
H81000
-x X x GBR COLOR: debug marker 1 $1=black \*[default]=black
+x X x GBR COLOR: debug marker 1 $1=default \*[default]=black
+tblack
V78000
-H81000
-mr 0 0 0
+H106992
x X x GBR COLOR: debug marker 2
n13571 0
V91571
The really suspicious thing here is how the `COLOR` macro is getting passed a
"black" argument in one case and a "default" one in the other, with only
link-time optimization making the difference.
I double checked and `DRH` definitely does not think it is getting passed any
arguments.
@@ -2840,6 +2842,7 @@ end
\# rule), the rule weight is the one set by RULE_WEIGHT.
\#
.MAC DRH END
+. device x GBR DRH: args: $1=\\$1, $2=\\$2, $3=\\$3, $4=\\$4
. GRAPHICAL_OBJ
. ds $RL_WEIGHT \\$1
. ds $RL_INDENT \\$2
(I could just have easily used `tm` here instead of the excessively clever
`device x` request. I was getting tired and copy-and-paste-happy.)
So the quest now is to see how the string `$RL_COLOR` is getting initialized.
Checkpointing here. Might go to bed soon.
_______________________________________________________
Reply to this item at:
<https://savannah.gnu.org/bugs/?64421>
_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/