[PATCH] fortran: [PR53800] Wrong copy-in/out with CLASS array to assumed-shape TYPE
Jerry D <[email protected]> Thu, 30 Jul 2026 10:21:57 -0700
| Newsgroups | gmane.comp.gcc.patches,gmane.comp.gcc.fortran |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format.
--------------gKFaMwsLbdJZjAhbZdKN0yJZ
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
See the attached patch.
As stated in the PR we were missing the stride multiplier (ie span)
I will note as a useful tool: I had an initial patch for this but wanted to
exercise it. I prompted Claude Pro Opus 5 to create numerous variations on the
original test case provided by Tobias Burnus in the original report. The result
was 25 to 30 variations which were helpful in identifying code paths I would not
have otherwise found. I am not using those test cases here.
I flagged out this one to work on as it has been around a long time and we were
giving wrong results without any idea it was happening.
I also wanted to mention that the fortran standardese is difficult to interpret
but I think I got this right.
Regression tested on x86_64.
OK for mainline?
Comments appreciated.
Regards,
Jerry
---
fortran: [PR53800] Wrong copy-in/out with CLASS array to assumed-shape TYPE
A CLASS array actual passed to a plain assumed-shape derived-type dummy
was always copied in and out, so pointers associated with the dummy went
stale on return. F2023 15.5.2.5 paragraph 9 requires the dummy to be
associated with the actual's storage when it has the TARGET attribute and
lacks CONTIGUOUS and VALUE; paragraph 8 leaves every other case free to
use a copy. Pass such a dummy by reference and address its elements with
the descriptor's runtime span.
PR fortran/53800
gcc/fortran/ChangeLog:
* trans-array.cc (need_span): New function.
(gfc_get_array_span): Read the span from the saved descriptor of a
span-array dummy, but not for a sub-array reached through a
component.
(gfc_conv_scalarized_array_ref): Use need_span.
(gfc_conv_array_ref): Likewise.
(build_array_ref): Default DECL to DESC for a span-array decl.
* trans-decl.cc (gfc_build_dummy_array_decl): Mark a TARGET
assumed-shape derived-type dummy as needing runtime span
addressing, unless it is repacked.
* trans-expr.cc (class_actual_aliases_type_dummy): New function.
(gfc_class_array_data_assign): Also copy the span field.
(gfc_conv_procedure_call): Use class_actual_aliases_type_dummy to
skip copy-in/copy-out for both the class array reference and the
class array function actual argument.
* trans.cc (get_array_span): Read the span from the dummy's saved
descriptor for span-array decls.
* trans.h (struct lang_decl): Add span_array bitfield.
(GFC_DECL_SPAN_ARRAY_P): New macro.
(GFC_DECL_GET_SPAN_ARRAY_P): New macro.
gcc/testsuite/ChangeLog:
* gfortran.dg/class_to_type_5.f90: New test.
* gfortran.dg/class_to_type_6.f90: New test.
--------------gKFaMwsLbdJZjAhbZdKN0yJZ
Content-Type: text/x-patch; charset=UTF-8; name="pr53800-submit.diff"
Content-Disposition: attachment; filename="pr53800-submit.diff"
Content-Transfer-Encoding: base64
Y29tbWl0IGMzMWE0NGU0ZTgzMWIxNmY1YjUwOWYyOGQ3OTgxNGM4MmNlODk5MWIKQXV0aG9y
OiBKZXJyeSBEZUxpc2xlIDxqdmRlbGlzbGVAZ2NjLmdudS5vcmc+CkRhdGU6ICAgU2F0IEp1
bCAyNSAwOTozNzoxOCAyMDI2IC0wNzAwCgogICAgZm9ydHJhbjogW1BSNTM4MDBdIFdyb25n
IGNvcHktaW4vb3V0IHdpdGggQ0xBU1MgYXJyYXkgdG8gYXNzdW1lZC1zaGFwZSBUWVBFCiAg
ICAKICAgIEEgQ0xBU1MgYXJyYXkgYWN0dWFsIHBhc3NlZCB0byBhIHBsYWluIGFzc3VtZWQt
c2hhcGUgZGVyaXZlZC10eXBlIGR1bW15CiAgICB3YXMgYWx3YXlzIGNvcGllZCBpbiBhbmQg
b3V0LCBzbyBwb2ludGVycyBhc3NvY2lhdGVkIHdpdGggdGhlIGR1bW15IHdlbnQKICAgIHN0
YWxlIG9uIHJldHVybi4gIEYyMDIzIDE1LjUuMi41IHBhcmFncmFwaCA5IHJlcXVpcmVzIHRo
ZSBkdW1teSB0byBiZQogICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBhY3R1YWwncyBzdG9yYWdl
IHdoZW4gaXQgaGFzIHRoZSBUQVJHRVQgYXR0cmlidXRlIGFuZAogICAgbGFja3MgQ09OVElH
VU9VUyBhbmQgVkFMVUU7IHBhcmFncmFwaCA4IGxlYXZlcyBldmVyeSBvdGhlciBjYXNlIGZy
ZWUgdG8KICAgIHVzZSBhIGNvcHkuICBQYXNzIHN1Y2ggYSBkdW1teSBieSByZWZlcmVuY2Ug
YW5kIGFkZHJlc3MgaXRzIGVsZW1lbnRzIHdpdGgKICAgIHRoZSBkZXNjcmlwdG9yJ3MgcnVu
dGltZSBzcGFuLgogICAgCiAgICAgICAgICAgIFBSIGZvcnRyYW4vNTM4MDAKICAgIAogICAg
Z2NjL2ZvcnRyYW4vQ2hhbmdlTG9nOgogICAgCiAgICAgICAgICAgICogdHJhbnMtYXJyYXku
Y2MgKG5lZWRfc3Bhbik6IE5ldyBmdW5jdGlvbi4KICAgICAgICAgICAgKGdmY19nZXRfYXJy
YXlfc3Bhbik6IFJlYWQgdGhlIHNwYW4gZnJvbSB0aGUgc2F2ZWQgZGVzY3JpcHRvciBvZiBh
CiAgICAgICAgICAgIHNwYW4tYXJyYXkgZHVtbXksIGJ1dCBub3QgZm9yIGEgc3ViLWFycmF5
IHJlYWNoZWQgdGhyb3VnaCBhCiAgICAgICAgICAgIGNvbXBvbmVudC4KICAgICAgICAgICAg
KGdmY19jb252X3NjYWxhcml6ZWRfYXJyYXlfcmVmKTogVXNlIG5lZWRfc3Bhbi4KICAgICAg
ICAgICAgKGdmY19jb252X2FycmF5X3JlZik6IExpa2V3aXNlLgogICAgICAgICAgICAoYnVp
bGRfYXJyYXlfcmVmKTogRGVmYXVsdCBERUNMIHRvIERFU0MgZm9yIGEgc3Bhbi1hcnJheSBk
ZWNsLgogICAgICAgICAgICAqIHRyYW5zLWRlY2wuY2MgKGdmY19idWlsZF9kdW1teV9hcnJh
eV9kZWNsKTogTWFyayBhIFRBUkdFVAogICAgICAgICAgICBhc3N1bWVkLXNoYXBlIGRlcml2
ZWQtdHlwZSBkdW1teSBhcyBuZWVkaW5nIHJ1bnRpbWUgc3BhbgogICAgICAgICAgICBhZGRy
ZXNzaW5nLCB1bmxlc3MgaXQgaXMgcmVwYWNrZWQuCiAgICAgICAgICAgICogdHJhbnMtZXhw
ci5jYyAoY2xhc3NfYWN0dWFsX2FsaWFzZXNfdHlwZV9kdW1teSk6IE5ldyBmdW5jdGlvbi4K
ICAgICAgICAgICAgKGdmY19jbGFzc19hcnJheV9kYXRhX2Fzc2lnbik6IEFsc28gY29weSB0
aGUgc3BhbiBmaWVsZC4KICAgICAgICAgICAgKGdmY19jb252X3Byb2NlZHVyZV9jYWxsKTog
VXNlIGNsYXNzX2FjdHVhbF9hbGlhc2VzX3R5cGVfZHVtbXkgdG8KICAgICAgICAgICAgc2tp
cCBjb3B5LWluL2NvcHktb3V0IGZvciBib3RoIHRoZSBjbGFzcyBhcnJheSByZWZlcmVuY2Ug
YW5kIHRoZQogICAgICAgICAgICBjbGFzcyBhcnJheSBmdW5jdGlvbiBhY3R1YWwgYXJndW1l
bnQuCiAgICAgICAgICAgICogdHJhbnMuY2MgKGdldF9hcnJheV9zcGFuKTogUmVhZCB0aGUg
c3BhbiBmcm9tIHRoZSBkdW1teSdzIHNhdmVkCiAgICAgICAgICAgIGRlc2NyaXB0b3IgZm9y
IHNwYW4tYXJyYXkgZGVjbHMuCiAgICAgICAgICAgICogdHJhbnMuaCAoc3RydWN0IGxhbmdf
ZGVjbCk6IEFkZCBzcGFuX2FycmF5IGJpdGZpZWxkLgogICAgICAgICAgICAoR0ZDX0RFQ0xf
U1BBTl9BUlJBWV9QKTogTmV3IG1hY3JvLgogICAgICAgICAgICAoR0ZDX0RFQ0xfR0VUX1NQ
QU5fQVJSQVlfUCk6IE5ldyBtYWNyby4KICAgIAogICAgZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VM
b2c6CiAgICAKICAgICAgICAgICAgKiBnZm9ydHJhbi5kZy9jbGFzc190b190eXBlXzUuZjkw
OiBOZXcgdGVzdC4KICAgICAgICAgICAgKiBnZm9ydHJhbi5kZy9jbGFzc190b190eXBlXzYu
ZjkwOiBOZXcgdGVzdC4KCmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi90cmFucy1hcnJheS5j
YyBiL2djYy9mb3J0cmFuL3RyYW5zLWFycmF5LmNjCmluZGV4IGNmN2VkZGY2ZTFkLi4wZGFh
M2YyZGRhZCAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuY2MKKysrIGIv
Z2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuY2MKQEAgLTQ5MCw2ICs0OTAsMTkgQEAgaXNfcG9p
bnRlcl9hcnJheSAodHJlZSBleHByKQogfQogCiAKKy8qIEhlbHBlciBmdW5jdG9uIHRvIGlk
ZW50aWZ5IHdoZW4gc3BhbiBpcyBuZWVkZWQuICAqLworCitzdGF0aWMgYm9vbAorbmVlZF9z
cGFuICh0cmVlIGV4cHIpCit7CisgIGlmIChleHByID09IE5VTExfVFJFRSB8fCAhVkFSX1Ag
KGV4cHIpKQorICAgIHJldHVybiBmYWxzZTsKKworICByZXR1cm4gR0ZDX0FSUkFZX1RZUEVf
UCAoVFJFRV9UWVBFIChleHByKSkKKwkgJiYgR0ZDX0RFQ0xfR0VUX1NQQU5fQVJSQVlfUCAo
ZXhwcik7Cit9CisKKwogLyogSWYgdGhlIHN5bWJvbCBvciBleHByZXNzaW9uIHJlZmVyZW5j
ZSBhIENGSSBkZXNjcmlwdG9yLCByZXR1cm4gdGhlCiAgICBwb2ludGVyIHRvIHRoZSBjb252
ZXJ0ZWQgZ2ZjIGRlc2NyaXB0b3IuIElmIGFuIGFycmF5IHJlZmVyZW5jZSBpcwogICAgcHJl
c2VudCBhcyB0aGUgbGFzdCBhcmd1bWVudCwgY2hlY2sgdGhhdCBpdCBpcyB0aGUgb25lIGFw
cGxpZWQgdG8KQEAgLTU4OCw2ICs2MDEsMjkgQEAgZ2ZjX2dldF9hcnJheV9zcGFuICh0cmVl
IGRlc2MsIGdmY19leHByICpleHByKQogICAgIC8qIEhhdmluZyBlc2NhcGVkIHRoZSBhYm92
ZSwgdGhpcyBjYW4gb25seSBiZSBhIGNsYXNzIGFycmF5IGR1bW15LiAgKi8KICAgICB0bXAg
PSBjbGFzc19hcnJheV9lbGVtZW50X3NpemUgKHN5bS0+YmFja2VuZF9kZWNsLAogCQkJCSAg
ICBVTkxJTUlURURfUE9MWSAoc3ltKSk7CisgIGVsc2UgaWYgKHN5bSAmJiBzeW0tPmJhY2tl
bmRfZGVjbAorCSAgICYmIEdGQ19ERUNMX0dFVF9TUEFOX0FSUkFZX1AgKHN5bS0+YmFja2Vu
ZF9kZWNsKQorCSAgICYmIChleHByLT5yZWYgPT0gTlVMTAorCSAgICAgICB8fCAoZXhwci0+
cmVmLT50eXBlID09IFJFRl9BUlJBWSAmJiBleHByLT5yZWYtPm5leHQgPT0gTlVMTCkpKQor
ICAgIHsKKyAgICAgIC8qIEEgYXNzdW1lZC1zaGFwZSBkZXJpdmVkLXR5cGUgZHVtbXkgcmUt
cGFzc2VkIHRvIGFub3RoZXIKKwkgcHJvY2VkdXJlOyByZWFkIGl0cyBydW50aW1lIHNwYW4g
ZnJvbSB0aGUgc2F2ZWQgZGVzY3JpcHRvciByYXRoZXIKKwkgdGhhbiB1c2luZyB0aGUgY29t
cGlsZS10aW1lIGVsZW1lbnQgc2l6ZS4gIFRoZSBzcGFuIGFwcGxpZXMgdG8gdGhlCisJIGR1
bW15IGl0c2VsZiwgbm90IHRvIGEgc3ViLWFycmF5IHJlYWNoZWQgdGhyb3VnaCBhIGNvbXBv
bmVudC4gICovCisgICAgICB0cmVlIHNhdmVkX2Rlc2MgPSBHRkNfREVDTF9TQVZFRF9ERVND
UklQVE9SIChzeW0tPmJhY2tlbmRfZGVjbCk7CisgICAgICBpZiAoUE9JTlRFUl9UWVBFX1Ag
KFRSRUVfVFlQRSAoc2F2ZWRfZGVzYykpKQorCXNhdmVkX2Rlc2MgPSBidWlsZF9mb2xkX2lu
ZGlyZWN0X3JlZl9sb2MgKGlucHV0X2xvY2F0aW9uLCBzYXZlZF9kZXNjKTsKKyAgICAgIHRt
cCA9IGdmY19jb252X2Rlc2NyaXB0b3Jfc3Bhbl9nZXQgKHNhdmVkX2Rlc2MpOworCisgICAg
ICAvKiBBbiBhYnNlbnQgb3B0aW9uYWwgZHVtbXkgaGFzIG5vIHZhbGlkIHNhdmVkIGRlc2Ny
aXB0b3IgdG8gcmVhZDsKKwkgYXZvaWQgZGVyZWZlcmVuY2luZyBpdCBhbmQgZmFsbCBiYWNr
IHRvIHRoZSBzdGF0aWMgZWxlbWVudCBzaXplLiAqLworICAgICAgaWYgKHN5bS0+YXR0ci5k
dW1teSAmJiBzeW0tPmF0dHIub3B0aW9uYWwpCisJdG1wID0gYnVpbGQzX2xvYyAoaW5wdXRf
bG9jYXRpb24sIENPTkRfRVhQUiwgVFJFRV9UWVBFICh0bXApLAorCQkJICAgZ2ZjX2NvbnZf
ZXhwcl9wcmVzZW50IChzeW0pLCB0bXAsCisJCQkgICBmb2xkX2NvbnZlcnQgKFRSRUVfVFlQ
RSAodG1wKSwKKwkJCQkJIFRZUEVfU0laRV9VTklUICgKKwkJCQkJICAgZ2ZjX2dldF9lbGVt
ZW50X3R5cGUgKFRSRUVfVFlQRSAoZGVzYykpKSkpOworICAgIH0KICAgZWxzZQogICAgIHsK
ICAgICAgIC8qIElmIG5vbmUgb2YgdGhlIGZhbmN5IHN0dWZmIHdvcmtzLCB0aGUgc3BhbiBp
cyB0aGUgZWxlbWVudApAQCAtMzk4MCw2ICs0MDE2LDcgQEAgZ2ZjX2NvbnZfc2NhbGFyaXpl
ZF9hcnJheV9yZWYgKGdmY19zZSAqIHNlLCBnZmNfYXJyYXlfcmVmICogYXIsCiAgICAgIHRo
ZSBkZXNjcmlwdG9yLCBtYXJrIHRoZSByZXN1bHRpbmcgdmFyaWFibGUgZGVjbCBhbmQgcGFz
cyBpdCB0bwogICAgICBnZmNfYnVpbGRfYXJyYXlfcmVmLiAgKi8KICAgaWYgKGlzX3BvaW50
ZXJfYXJyYXkgKGluZm8tPmRlc2NyaXB0b3IpCisgICAgICB8fCBuZWVkX3NwYW4gKGluZm8t
PmRlc2NyaXB0b3IpCiAgICAgICB8fCAoZXhwciAmJiBleHByLT50cy5kZWZlcnJlZCAmJiBp
bmZvLT5kZXNjcmlwdG9yCiAJICAmJiBHRkNfREVTQ1JJUFRPUl9UWVBFX1AgKFRSRUVfVFlQ
RSAoaW5mby0+ZGVzY3JpcHRvcikpKSkKICAgICB7CkBAIC00MDY2LDYgKzQxMDMsMTMgQEAg
YnVpbGRfYXJyYXlfcmVmICh0cmVlIGRlc2MsIHRyZWUgb2Zmc2V0LCB0cmVlIGRlY2wsIHRy
ZWUgdnB0cikKIAl9CiAgICAgfQogCisgIC8qIEZhbGwgYmFjayB0byBERVNDIGl0c2VsZiBz
byBnZXRfYXJyYXlfc3BhbiBjYW4gcmVjb2duaXplIGEKKyAgICAgc3Bhbl9hcnJheS1tYXJr
ZWQgZHVtbXkgcmUtcGFzc2VkIGFzIGEgc2VjdGlvbiBhY3R1YWwgYXJndW1lbnQuICAqLwor
ICBpZiAoZGVjbCA9PSBOVUxMX1RSRUUKKyAgICAgICYmIChWQVJfUCAoZGVzYykgfHwgVFJF
RV9DT0RFIChkZXNjKSA9PSBQQVJNX0RFQ0wpCisgICAgICAmJiBHRkNfREVDTF9HRVRfU1BB
Tl9BUlJBWV9QIChkZXNjKSkKKyAgICBkZWNsID0gZGVzYzsKKwogICB0bXAgPSBnZmNfY29u
dl9hcnJheV9kYXRhIChkZXNjKTsKICAgdG1wID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWZf
bG9jIChpbnB1dF9sb2NhdGlvbiwgdG1wKTsKICAgdG1wID0gZ2ZjX2J1aWxkX2FycmF5X3Jl
ZiAodG1wLCBvZmZzZXQsIGRlY2wsCkBAIC00MjMyLDcgKzQyNzYsNyBAQCBnZmNfY29udl9h
cnJheV9yZWYgKGdmY19zZSAqIHNlLCBnZmNfYXJyYXlfcmVmICogYXIsIGdmY19leHByICpl
eHByLAogICBpZiAoZ2V0X0NGSV9kZXNjIChzeW0sIGV4cHIsICZkZWNsLCBhcikpCiAgICAg
ZGVjbCA9IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAoaW5wdXRfbG9jYXRpb24sIGRl
Y2wpOwogICBpZiAoIWV4cHItPnRzLmRlZmVycmVkICYmICFzeW0tPmF0dHIuY29kaW1lbnNp
b24KLSAgICAgICYmIGlzX3BvaW50ZXJfYXJyYXkgKHNlLT5leHByKSkKKyAgICAgICYmIChp
c19wb2ludGVyX2FycmF5IChzZS0+ZXhwcikgfHwgbmVlZF9zcGFuIChzZS0+ZXhwcikpKQog
ICAgIHsKICAgICAgIGlmIChUUkVFX0NPREUgKHNlLT5leHByKSA9PSBDT01QT05FTlRfUkVG
KQogCWRlY2wgPSBzZS0+ZXhwcjsKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL3RyYW5zLWRl
Y2wuY2MgYi9nY2MvZm9ydHJhbi90cmFucy1kZWNsLmNjCmluZGV4IDE2MzI1NTZhZTQwLi42
OGUwNmEwM2NjZSAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtZGVjbC5jYworKysg
Yi9nY2MvZm9ydHJhbi90cmFucy1kZWNsLmNjCkBAIC0xNDA4LDYgKzE0MDgsMTUgQEAgZ2Zj
X2J1aWxkX2R1bW15X2FycmF5X2RlY2wgKGdmY19zeW1ib2wgKiBzeW0sIHRyZWUgZHVtbXkp
CiAKICAgR0ZDX0RFQ0xfU0FWRURfREVTQ1JJUFRPUiAoZGVjbCkgPSBkdW1teTsKIAorICAv
KiBNYXJrIGR1bW1pZXMgdGhhdCBtYXkgYWxpYXMgYSBDTEFTUyBhY3R1YWwncyBzdG9yYWdl
IGFuZCBzbyBhZGRyZXNzCisgICAgIGVsZW1lbnRzIGJ5IHRoZSBkZXNjcmlwdG9yJ3MgcnVu
dGltZSBzcGFuLiAgQSByZXBhY2tlZCBkdW1teSBpcyBhCisgICAgIGNvbnRpZ3VvdXMgbG9j
YWwgY29weSwgc28gaXQgaXMgZXhjbHVkZWQuICAqLworICBpZiAoc3ltLT50cy50eXBlID09
IEJUX0RFUklWRUQgJiYgIWlzX2NsYXNzYXJyYXkKKyAgICAgICYmIHN5bS0+YXR0ci50YXJn
ZXQgJiYgIXN5bS0+YXR0ci5wb2ludGVyICYmICFzeW0tPmF0dHIudmFsdWUKKyAgICAgICYm
ICFzeW0tPmF0dHIuY29udGlndW91cyAmJiBhcy0+dHlwZSA9PSBBU19BU1NVTUVEX1NIQVBF
CisgICAgICAmJiBwYWNrZWQgPT0gUEFDS0VEX05PKQorICAgIEdGQ19ERUNMX1NQQU5fQVJS
QVlfUCAoZGVjbCkgPSAxOworCiAgIGlmIChzeW0tPm5zLT5wcm9jX25hbWUtPmJhY2tlbmRf
ZGVjbCA9PSBjdXJyZW50X2Z1bmN0aW9uX2RlY2wKICAgICAgIHx8IHN5bS0+YXR0ci5jb250
YWluZWQpCiAgICAgZ2ZjX2FkZF9kZWNsX3RvX2Z1bmN0aW9uIChkZWNsKTsKZGlmZiAtLWdp
dCBhL2djYy9mb3J0cmFuL3RyYW5zLWV4cHIuY2MgYi9nY2MvZm9ydHJhbi90cmFucy1leHBy
LmNjCmluZGV4IDU4NWQyN2ZhNWEyLi5jOWUxZjY2ZWRiMSAxMDA2NDQKLS0tIGEvZ2NjL2Zv
cnRyYW4vdHJhbnMtZXhwci5jYworKysgYi9nY2MvZm9ydHJhbi90cmFucy1leHByLmNjCkBA
IC04MzcsNiArODM3LDggQEAgZ2ZjX2NsYXNzX2FycmF5X2RhdGFfYXNzaWduIChzdG10Ymxv
Y2tfdCAqYmxvY2ssIHRyZWUgbGhzX2Rlc2MsIHRyZWUgcmhzX2Rlc2MsCiAKICAgZ2ZjX2Nv
bnZfZGVzY3JpcHRvcl9kdHlwZV9zZXQgKGJsb2NrLCBsaHNfZGVzYywKIAkJCQkgZ2ZjX2Nv
bnZfZGVzY3JpcHRvcl9kdHlwZV9nZXQgKHJoc19kZXNjKSk7CisgIGdmY19jb252X2Rlc2Ny
aXB0b3Jfc3Bhbl9zZXQgKGJsb2NrLCBsaHNfZGVzYywKKwkJCQlnZmNfY29udl9kZXNjcmlw
dG9yX3NwYW5fZ2V0IChyaHNfZGVzYykpOwogCiAgIC8qIEFzc2lnbiB0aGUgZGltZW5zaW9u
IGFzIHJhbmdlLXJlZi4gICovCiAgIGxoc19kaW0gPSBnZmNfZ2V0X2Rlc2NyaXB0b3JfZGlt
ZW5zaW9uIChsaHNfZGVzYyk7CkBAIC03MjIyLDYgKzcyMjQsMjYgQEAgY29udl9udWxsX2Fj
dHVhbCAoZ2ZjX3NlICogcGFybXNlLCBnZmNfZXhwciAqIGUsIGdmY19zeW1ib2wgKiBmc3lt
KQogfQogCiAKKy8qIFJldHVybiB0cnVlIGlmIGEgQ0xBU1MgYXJyYXkgYWN0dWFsIG1heSBh
bGlhcyB0aGUgZGVyaXZlZC10eXBlIGR1bW15CisgICBGU1lNIHJhdGhlciB0aGFuIGJlIHBh
c3NlZCB0aHJvdWdoIGEgY29weS1pbi9jb3B5LW91dCB0ZW1wb3JhcnkuICBGMjAyMworICAg
MTUuNS4yLjUgcGFyYWdyYXBoIDkgcmVxdWlyZXMgdGhlIGFzc29jaWF0aW9uIG9ubHkgZm9y
IGEgVEFSR0VUCisgICBhc3N1bWVkLXNoYXBlIGR1bW15IHdpdGhvdXQgQ09OVElHVU9VUyBv
ciBWQUxVRS4gICovCisKK3N0YXRpYyBib29sCitjbGFzc19hY3R1YWxfYWxpYXNlc190eXBl
X2R1bW15IChnZmNfc3ltYm9sICpmc3ltLCBib29sIG5vZGVzY19hcmcpCit7CisgIHJldHVy
biBmc3ltICE9IE5VTEwKKwkgJiYgZnN5bS0+dHMudHlwZSA9PSBCVF9ERVJJVkVECisJICYm
IGZzeW0tPmF0dHIudGFyZ2V0CisJICYmICFmc3ltLT5hdHRyLnBvaW50ZXIKKwkgJiYgIWZz
eW0tPmF0dHIudmFsdWUKKwkgJiYgIWZzeW0tPmF0dHIuY29udGlndW91cworCSAmJiAhbm9k
ZXNjX2FyZworCSAmJiBmc3ltLT5hcyAhPSBOVUxMCisJICYmIGZzeW0tPmFzLT50eXBlID09
IEFTX0FTU1VNRURfU0hBUEU7Cit9CisKKwogLyogR2VuZXJhdGUgY29kZSBmb3IgYSBwcm9j
ZWR1cmUgY2FsbC4gIE5vdGUgY2FuIHJldHVybiBzZS0+cG9zdCAhPSBOVUxMLgogICAgSWYg
c2UtPmRpcmVjdF9ieXJlZiBpcyBzZXQgdGhlbiBzZS0+ZXhwciBjb250YWlucyB0aGUgcmV0
dXJuIHBhcmFtZXRlci4KICAgIFJldHVybiBub256ZXJvLCBpZiB0aGUgY2FsbCBoYXMgYWx0
ZXJuYXRlIHNwZWNpZmllcnMuCkBAIC04MzAxLDIwICs4MzIzLDE5IEBAIGdmY19jb252X3By
b2NlZHVyZV9jYWxsIChnZmNfc2UgKiBzZSwgZ2ZjX3N5bWJvbCAqIHN5bSwKIAkJcGFybXNl
LmV4cHIgPSBlLT5zeW10cmVlLT5uLnN5bS0+YmFja2VuZF9kZWNsOwogCiAJICAgICAgZWxz
ZSBpZiAoZ2ZjX2lzX2NsYXNzX2FycmF5X3JlZiAoZSwgTlVMTCkKLQkJICAgICAgICYmIGZz
eW0gJiYgZnN5bS0+dHMudHlwZSA9PSBCVF9ERVJJVkVEKQorCQkgICAgICAgJiYgZnN5bSAm
JiBmc3ltLT50cy50eXBlID09IEJUX0RFUklWRUQKKwkJICAgICAgICYmICFjbGFzc19hY3R1
YWxfYWxpYXNlc190eXBlX2R1bW15IChmc3ltLCBub2Rlc2NfYXJnKSkKIAkJLyogVGhlIGFj
dHVhbCBhcmd1bWVudCBpcyBhIGNvbXBvbmVudCByZWZlcmVuY2UgdG8gYW4KIAkJICAgYXJy
YXkgb2YgZGVyaXZlZCB0eXBlcy4gIEluIHRoaXMgY2FzZSwgdGhlIGFyZ3VtZW50CiAJCSAg
IGlzIGNvbnZlcnRlZCB0byBhIHRlbXBvcmFyeSwgd2hpY2ggaXMgcGFzc2VkIGFuZCB0aGVu
Ci0JCSAgIHdyaXR0ZW4gYmFjayBhZnRlciB0aGUgcHJvY2VkdXJlIGNhbGwuCi0JCSAgIE9P
UC1UT0RPOiBJbnNlcnQgY29kZSBzbyB0aGF0IGlmIHRoZSBkeW5hbWljIHR5cGUgaXMKLQkJ
ICAgdGhlIHNhbWUgYXMgdGhlIGRlY2xhcmVkIHR5cGUsIGNvcHktaW4vY29weS1vdXQgZG9l
cwotCQkgICBub3Qgb2NjdXIuICAqLworCQkgICB3cml0dGVuIGJhY2sgYWZ0ZXIgdGhlIHBy
b2NlZHVyZSBjYWxsLiAgKi8KIAkJZ2ZjX2NvbnZfc3VicmVmX2FycmF5X2FyZyAoJnBhcm1z
ZSwgZSwgbm9kZXNjX2FyZywKIAkJCQkJICAgZnN5bS0+YXR0ci5pbnRlbnQsCiAJCQkJCSAg
IGZzeW0tPmF0dHIucG9pbnRlcik7CiAKIAkgICAgICBlbHNlIGlmIChnZmNfaXNfY2xhc3Nf
YXJyYXlfZnVuY3Rpb24gKGUpCi0JCSAgICAgICAmJiBmc3ltICYmIGZzeW0tPnRzLnR5cGUg
PT0gQlRfREVSSVZFRCkKKwkJICAgICAgICYmIGZzeW0gJiYgZnN5bS0+dHMudHlwZSA9PSBC
VF9ERVJJVkVECisJCSAgICAgICAmJiAhY2xhc3NfYWN0dWFsX2FsaWFzZXNfdHlwZV9kdW1t
eSAoZnN5bSwgbm9kZXNjX2FyZykpCiAJCS8qIFNlZSBwcmV2aW91cyBjb21tZW50LiAgRm9y
IGZ1bmN0aW9uIGFjdHVhbCBhcmd1bWVudCwKIAkJICAgdGhlIHdyaXRlIG91dCBpcyBub3Qg
bmVlZGVkIHNvIHRoZSBpbnRlbnQgaXMgc2V0IGFzCiAJCSAgIGludGVudCBpbi4gICovCmRp
ZmYgLS1naXQgYS9nY2MvZm9ydHJhbi90cmFucy5jYyBiL2djYy9mb3J0cmFuL3RyYW5zLmNj
CmluZGV4IGNmMzcyNjE2NzNjLi5mZDNkZjcwMmRiYiAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRy
YW4vdHJhbnMuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vdHJhbnMuY2MKQEAgLTQ1NCw2ICs0NTQs
MTcgQEAgZ2V0X2FycmF5X3NwYW4gKHRyZWUgdHlwZSwgdHJlZSBkZWNsKQogCSAgICBkZWNs
ID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWZfbG9jIChpbnB1dF9sb2NhdGlvbiwgZGVjbCk7
CiAJICBzcGFuID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9zcGFuX2dldCAoZGVjbCk7CiAJfQor
ICAgICAgZWxzZSBpZiAoR0ZDX0RFQ0xfR0VUX1NQQU5fQVJSQVlfUCAoZGVjbCkpCisJewor
CSAgLyogVGhlIGRlc2NyaXB0b3IgZm9yIHRoZSBkdW1teSBpcyBzdG9yZWQgaW4gdGhlIHNh
dmVkCisJICAgICBkZXNjcmlwdG9yIG9mIGl0cyBub2Rlc2MgYXJyYXkgZGVjbC4gICovCisJ
ICB0cmVlIHNhdmVkX2Rlc2MgPSBkZWNsOworCSAgaWYgKERFQ0xfTEFOR19TUEVDSUZJQyAo
ZGVjbCkgJiYgR0ZDX0RFQ0xfU0FWRURfREVTQ1JJUFRPUiAoZGVjbCkpCisJICAgIHNhdmVk
X2Rlc2MgPSBHRkNfREVDTF9TQVZFRF9ERVNDUklQVE9SIChkZWNsKTsKKwkgIGlmIChQT0lO
VEVSX1RZUEVfUCAoVFJFRV9UWVBFIChzYXZlZF9kZXNjKSkpCisJICAgIHNhdmVkX2Rlc2Mg
PSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZl9sb2MgKGlucHV0X2xvY2F0aW9uLCBzYXZlZF9k
ZXNjKTsKKwkgIHNwYW4gPSBnZmNfY29udl9kZXNjcmlwdG9yX3NwYW5fZ2V0IChzYXZlZF9k
ZXNjKTsKKwl9CiAgICAgICBlbHNlCiAJc3BhbiA9IE5VTExfVFJFRTsKICAgICB9CmRpZmYg
LS1naXQgYS9nY2MvZm9ydHJhbi90cmFucy5oIGIvZ2NjL2ZvcnRyYW4vdHJhbnMuaAppbmRl
eCA3YjI4ZWNmY2U0Ny4uNDA2M2JiZTcwYzQgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3Ry
YW5zLmgKKysrIGIvZ2NjL2ZvcnRyYW4vdHJhbnMuaApAQCAtMTA3MCw2ICsxMDcwLDcgQEAg
c3RydWN0IEdUWSgoKSkgbGFuZ19kZWNsIHsKICAgdW5zaWduZWQgaW50IHNjYWxhcl9wb2lu
dGVyIDogMTsKICAgdW5zaWduZWQgaW50IHNjYWxhcl90YXJnZXQgOiAxOwogICB1bnNpZ25l
ZCBpbnQgb3B0aW9uYWxfYXJnIDogMTsKKyAgdW5zaWduZWQgaW50IHNwYW5fYXJyYXkgOiAx
OwogfTsKIAogCkBAIC0xMDg3LDEyICsxMDg4LDE2IEBAIHN0cnVjdCBHVFkoKCkpIGxhbmdf
ZGVjbCB7CiAgIChERUNMX0xBTkdfU1BFQ0lGSUMgKG5vZGUpLT5zY2FsYXJfdGFyZ2V0KQog
I2RlZmluZSBHRkNfREVDTF9PUFRJT05BTF9BUkdVTUVOVChub2RlKSBcCiAgIChERUNMX0xB
TkdfU1BFQ0lGSUMgKG5vZGUpLT5vcHRpb25hbF9hcmcpCisjZGVmaW5lIEdGQ19ERUNMX1NQ
QU5fQVJSQVlfUChub2RlKSBcCisgIChERUNMX0xBTkdfU1BFQ0lGSUMgKG5vZGUpLT5zcGFu
X2FycmF5KQogI2RlZmluZSBHRkNfREVDTF9HRVRfU0NBTEFSX0FMTE9DQVRBQkxFKG5vZGUp
IFwKICAgKERFQ0xfTEFOR19TUEVDSUZJQyAobm9kZSkgPyBHRkNfREVDTF9TQ0FMQVJfQUxM
T0NBVEFCTEUgKG5vZGUpIDogMCkKICNkZWZpbmUgR0ZDX0RFQ0xfR0VUX1NDQUxBUl9QT0lO
VEVSKG5vZGUpIFwKICAgKERFQ0xfTEFOR19TUEVDSUZJQyAobm9kZSkgPyBHRkNfREVDTF9T
Q0FMQVJfUE9JTlRFUiAobm9kZSkgOiAwKQogI2RlZmluZSBHRkNfREVDTF9HRVRfU0NBTEFS
X1RBUkdFVChub2RlKSBcCiAgIChERUNMX0xBTkdfU1BFQ0lGSUMgKG5vZGUpID8gR0ZDX0RF
Q0xfU0NBTEFSX1RBUkdFVCAobm9kZSkgOiAwKQorI2RlZmluZSBHRkNfREVDTF9HRVRfU1BB
Tl9BUlJBWV9QKG5vZGUpIFwKKyAgKERFQ0xfTEFOR19TUEVDSUZJQyAobm9kZSkgPyBHRkNf
REVDTF9TUEFOX0FSUkFZX1AgKG5vZGUpIDogMCkKICNkZWZpbmUgR0ZDX0RFQ0xfUEFDS0VE
X0FSUkFZKG5vZGUpIERFQ0xfTEFOR19GTEFHXzAobm9kZSkKICNkZWZpbmUgR0ZDX0RFQ0xf
UEFSVElBTF9QQUNLRURfQVJSQVkobm9kZSkgREVDTF9MQU5HX0ZMQUdfMShub2RlKQogI2Rl
ZmluZSBHRkNfREVDTF9BU1NJR04obm9kZSkgREVDTF9MQU5HX0ZMQUdfMihub2RlKQpkaWZm
IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9jbGFzc190b190eXBlXzUuZjkw
IGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9jbGFzc190b190eXBlXzUuZjkwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hZDI5OWRiNTE0ZAotLS0gL2Rl
di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvY2xhc3NfdG9fdHlwZV81
LmY5MApAQCAtMCwwICsxLDM1IEBACishIHsgZGctZG8gcnVuIH0KKyEgUFIgNTM4MDAKKwor
ISBDaGVjayB0aGF0IGEgQ0xBU1MgYXJyYXkgd2l0aCBhbiBleHRlbmRlZCBkeW5hbWljIHR5
cGUgcGFzc2VkIHRvIGFuCishIGFzc3VtZWQtc2hhcGUgVFlQRSBkdW1teSBhbGlhc2VzIHRo
ZSBvcmlnaW5hbCBzdG9yYWdlLCByYXRoZXIKKyEgdGhhbiBhIGNvcHktaW4vY29weS1vdXQg
dGVtcG9yYXJ5IHRoYXQgZ29lcyBzdGFsZSBhZnRlciByZXR1cm4uCishCishIFJlcG9ydGVk
IGJ5IFRvYmlhcyBCdXJudXMgIDxidXJudXNAZ2NjLmdudS5vcmc+CisKK3Byb2dyYW0gY2xh
c3NfdG9fdHlwZQorICBpbXBsaWNpdCBub25lCisgIHR5cGUgdAorICAgIGludGVnZXIgOjog
aQorICBlbmQgdHlwZSB0CisgIHR5cGUsIGV4dGVuZHModCkgOjogdDIKKyAgICBpbnRlZ2Vy
IDo6IGoKKyAgZW5kIHR5cGUgdDIKKyAgY2xhc3ModCksIHRhcmdldCwgYWxsb2NhdGFibGUg
OjogYSg6LDopCisgIHR5cGUodCksIHBvaW50ZXIgOjogcHRyCisKKyAgYWxsb2NhdGUgKHQy
IDo6IGEoNSw1KSkKKyAgYSg6LDopJWkgPSA1MworICBhKDMsMyklaSA9IDQyCisgIGEoNCw0
KSVpID0gNzQKKworICBjYWxsIGYgKGEpCisgIGlmIChwdHIlaSAvPSA0Mikgc3RvcCAxCisg
IGEoMywzKSVpID0gOTk5CisgIGlmIChwdHIlaSAvPSA5OTkpIHN0b3AgMgorY29udGFpbnMK
KyAgc3Vicm91dGluZSBmKHgpCisgICAgdHlwZSh0KSwgdGFyZ2V0IDo6IHgoOiw6KQorICAg
IHB0ciA9PiB4KDMsMykKKyAgZW5kIHN1YnJvdXRpbmUgZgorZW5kIHByb2dyYW0gY2xhc3Nf
dG9fdHlwZQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9jbGFzc190
b190eXBlXzYuZjkwIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9jbGFzc190b190eXBl
XzYuZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42N2QwMmM2
N2ZiOAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvY2xh
c3NfdG9fdHlwZV82LmY5MApAQCAtMCwwICsxLDkzIEBACishIHsgZGctZG8gcnVuIH0KKyEg
UFI1MzgwMAorCishIEEgQ0xBU1MgYXJyYXkgYWN0dWFsIHBhc3NlZCB0byBhbiBhc3N1bWVk
LXNoYXBlIFRZUEUgZHVtbXkgb25seQorISBhbGlhc2VzIHRoZSBhY3R1YWwncyBzdG9yYWdl
IHdoZW4gdGhlIGR1bW15IGhhcyB0aGUgVEFSR0VUIGF0dHJpYnV0ZS4KKyEKK21vZHVsZSBt
CisgIGltcGxpY2l0IG5vbmUKKyAgdHlwZSA6OiB0CisgICAgaW50ZWdlciA6OiBpCisgIGVu
ZCB0eXBlCisgIHR5cGUsIGV4dGVuZHModCkgOjogdDIKKyAgICBpbnRlZ2VyIDo6IHBhZCg0
KQorICBlbmQgdHlwZQorICB0eXBlIDo6IHUKKyAgICBpbnRlZ2VyIDo6IGsKKyAgZW5kIHR5
cGUKKyAgdHlwZSA6OiBjCisgICAgaW50ZWdlciAgOjogaQorICAgIHR5cGUodSkgIDo6IHN1
YigzKQorICBlbmQgdHlwZQorICB0eXBlLCBleHRlbmRzKGMpIDo6IGMyCisgICAgaW50ZWdl
ciA6OiBwYWQoNCkKKyAgZW5kIHR5cGUKK2NvbnRhaW5zCisgICEgQSBkdW1teSAobm9uLXRh
cmdldCk6IGNvcHktaW4vY29weS1vdXQsCisgIHN1YnJvdXRpbmUgcGxhaW4gKHgpCisgICAg
dHlwZSh0KSA6OiB4KDopCisgICAgaWYgKGFueSAoeCVpIC89IFsxLDIsMyw0LDVdKSkgc3Rv
cCAxCisgICAgY2FsbCBleHBsICh4KQorICAgIGlmIChhbnkgKGNzaGlmdCAoeCVpLCAxKSAv
PSBbMiwzLDQsNSwxXSkpIHN0b3AgMworICAgIGlmIChhbnkgKHBhY2sgKHglaSwgWy50cnVl
LiwuZmFsc2UuLC50cnVlLiwuZmFsc2UuLC50cnVlLl0pICYKKyAgICAgICAgICAgICAvPSBb
MSwzLDVdKSkgc3RvcCA0CisgICAgaWYgKGFueSAocmVzaGFwZSAoeCVpLCBbMSw1XSkgLz0g
cmVzaGFwZSAoWzEsMiwzLDQsNV0sIFsxLDVdKSkpIHN0b3AgNQorICAgIGNhbGwgdG9fY2xh
c3MgKHgpCisgIGVuZCBzdWJyb3V0aW5lCisKKyAgc3Vicm91dGluZSBleHBsICh5KQorICAg
IHR5cGUodCkgOjogeSg1KQorICAgIGlmIChhbnkgKHklaSAvPSBbMSwyLDMsNCw1XSkpIHN0
b3AgMgorICBlbmQgc3Vicm91dGluZQorCisgIHN1YnJvdXRpbmUgdG9fY2xhc3MgKHopCisg
ICAgY2xhc3ModCkgOjogeig6KQorICAgIGlmIChhbnkgKHolaSAvPSBbMSwyLDMsNCw1XSkp
IHN0b3AgNgorICBlbmQgc3Vicm91dGluZQorCisgICEgQSBjb21wb25lbnQgc3ViLWFycmF5
IG9mIGEgc3Bhbi1jYXJyeWluZyBkdW1teSBoYXMgaXRzIG93biBlbGVtZW50CisgICEgc2l6
ZSBhbmQgbXVzdCBub3QgaW5oZXJpdCB0aGUgcGFyZW50J3Mgc3Bhbi4KKyAgc3Vicm91dGlu
ZSBjb21wICh4KQorICAgIHR5cGUoYyksIHRhcmdldCA6OiB4KDopCisgICAgY2FsbCBpbm5l
ciAoeCgyKSVzdWIpCisgIGVuZCBzdWJyb3V0aW5lCisKKyAgc3Vicm91dGluZSBpbm5lciAo
cykKKyAgICB0eXBlKHUpIDo6IHMoOikKKyAgICBpZiAoYW55IChzJWsgLz0gWzIxLDIyLDIz
XSkpIHN0b3AgNworICBlbmQgc3Vicm91dGluZQorZW5kIG1vZHVsZQorCitwcm9ncmFtIGNs
YXNzX3RvX3R5cGVfNgorICB1c2UgbQorICBpbXBsaWNpdCBub25lCisgIGNsYXNzKHQpLCB0
YXJnZXQsIGFsbG9jYXRhYmxlIDo6IGEoOikKKyAgY2xhc3MoYyksIHRhcmdldCwgYWxsb2Nh
dGFibGUgOjogYig6KQorICB0eXBlKHQpLCBwb2ludGVyIDo6IHAKKyAgaW50ZWdlciA6OiBu
CisKKyAgYWxsb2NhdGUgKHQyIDo6IGEoNSkpCisgIGRvIG4gPSAxLCA1CisgICAgYShuKSVp
ID0gbgorICBlbmQgZG8KKyAgY2FsbCBwbGFpbiAoYSkKKworICBhbGxvY2F0ZSAoYzIgOjog
YigzKSkKKyAgZG8gbiA9IDEsIDMKKyAgICBiKG4pJWkgPSAxMCAqIG4KKyAgICBiKG4pJXN1
Yig6KSVrID0gWzEwKm4rMSwgMTAqbisyLCAxMCpuKzNdCisgIGVuZCBkbworICBjYWxsIGNv
bXAgKGIpCisKKyAgISBBIFRBUkdFVCBhc3N1bWVkLXNoYXBlIGR1bW15IHdpdGhvdXQgQ09O
VElHVU9VUyBkb2VzIGFsaWFzLgorICBjYWxsIGFsaWFzZWQgKGEpCisgIGlmIChwJWkgLz0g
Mykgc3RvcCA4CisgIGEoMyklaSA9IDk5OQorICBpZiAocCVpIC89IDk5OSkgc3RvcCA5CisK
K2NvbnRhaW5zCisgIHN1YnJvdXRpbmUgYWxpYXNlZCAoeCkKKyAgICB0eXBlKHQpLCB0YXJn
ZXQgOjogeCg6KQorICAgIHAgPT4geCgzKQorICBlbmQgc3Vicm91dGluZQorZW5kIHByb2dy
YW0K
--------------gKFaMwsLbdJZjAhbZdKN0yJZ--