Tcl Source Code

View Ticket
Login
EuroTcl/OpenACS 11 - 12 JULY 2024, VIENNA
Ticket UUID: ee4d701bb3e0d0351261bfb25b87c3ac206b86cc
Title: append.test strangely fails with -singleproc 1 (but not with 0), if it compare utf32string representations (on "constructed" smiley)
Type: Bug Version: 8.7 only
Submitter: sebres Created on: 2024-05-23 20:46:38
Subsystem: 16. Commands A-H Assigned To: nobody
Priority: 5 Medium Severity: Minor
Status: Closed Last Modified: 2024-05-27 11:57:45
Resolution: Duplicate Closed By: sebres
    Closed on: 2024-05-27 11:57:45
Description:

If one would test append with -singleproc 1, test append-3.10 fails, however it shows the same internal representation.

Also testing of append-3.10 solely doesn't fail, however by match append-3.* it does.
By an attempt to debug it, I could reduce the failing command to exactly 2 tests:

./tcltest.sh -file 'append.test' -singleproc 1 -match 'append-3.6 append-3.10' -verbose tp

(again, without -singleproc it'd not fail at all)

Strange is, if I add small output for debug to tcltest::CompareStrings, (line 1737):

puts "***[tcl::unsupported::representation $expected]\n***[tcl::unsupported::representation $actual]\n***[expr {$expected eq $actual}]***"

and test it with above-mentioned command, I see:

...
append.test
---- append-3.6 start
***value is a pure string with a refcount of 10, object pointer at 0xd5ad60, string representation "😂"
***value is a utf32string with a refcount of 6, object pointer at 0xd62238, internal representation 0x38a2898:0x0, no string representation
***1***
++++ append-3.6 PASSED
---- append-3.10 start
***value is a utf32string with a refcount of 8, object pointer at 0xd61db8, internal representation 0x38a0990:0x0, string representation "😂"
***value is a utf32string with a refcount of 6, object pointer at 0xd62238, internal representation 0x38a2898:0x0, no string representation
***0***

==== append-3.10 append surrogates FAILED
==== Contents of test case:

    set x \uD83D
    string range $x 0 end
    append x \uDE02

---- Result was:
\U0001F602
---- Result should have been (exact matching):
\U0001F602
==== append-3.10 FAILED

(so there is no string representation in the 2nd object in both cases, but one succeeds, however another doesn't)

Trying to rewrite the test to a script to find the heisenbug, became confused still more - it changes the result vice versa (now in 3.6 it is not equal, but in 3.10 it is:

  # 3.6:
  set x \uDE02
  puts 3.6\t[expr {[set x \uD83D$x] eq "\uD83D\uDE02"}]
  # 3.10:
  set x \uD83D
  string range $x 0 end
  puts 3.10\t[expr {[append x \uDE02] eq [string range \uD83D\uDE02 0 end]}]

so it results to:

  3.6     0
  3.10    1

Weird.

Can someone (familiar with the new unicode or utf) take a closer look here, please.

User Comments: sebres added on 2024-05-27 11:57:45:

Indeed, then let's avoid duplicates.


jan.nijtmans added on 2024-05-24 19:34:30:

This is probably a duplicate of [69afa8538699ee84b3c55cbeed0907c4b4e7556b]


sebres added on 2024-05-24 10:15:22:
x64 and linux affected in the same manner.

sebres added on 2024-05-24 07:40:38:
Indeed, 9.0 seems to be not affected. Sorry for confusion.

apnadkarni added on 2024-05-24 06:36:07:
Sergey, you have marked the bug as 8.7+ but do you actually see the failures with 9.0 as well? I can't reproduce your results with current trunk.