From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30920 invoked by alias); 1 Aug 2018 14:26:36 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 30910 invoked by uid 89); 1 Aug 2018 14:26:36 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-24.9 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS,URIBL_RED autolearn=ham version=3.3.2 spammy=decl_chain, DECL_CHAIN X-HELO: mail-yw0-f195.google.com Received: from mail-yw0-f195.google.com (HELO mail-yw0-f195.google.com) (209.85.161.195) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 01 Aug 2018 14:26:34 +0000 Received: by mail-yw0-f195.google.com with SMTP id w76-v6so7243968ywg.4 for ; Wed, 01 Aug 2018 07:26:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=kkr6PHNdjmxlicwVgBkhlFLcrDOue3Jau7K9jO98Pvg=; b=ZS0FBXueeS028CeoCGTZUP7XTFEBFFvbAUOHEhpYwKPEPugcemWDpj1LgFMr4DW4pP GC2fQZIDZn4obrqOmYZTmO8Tro0WKjzGoYtm9SR7xiTwPU9TJQmiNznlOqG5Kb9q+ZI2 CshqkwatXWzF8F+2vpZqGcKXdYP7C/metLqGR7RC+UacKaSYN9jnk1wwfOKVdhGn1mDw eGlVxj+kTF/GEtiZD7xD/GLz2XL8acrY95Z1UHXH/CNcDj8zznJ/Hgv/6i26TCCaXrub h4SF5FTNdaCAi9MknITLvQNKoaV8M2R1pr8SZv6Xij6zf2SrLtvaNKks9Ll8wFaK84Dh y38w== MIME-Version: 1.0 Received: by 2002:a0d:d44e:0:0:0:0:0 with HTTP; Wed, 1 Aug 2018 07:26:31 -0700 (PDT) In-Reply-To: References: From: Bogdan Harjoc Date: Wed, 01 Aug 2018 14:26:00 -0000 Message-ID: Subject: Re: [PATCH] Avoid infinite loop with duplicate anonymous union fields To: Joseph Myers Cc: gcc-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="0000000000002d87c40572607b33" X-SW-Source: 2018-08/txt/msg00095.txt.bz2 --0000000000002d87c40572607b33 Content-Type: text/plain; charset="UTF-8" Content-length: 1164 On Wed, Aug 1, 2018 at 1:20 AM, Joseph Myers wrote: > On Wed, 1 Aug 2018, Bogdan Harjoc wrote: > >> So array[0] < component < array[2], which loops (I removed the gdb p >> commands for field_array[1] and so on). > > Is the key thing here that you end up with DECL_NAME (field) == NULL_TREE, > but DECL_NAME (field_array[bot]) != NULL_TREE - and in this particular > case of a bad ordering only, it's possible to loop without either top or > bot being changed? (But other details of the DECL_NAME ordering are > needed to actually get to that particular point.) Yes, once it enters the "if DECL_NAME (field) == NULL_TREE" body, only bot can change, and since "DECL_NAME (field_array[bot]) == NULL_TREE" is false, the inner while never runs, so it skips directly to "continue;" below with no changes to bot or top. So the function looks correct, as long as field_array really is qsort'ed if TYPE_LANG_SPECIFIC is set. > seen_error () is the idiomatic way of testing whether an error has been > reported. The updated patch is attached and includes a test that passes with: make check-gcc RUNTESTFLAGS="dg.exp=union-duplicate-field.c" --0000000000002d87c40572607b33 Content-Type: text/x-patch; charset="US-ASCII"; name="duplicate-union-field-lookup.patch" Content-Disposition: attachment; filename="duplicate-union-field-lookup.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jkb824jv0 Content-length: 1830 ZGlmZiAtLWdpdCBhL2djYy9jL2MtdHlwZWNrLmMgYi9nY2MvYy9jLXR5cGVj ay5jCmluZGV4IDkwYWUzMDZjOS4uNWZjNjJkODRkIDEwMDY0NAotLS0gYS9n Y2MvYy9jLXR5cGVjay5jCisrKyBiL2djYy9jL2MtdHlwZWNrLmMKQEAgLTIy MDksNyArMjIwOSwxMSBAQCBsb29rdXBfZmllbGQgKHRyZWUgdHlwZSwgdHJl ZSBjb21wb25lbnQpCiAgICAgIGZpbmQgdGhlIGVsZW1lbnQuICBPdGhlcndp c2UsIGRvIGEgbGluZWFyIHNlYXJjaC4gIFRZUEVfTEFOR19TUEVDSUZJQwog ICAgICB3aWxsIGFsd2F5cyBiZSBzZXQgZm9yIHN0cnVjdHVyZXMgd2hpY2gg aGF2ZSBtYW55IGVsZW1lbnRzLiAgKi8KIAotICBpZiAoVFlQRV9MQU5HX1NQ RUNJRklDICh0eXBlKSAmJiBUWVBFX0xBTkdfU1BFQ0lGSUMgKHR5cGUpLT5z KQorICAvKiBEdXBsaWNhdGUgZmllbGQgY2hlY2tpbmcgcmVwbGFjZXMgZHVw bGljYXRlcyB3aXRoIE5VTExfVFJFRSBzbworICAgICBUWVBFX0xBTkdfU1BF Q0lGSUMgYXJyYXlzIGFyZSBwb3RlbnRpYWxseSBubyBsb25nZXIgc29ydGVk LiBJbiB0aGF0CisgICAgIGNhc2UganVzdCBpdGVyYXRlIHVzaW5nIERFQ0xf Q0hBSU4uICovCisKKyAgaWYgKFRZUEVfTEFOR19TUEVDSUZJQyAodHlwZSkg JiYgVFlQRV9MQU5HX1NQRUNJRklDICh0eXBlKS0+cyAmJiAhc2Vlbl9lcnJv cigpKQogICAgIHsKICAgICAgIGludCBib3QsIHRvcCwgaGFsZjsKICAgICAg IHRyZWUgKmZpZWxkX2FycmF5ID0gJlRZUEVfTEFOR19TUEVDSUZJQyAodHlw ZSktPnMtPmVsdHNbMF07CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy5kZy91bmlvbi1kdXBsaWNhdGUtZmllbGQuYyBiL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3VuaW9uLWR1cGxpY2F0ZS1maWVsZC5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uZGE5YTk0NWQ5Ci0tLSAvZGV2L251 bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdW5pb24tZHVwbGljYXRl LWZpZWxkLmMKQEAgLTAsMCArMSwyMSBAQAorLyogeyBkZy1kbyBjb21waWxl IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLXN0ZD1jOTkiIH0gKi8KKworaW50 IGEwOworCitzdHJ1Y3QgUworeworICAgIGludCBhMTsKKyAgICB1bmlvbiB7 CisgICAgICAgIGludCBhMDsKKyAgICAgICAgaW50IGExOyAvKiB7IGRnLWVy cm9yICJkdXBsaWNhdGUgbWVtYmVyIiB9ICovCisgICAgICAgIGludCBhMiwg YTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTk7CisgICAgICAgIGludCBhMTAs IGExMSwgYTEyLCBhMTMsIGExNCwgYTE1OworICAgIH07Cit9OworCitpbnQg ZigpCit7CisgICAgc3RydWN0IFMgczsKKyAgICByZXR1cm4gcy5hMDsKK30K --0000000000002d87c40572607b33--