From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 107108 invoked by alias); 31 May 2015 13:13:34 -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 107087 invoked by uid 89); 31 May 2015 13:13:32 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-la0-f46.google.com Received: from mail-la0-f46.google.com (HELO mail-la0-f46.google.com) (209.85.215.46) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Sun, 31 May 2015 13:13:28 +0000 Received: by lagv1 with SMTP id v1so84511000lag.3 for ; Sun, 31 May 2015 06:13:25 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to :content-type; bh=kI9qhtKJDJKScpgr1lcmGdgIDmt5aOUZ+8l9OqEfmuA=; b=l0pF3kmSivUj7lBg/52emv1MWPQk1EgzFFIqGG/y7hXeA5YW4HjSpSvjhHMgMaxXta 40Jm2dF+TVKWbgbIjpIrARL6NP6T0mqIl7Q/+hx0Pi8YFXwNbbOmdI4GvNlVKrOAnVtQ jit5KOqVYQ5iwQCiz6vNoNrud6d3IbghvNzK41SVDv4+BITs9eWZIAQDbW3mo4TIdwJk JgNvinm7Z8gAx+N1pwlk5pg29tgExuiBG3McXOsAlYs7ZgNaKsJE2sejiDlqJEfAmq6B 5pXLa1Q8BKJI0YOrMAfUk5lH9tcGQ+91C7jouw0HN0WHKQdRaE6E5M7vX/8KZLQMLgXH xCHQ== X-Gm-Message-State: ALoCoQklKsbCbqb0Gv6pE9J+KEPcC28pch/0ywhdTiLmKG30S+Xarqa3Of/ijmRiOa9rw3IvuJUL MIME-Version: 1.0 X-Received: by 10.112.48.68 with SMTP id j4mr16369242lbn.60.1433078005145; Sun, 31 May 2015 06:13:25 -0700 (PDT) Received: by 10.25.205.146 with HTTP; Sun, 31 May 2015 06:13:24 -0700 (PDT) Date: Sun, 31 May 2015 16:33:00 -0000 Message-ID: Subject: [C patch] PR49551 From: Prathamesh Kulkarni To: "Joseph S. Myers" , polacek@redhat.com, gcc Patches Content-Type: multipart/mixed; boundary=001a1134a2dc6f41150517607935 X-IsSubscribed: yes X-SW-Source: 2015-05/txt/msg02888.txt.bz2 --001a1134a2dc6f41150517607935 Content-Type: text/plain; charset=UTF-8 Content-length: 2409 Hi, The attached patch tries to fix PR49551. For following test-case: int x = 1; int x; Passing -O -fdata-sections causes ICE for target arm-linux-gnueabihf. The bug is latent on trunk, after r221297. Reverting r221297 reproduces ICE. Before r221297: ICE was caused in get_variable_section because it hit the following assert in varasm.c:get_variable_section(): gcc_assert (DECL_SECTION_NAME (decl) == NULL && ADDR_SPACE_GENERIC_P (as)); test.c:2:1: internal compiler error: in get_variable_section, at varasm.c:1158 int x; ^ 0xd4133b get_variable_section(tree_node*, bool) /home/prathamesh.kulkarni/gnu-toolchain/src/gcc.git~bug-49551-reverted/gcc/varasm.c:1157 0xd4211e get_block_for_decl /home/prathamesh.kulkarni/gnu-toolchain/src/gcc.git~bug-49551-reverted/gcc/varasm.c:1223 0xd42c61 make_decl_rtl(tree_node*) /home/prathamesh.kulkarni/gnu-toolchain/src/gcc.git~bug-49551-reverted/gcc/varasm.c:1353 0x53785f merge_decls /home/prathamesh.kulkarni/gnu-toolchain/src/gcc.git~bug-49551-reverted/gcc/c/c-decl.c:2709 This happens because merge_decls() sets DECL_COMMON (olddecl) to 1 here: memcpy ((char *) olddecl + sizeof (struct tree_decl_common), (char *) newdecl + sizeof (struct tree_decl_common), tree_code_size (TREE_CODE (olddecl)) - sizeof (struct tree_decl_common)); In merge_decls, the following condition becomes true and make_decl_rtl() is called. if (DECL_RTL_SET_P (olddecl) && (TREE_CODE (olddecl) == FUNCTION_DECL || (TREE_CODE (olddecl) == VAR_DECL && TREE_STATIC (olddecl)))) make_decl_rtl (olddecl); DECL_RTL_SET_P (olddecl) is set to true because notice_global_symbol() called make_decl_rtl() for olddecl via DECL_RTL(). make_decl_rtl() eventually calls get_variable_section() and hits the assert. After r221297: r221297 removes call to DECL_RTL() in notice_global_symbol(). So in merge_decls(), the above if condition becomes false and make_decl_rtl() doesn't get called thereby not producing the ICE. However DECL_COMMON (olddecl) is still incorrectly set to 1 after the call to memcpy(), while DECL_COMMON (olddecl) should be 0 for the above test-case. This patch tries to correctly adjust DECL_COMMON (newdecl) before it is copied into olddecl. Does it look reasonable ? Bootstrapped and tested on x86_64-unknown-linux-gnu, cross tested on arm-linux-gnueabihf using qemu. Thank you, Prathamesh --001a1134a2dc6f41150517607935 Content-Type: text/plain; charset=US-ASCII; name="49551.diff" Content-Disposition: attachment; filename="49551.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iach3rjj0 Content-length: 1456 ZGlmZiAtLWdpdCBhL2djYy9jL2MtZGVjbC5jIGIvZ2NjL2MvYy1kZWNsLmMK aW5kZXggNGY2NzYxZC4uODRlNTZkNyAxMDA2NDQKLS0tIGEvZ2NjL2MvYy1k ZWNsLmMKKysrIGIvZ2NjL2MvYy1kZWNsLmMKQEAgLTI2MzEsNiArMjYzMSwx MiBAQCBtZXJnZV9kZWNscyAodHJlZSBuZXdkZWNsLCB0cmVlIG9sZGRlY2ws IHRyZWUgbmV3dHlwZSwgdHJlZSBvbGR0eXBlKQogICBlbHNlIGlmIChERUNM X1BSRVNFUlZFX1AgKG5ld2RlY2wpKQogICAgIERFQ0xfUFJFU0VSVkVfUCAo b2xkZGVjbCkgPSAxOwogCisgIC8qIE1lcmdlIERFQ0xfQ09NTU9OICovCisg IGlmIChWQVJfUCAob2xkZGVjbCkgJiYgVkFSX1AgKG5ld2RlY2wpCisgICAg ICAmJiAhbG9va3VwX2F0dHJpYnV0ZSAoImNvbW1vbiIsIERFQ0xfQVRUUklC VVRFUyAobmV3ZGVjbCkpCisgICAgICAmJiAhbG9va3VwX2F0dHJpYnV0ZSAo Im5vY29tbW9uIiwgREVDTF9BVFRSSUJVVEVTIChuZXdkZWNsKSkpCisgICAg REVDTF9DT01NT04gKG5ld2RlY2wpID0gREVDTF9DT01NT04gKG5ld2RlY2wp ICYmIERFQ0xfQ09NTU9OIChvbGRkZWNsKTsKKwogICAvKiBDb3B5IG1vc3Qg b2YgdGhlIGRlY2wtc3BlY2lmaWMgZmllbGRzIG9mIE5FV0RFQ0wgaW50byBP TERERUNMLgogICAgICBCdXQgcHJlc2VydmUgT0xEREVDTCdzIERFQ0xfVUlE LCBERUNMX0NPTlRFWFQgYW5kCiAgICAgIERFQ0xfQVJHVU1FTlRTIChpZiBh cHByb3ByaWF0ZSkuICAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvcHI0OTU1MS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI0OTU1 MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNGYw NmQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9w cjQ5NTUxLmMKQEAgLTAsMCArMSw3IEBACisvKiB7IGRnLWRvIGNvbXBpbGUg fSAqLworLyogeyBkZy1vcHRpb25zICItTyAtZmRhdGEtc2VjdGlvbnMiIH0g Ki8KKworaW50IHggPSAxOworaW50IHg7CisKKy8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlci1ub3Qge2NvbW1bXHQgXSt4fSB9IH0gKi8K --001a1134a2dc6f41150517607935 Content-Type: text/plain; charset=US-ASCII; name="ChangeLog.txt" Content-Disposition: attachment; filename="ChangeLog.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iach3rju1 Content-length: 220 MjAxNS0wNS0zMSAgUHJhdGhhbWVzaCBLdWxrYXJuaSAgPHByYXRoYW1lc2gu a3Vsa2FybmlAbGluYXJvLm9yZz4KCglQUiBjLzQ5NTUxCgkqIGMtZGVjbC5j IChtZXJnZV9kZWNscyk6IE1lcmdlIERFQ0xfQ09NTU9OLiAKCSogZ2NjLmRn L3ByNDk1NTEuYzogTmV3IHRlc3QtY2FzZS4K --001a1134a2dc6f41150517607935--