From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <3e7CHXggKCvQclnkYeZWckkcha.YkiheXWXecWehokqnYasWna.knc@flex--gprocida.bounces.google.com> Received: from mail-vk1-xa4a.google.com (mail-vk1-xa4a.google.com [IPv6:2607:f8b0:4864:20::a4a]) by sourceware.org (Postfix) with ESMTPS id 0BA88385DC11 for ; Fri, 3 Apr 2020 21:54:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 0BA88385DC11 Received: by mail-vk1-xa4a.google.com with SMTP id 193so3586144vkx.0 for ; Fri, 03 Apr 2020 14:54:04 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc :content-transfer-encoding; bh=AEOHdRSvvMUpjXKfeoNw/df2HaYUbjLgRBjXwJvzYAU=; b=PboM0SYfFOTIfJcW70uvyO9aYY9dpFnmM+eZbnJB7qET+fZq4Xz3JzCsJme4fSY1c/ gEF93Y3+iEZGBt1+ylTCJZbLRFWHEkfi8Hiv6qzPK1dmB4EOvXuCRggruNleZtrgajkY 3zfT2OlbekIL5tDeJGgZFQjPDJRvBLdobfa5nj7CwxL5CtNZk7OAwLBR3eMJPD0grBOp zZ2bQrSG7A2zv1Bwdt7rKu3rEKZcPFhzi4Xvg+sAP4t3qiynD2r66nGVUBK/l46dfe0j dhIHtpjfLOwBunlH0YGfMW+NuISvaX6OapfIyY0TkX/nrW+2dQ27P76HsHMMIIZwmq3h Y57w== X-Gm-Message-State: AGi0PuYE3CKYd/6/t28b1airpAdZJ0E2xeliWVYDh5TzRaRpW9haR+Wo JbNqi0gORP3MxlQVDmC82a318e0Eek+Q6L4h0xFNSq7zdrE/g2EcRJ3C1X+C92KAM3hLySX12xC EDKiKZITDGEgoFngrY10i/DoyBH6L6LTyynRTQz52LsDwqP2dz9mL/0W8xmDyiFo9E62c2UI= X-Google-Smtp-Source: APiQypJy8QMXdhJ8zJ5r5oLCF9mFurlw5dZ1+SUzmvPvdek+Vvl7J0stYzeL2pTV6o0oUKOFs0v9v79GFjxO0w== X-Received: by 2002:a1f:3fc8:: with SMTP id m191mr8660391vka.71.1585950843304; Fri, 03 Apr 2020 14:54:03 -0700 (PDT) Date: Fri, 3 Apr 2020 22:53:54 +0100 Message-Id: <20200403215356.186742-1-gprocida@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.26.0.292.g33ef6b2f38-goog Subject: [PATCH 1/2] abidiff: More compact references to prior diffs. From: Giuliano Procida To: libabigail@sourceware.org Cc: dodji@seketeli.org, kernel-team@android.com, gprocida@google.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-34.1 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libabigail@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libabigail mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 Apr 2020 21:54:06 -0000 In both the default and leaf reporting modes, when there is a repeated or circular reference to a type difference of a member variable, some placeholder text is emitted instead. In the leaf reporter: type 'struct S' of 'foo::bar' changed as reported earlier In the default reporter, this spans two lines: type of 'S foo::bar' changed: details were reported earlier This patch changes the latter to the more compact: type of 'S foo::bar' changed, as reported earlier More generally, this patch makes the punctuation of such placeholder text more consistent with a comma separating the phrases in all cases. It doesn't attempt to reconcile the different formatting of member variable declarations between the two modes. * src/abg-reporter-priv.cc (represent): In the var_diff_sptr overload, use consistent punctuation and keep to a single line of output when referring back to an existing type diff report. * src/abg-reporter-priv.h: In the macro RETURN_IF_BEING_REPORTED_OR_WAS_REPORTED_EARLIER, use consistent punctuation when referring back to an existing type diff report. * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust formatting of back references to existing type diff reports. * tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt: Ditto. * tests/data/test-diff-filter/test16-report-2.txt: Ditto. * tests/data/test-diff-filter/test17-1-report.txt: Ditto. * tests/data/test-diff-filter/test25-cyclic-type-report-1.txt: Ditto. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.= x86_64-report-2.txt: Ditto. * tests/data/test-diff-suppr/test36-leaf-report-0.txt: Ditto. Signed-off-by: Giuliano Procida --- src/abg-reporter-priv.cc | 19 ++++++++----- src/abg-reporter-priv.h | 8 +++--- .../test-abidiff/test-PR18791-report0.txt | 3 +-- .../PR25058-liblttng-ctl-report-1.txt | 22 +++++++-------- .../data/test-diff-filter/test16-report-2.txt | 2 +- .../data/test-diff-filter/test17-1-report.txt | 2 +- .../test25-cyclic-type-report-1.txt | 2 +- ...l7.x86_64-0.12.8-1.el7.x86_64-report-2.txt | 27 +++++++++---------- .../test-diff-suppr/test36-leaf-report-0.txt | 2 +- 9 files changed, 45 insertions(+), 42 deletions(-) diff --git a/src/abg-reporter-priv.cc b/src/abg-reporter-priv.cc index 883c815e..323de503 100644 --- a/src/abg-reporter-priv.cc +++ b/src/abg-reporter-priv.cc @@ -507,11 +507,11 @@ represent(const var_diff_sptr &diff, =20 if (d->currently_reporting()) { - out << " as being reported\n"; + out << ", as being reported\n"; } else if (d->reported_once()) { - out << " as reported earlier\n"; + out << ", as reported earlier\n"; } else { @@ -527,13 +527,20 @@ represent(const var_diff_sptr &diff, if (ctxt->get_reporter()->diff_to_be_reported(d.get())) { out << indent - << "type of '" << pretty_representation << "' changed:\n"; + << "type of '" << pretty_representation << "' changed"; if (d->currently_reporting()) - out << indent << " details are being reported\n"; + { + out << ", as being reported\n"; + } else if (d->reported_once()) - out << indent << " details were reported earlier\n"; + { + out << ", as reported earlier\n"; + } else - d->report(out, indent + " "); + { + out << ":\n"; + d->report(out, indent + " "); + } =20 begin_with_and =3D true; emitted =3D true; diff --git a/src/abg-reporter-priv.h b/src/abg-reporter-priv.h index b6c56fdb..b221fdc3 100644 --- a/src/abg-reporter-priv.h +++ b/src/abg-reporter-priv.h @@ -68,14 +68,14 @@ { \ string _name_ =3D _diff_->first_subject()->get_pretty_representation();= \ if (_diff_->currently_reporting()) \ - out << indent << INTRO_TEXT << " '" << _name_ << "' changed; " \ - "details are being reported\n"; \ + out << indent << INTRO_TEXT << " '" << _name_ \ + << "' changed, as being reported\n"; \ else \ { \ out << indent << INTRO_TEXT << " '" \ - << _name_ << "' changed"; \ + << _name_ << "' changed"; \ report_loc_info(D->first_subject(), *d.context(), out); \ - out << ", as reported earlier\n"; \ + out << ", as reported earlier\n"; \ } \ return ; \ } \ diff --git a/tests/data/test-abidiff/test-PR18791-report0.txt b/tests/data/= test-abidiff/test-PR18791-report0.txt index 93faf599..5bc2d08b 100644 --- a/tests/data/test-abidiff/test-PR18791-report0.txt +++ b/tests/data/test-abidiff/test-PR18791-report0.txt @@ -123,8 +123,7 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Adde= d variable type name changed from 'std::_List_base >::_List_impl' to 'std::__cxx11::_List_b= ase >::_List_impl' type size changed from 128 to 192 (in bits) 1 data member change: - type of 'std::__detail::_List_node_base std::_List_b= ase >::_List_impl::_M_node= ' changed: - details were reported earlier + type of 'std::__detail::_List_node_base std::_List_b= ase >::_List_impl::_M_node= ' changed, as reported earlier and name of 'std::_List_base >::_List_impl::_M_node' changed to 'std::__cxx11:= :_List_base >::_List_impl:= :_M_node' and name of 'std::_List_base >::_M_impl' changed to 'std::__cxx11::_List_base >::_M_impl' =20 diff --git a/tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt b= /tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt index dfb63684..44ddc6d6 100644 --- a/tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt +++ b/tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt @@ -179,8 +179,7 @@ Variables changes summary: 0 Removed, 0 Changed, 3 Adde= d variables in pointed to type 'struct lttng_event_field': type size hasn't changed 1 data member change: - type of 'lttng_event lttng_event_field::event' changed: - details were reported earlier + type of 'lttng_event lttng_event_field::event' changed, as rep= orted earlier =20 [C] 'function int lttng_list_tracepoints(lttng_handle*, lttng_event**)' = has some indirect sub-type changes: parameter 2 of type 'lttng_event**' has sub-type changes: @@ -232,7 +231,7 @@ Variables changes summary: 0 Removed, 0 Changed, 3 Adde= d variables type size changed from 576 to 640 (in bits) 2 data member changes: type of 'filter_node* filter_node::parent' changed: - pointed to type 'struct filter_node' changed; detail= s are being reported + pointed to type 'struct filter_node' changed, as bei= ng reported type of 'union {struct {} unknown; struct {filter_node= * child;} root; struct {__anonymous_enum__ type; ast_link_type post_op; ast= _link_type pre_op; union {char* string; uint64_t constant; double float_con= stant; char* identifier; filter_node* child;} u; filter_node* prev; filter_= node* next;} expression; struct {op_type type; filter_node* lchild; filter_= node* rchild;} op; struct {unary_op_type type; filter_node* child;} unary_o= p;} filter_node::u' changed: type size changed from 320 to 384 (in bits) 4 data member changes: @@ -245,21 +244,20 @@ Variables changes summary: 0 Removed, 0 Changed, 3 Ad= ded variables type size hasn't changed 1 enumerator insertion: 'ast_link_type::AST_LINK_BRACKET' value '3= ' - type of 'ast_link_type pre_op' changed: - details were reported earlier + type of 'ast_link_type pre_op' changed, as rep= orted earlier type of 'union {char* string; uint64_t constan= t; double float_constant; char* identifier; filter_node* child;} u' changed= : type size hasn't changed 1 data member change: type of 'filter_node* child' changed: - pointed to type 'struct filter_node' cha= nged; details are being reported + pointed to type 'struct filter_node' cha= nged, as being reported type changed from: union {char* string; uint64_t constant; do= uble float_constant; char* identifier; filter_node* child;} to: union {char* string; uint64_t constant; do= uble float_constant; char* identifier; filter_node* child;} type of 'filter_node* prev' changed: - pointed to type 'struct filter_node' changed= ; details are being reported + pointed to type 'struct filter_node' changed= , as being reported type of 'filter_node* next' changed: - pointed to type 'struct filter_node' changed= ; details are being reported + pointed to type 'struct filter_node' changed= , as being reported type of 'struct {op_type type; filter_node* lchild= ; filter_node* rchild;} op' changed: type size hasn't changed 3 data member changes: @@ -278,14 +276,14 @@ Variables changes summary: 0 Removed, 0 Changed, 3 Ad= ded variables 'op_type::AST_OP_BIT_OR' value '11' 'op_type::AST_OP_BIT_XOR' value '12' type of 'filter_node* lchild' changed: - pointed to type 'struct filter_node' changed= ; details are being reported + pointed to type 'struct filter_node' changed= , as being reported type of 'filter_node* rchild' changed: - pointed to type 'struct filter_node' changed= ; details are being reported + pointed to type 'struct filter_node' changed= , as being reported type of 'struct {filter_node* child;} root' change= d: type size hasn't changed 1 data member change: type of 'filter_node* child' changed: - pointed to type 'struct filter_node' changed= ; details are being reported + pointed to type 'struct filter_node' changed= , as being reported type of 'struct {unary_op_type type; filter_node* = child;} unary_op' changed: type size hasn't changed 2 data member changes: @@ -296,7 +294,7 @@ Variables changes summary: 0 Removed, 0 Changed, 3 Adde= d variables 1 enumerator insertion: 'unary_op_type::AST_UNARY_BIT_NOT' value '= 4' type of 'filter_node* child' changed: - pointed to type 'struct filter_node' changed= ; details are being reported + pointed to type 'struct filter_node' changed= , as being reported 'cds_list_head filter_ast::allocated_nodes' offset changed= from 576 to 640 (in bits) (by +64 bits) =20 [C] 'function YYSTYPE* lttng_yyget_lval(yyscan_t)' has some indirect sub= -type changes: diff --git a/tests/data/test-diff-filter/test16-report-2.txt b/tests/data/t= est-diff-filter/test16-report-2.txt index a90e85ad..f69eabdc 100644 --- a/tests/data/test-diff-filter/test16-report-2.txt +++ b/tests/data/test-diff-filter/test16-report-2.txt @@ -11,6 +11,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added = variable 'int S::m0', at offset 0 (in bits) 1 data member change: type of 'S* S::m2' changed: - pointed to type 'struct S' changed; details are being reported + pointed to type 'struct S' changed, as being reported and offset changed from 0 to 64 (in bits) (by +64 bits) =20 diff --git a/tests/data/test-diff-filter/test17-1-report.txt b/tests/data/t= est-diff-filter/test17-1-report.txt index 7c51152a..0b39c5d4 100644 --- a/tests/data/test-diff-filter/test17-1-report.txt +++ b/tests/data/test-diff-filter/test17-1-report.txt @@ -11,7 +11,7 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added = variable 'int S::m0', at offset 0 (in bits) 1 data member change: type of 'S* S::m2' changed: - pointed to type 'struct S' changed; details are being reported + pointed to type 'struct S' changed, as being reported and offset changed from 0 to 64 (in bits) (by +64 bits) =20 [C] 'function void foo(S&)' has some indirect sub-type changes: diff --git a/tests/data/test-diff-filter/test25-cyclic-type-report-1.txt b/= tests/data/test-diff-filter/test25-cyclic-type-report-1.txt index 6a6beeef..0215d892 100644 --- a/tests/data/test-diff-filter/test25-cyclic-type-report-1.txt +++ b/tests/data/test-diff-filter/test25-cyclic-type-report-1.txt @@ -11,5 +11,5 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added = variable 'char S::m1', at offset 32 (in bits) 1 data member change: type of 'S* S::m2' changed: - pointed to type 'struct S' changed; details are being reported + pointed to type 'struct S' changed, as being reported =20 diff --git a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.1= 2.8-1.el7.x86_64-report-2.txt b/tests/data/test-diff-pkg/spice-server-0.12.= 4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt index 6d9beb85..58c94b7a 100644 --- a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.e= l7.x86_64-report-2.txt +++ b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.e= l7.x86_64-report-2.txt @@ -37,7 +37,7 @@ 13 data member changes: type of 'QXLInstance* RedDispatcher::qxl' ch= anged: in pointed to type 'typedef QXLInstance' a= t spice-qxl.h:34:1: - underlying type 'struct QXLInstance' cha= nged; details are being reported + underlying type 'struct QXLInstance' cha= nged, as being reported type of 'Dispatcher RedDispatcher::dispatche= r' changed: underlying type 'struct Dispatcher' at dis= patcher.h:22:1 changed: type size changed from 960 to 1024 (in b= its) @@ -51,7 +51,7 @@ 'int RedDispatcher::use_hardware_cursor' off= set changed from 2240 to 2304 (in bits) (by +64 bits) type of 'RedDispatcher* RedDispatcher::next'= changed: in pointed to type 'typedef RedDispatcher'= at red_worker.h:87:1: - underlying type 'struct RedDispatcher' c= hanged; details are being reported + underlying type 'struct RedDispatcher' c= hanged, as being reported and offset changed from 2304 to 2368 (in bit= s) (by +64 bits) 'Ring RedDispatcher::async_commands' offset = changed from 2368 to 2432 (in bits) (by +64 bits) 'pthread_mutex_t RedDispatcher::async_lock' = offset changed from 2496 to 2560 (in bits) (by +64 bits) @@ -185,7 +185,7 @@ 1 data member change: type of 'SpiceCharDeviceState* SpiceCh= arDeviceInstance::st' changed: in pointed to type 'typedef SpiceCha= rDeviceState' at spice-char.h:34:1: - underlying type 'struct SpiceCharD= eviceState' changed; details are being reported + underlying type 'struct SpiceCharD= eviceState' changed, as being reported and offset changed from 896 to 960 (in bits) (= by +64 bits) 'int SpiceCharDeviceState::during_read_from_de= vice' offset changed from 960 to 1024 (in bits) (by +64 bits) 'int SpiceCharDeviceState::during_write_to_dev= ice' offset changed from 992 to 1056 (in bits) (by +64 bits) @@ -223,7 +223,7 @@ 2 data member changes (2 fil= tered): type of 'RedChannel* RedCh= annelClient::channel' changed: in pointed to type 'type= def RedChannel' at red_channel.h:130:1: - underlying type 'struc= t RedChannel' changed; details are being reported + underlying type 'struc= t RedChannel' changed, as being reported type of 'RedsStream* RedCh= annelClient::stream' changed: in pointed to type 'type= def RedsStream' at reds_stream.h:31:1: underlying type 'struc= t RedsStream' at reds.h:68:1 changed: @@ -391,7 +391,7 @@ in pointed to type 'function type vo= id (RedChannel*, RedClient*, RedsStream*, int, int, uint32_t*, int, uint32_= t*)': parameter 1 of type 'RedChannel*' = has sub-type changes: in pointed to type 'typedef RedC= hannel' at red_channel.h:130:1: - underlying type 'struct RedCha= nnel' changed; details are being reported + underlying type 'struct RedCha= nnel' changed, as being reported parameter 3 of type 'RedsStream*' = has sub-type changes: pointed to type 'typedef RedsStr= eam' changed at red_channel.h:134:1, as reported earlier type of 'channel_client_disconnect_proc = disconnect' changed: @@ -524,7 +524,7 @@ pointed to type 'typedef RedsStream' c= hanged at red_channel.h:134:1, as reported earlier type of 'SndWorker* SndChannel::worker' = changed: in pointed to type 'typedef SndWorker'= at snd_worker.c:80:1: - underlying type 'struct SndWorker' c= hanged; details are being reported + underlying type 'struct SndWorker' c= hanged, as being reported type of 'RedChannelClient* SndChannel::c= hannel_client' changed: pointed to type 'typedef RedChannelCli= ent' changed at red_channel.h:136:1, as reported earlier type of 'snd_channel_handle_message_proc= SndChannel::handle_message' changed: @@ -532,26 +532,26 @@ in pointed to type 'function type in= t (SndChannel*, typedef size_t, typedef uint32_t, void*)': parameter 1 of type 'SndChannel*' = has sub-type changes: in pointed to type 'typedef SndC= hannel' at snd_worker.c:74:1: - underlying type 'struct SndCha= nnel' changed; details are being reported + underlying type 'struct SndCha= nnel' changed, as being reported type of 'snd_channel_on_message_done_pro= c SndChannel::on_message_done' changed: underlying type 'void (SndChannel*)*' = changed: in pointed to type 'function type vo= id (SndChannel*)': parameter 1 of type 'SndChannel*' = has sub-type changes: in pointed to type 'typedef SndC= hannel' at snd_worker.c:74:1: - underlying type 'struct SndCha= nnel' changed; details are being reported + underlying type 'struct SndCha= nnel' changed, as being reported type of 'snd_channel_cleanup_channel_pro= c SndChannel::cleanup' changed: underlying type 'void (SndChannel*)*' = changed: in pointed to type 'function type vo= id (SndChannel*)': parameter 1 of type 'SndChannel*' = has sub-type changes: in pointed to type 'typedef SndC= hannel' at snd_worker.c:74:1: - underlying type 'struct SndCha= nnel' changed; details are being reported + underlying type 'struct SndCha= nnel' changed, as being reported no data member change (1 filtered); type of 'SndWorker* SndWorker::next' changed: in pointed to type 'typedef SndWorker' at snd_= worker.c:80:1: - underlying type 'struct SndWorker' changed; = details are being reported + underlying type 'struct SndWorker' changed, = as being reported type of 'SpicePlaybackInstance* SpicePlaybackState::= sin' changed: in pointed to type 'typedef SpicePlaybackInstance'= at spice-audio.h:33:1: - underlying type 'struct SpicePlaybackInstance' c= hanged; details are being reported + underlying type 'struct SpicePlaybackInstance' c= hanged, as being reported =20 [C] 'function void spice_server_playback_put_samples(SpicePlaybackInst= ance*, uint32_t*)' at snd_worker.c:1100:1 has some indirect sub-type change= s: parameter 1 of type 'SpicePlaybackInstance*' has sub-type changes: @@ -590,11 +590,10 @@ 1 data member insertion: 'uint32_t SpiceRecordState::frequency', at offset 51= 2 (in bits) at snd_worker.c:166:1 2 data member changes: - type of 'SndWorker SpiceRecordState::worker' changed= : - details were reported earlier + type of 'SndWorker SpiceRecordState::worker' changed= , as reported earlier type of 'SpiceRecordInstance* SpiceRecordState::sin'= changed: in pointed to type 'typedef SpiceRecordInstance' a= t spice-audio.h:67:1: - underlying type 'struct SpiceRecordInstance' cha= nged; details are being reported + underlying type 'struct SpiceRecordInstance' cha= nged, as being reported =20 [C] 'function void spice_server_record_set_mute(SpiceRecordInstance*, = uint8_t)' at snd_worker.c:1279:1 has some indirect sub-type changes: parameter 1 of type 'SpiceRecordInstance*' has sub-type changes: diff --git a/tests/data/test-diff-suppr/test36-leaf-report-0.txt b/tests/da= ta/test-diff-suppr/test36-leaf-report-0.txt index d270740d..9caa9428 100644 --- a/tests/data/test-diff-suppr/test36-leaf-report-0.txt +++ b/tests/data/test-diff-suppr/test36-leaf-report-0.txt @@ -15,7 +15,7 @@ Removed/Changed/Added variables summary: 0 Removed, 0 Cha= nged, 0 Added variable 'struct leaf2 at test36-leaf-v0.cc:9:1' changed: type size changed from 64 to 96 (in bits) there are data member changes: - type 'struct leaf1' of 'leaf2::member0' changed as reported earlier + type 'struct leaf1' of 'leaf2::member0' changed, as reported earlier and size changed from 32 to 64 (in bits) (by +32 bits) 'char leaf2::member1' offset changed from 32 to 64 (in bits) (by +32 b= its) 3 impacted interfaces: --=20 2.26.0.292.g33ef6b2f38-goog