From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 41233 invoked by alias); 16 Nov 2015 22:25:22 -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 41223 invoked by uid 89); 16 Nov 2015 22:25:21 -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-pa0-f46.google.com Received: from mail-pa0-f46.google.com (HELO mail-pa0-f46.google.com) (209.85.220.46) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Mon, 16 Nov 2015 22:25:20 +0000 Received: by pabfh17 with SMTP id fh17so191294951pab.0 for ; Mon, 16 Nov 2015 14:25:18 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:to:cc:from:subject:message-id:date:user-agent :mime-version:content-type; bh=RM8QUVuzP1kYhO5jiPO7tUCOrg+8F4FzrgEdrlM1wlc=; b=lcwckao31QIWY5lnWIvKjjMACsozUI727gyrPN/Vb1Di2Yle/8wb8Z8+pZCqB8nap0 H2vJQtQkY6UWLwrt7t0+DNxcbMOp+xHzWvSRSw6D7Tf9JLLEZ2iZzbxPTi2qc68lzRpz Mj7Ab1cZMdNd4GvnJfRIQeKkLCUdZk5lgGu732fpb1elRY3/ngsHjZ1VmBBtvFtZ3pgU Ba3xk4LTtirI9l1BZAwHrxqLS2UnF0To6gBCyNGo7BJVo5XiiVRj5OHmYzhmZ+gAJXuA YBh+0ICi0dG3pMk4XI+cy/8aGHYOyRhbGCyFtpC0JZmJsOXzhgQPkVQsN7oL3/pPhowe NyJQ== X-Gm-Message-State: ALoCoQnSHOP1jkpwoEmQ4Ghwk/L9/3dvdNN5NJvpVm5H+1GLkXY9AprAfOi0Vdsx9drs0eAv2bJF X-Received: by 10.66.101.40 with SMTP id fd8mr49809713pab.91.1447712718348; Mon, 16 Nov 2015 14:25:18 -0800 (PST) Received: from [10.1.1.10] (58-6-183-210.dyn.iinet.net.au. [58.6.183.210]) by smtp.googlemail.com with ESMTPSA id hz4sm24185827pbc.12.2015.11.16.14.25.15 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 16 Nov 2015 14:25:17 -0800 (PST) To: "gcc-patches@gcc.gnu.org" Cc: Richard Earnshaw , Ramana Radhakrishnan , Kyrill Tkachov From: Kugan Subject: Incorrect code due to indirect tail call of varargs function with hard float ABI Message-ID: <564A57BA.7050504@linaro.org> Date: Mon, 16 Nov 2015 22:25:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------090909040906090504050908" X-IsSubscribed: yes X-SW-Source: 2015-11/txt/msg02006.txt.bz2 This is a multi-part message in MIME format. --------------090909040906090504050908 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-length: 1151 Following testcase fails on ARM (from https://bugs.linaro.org/show_bug.cgi?id=1900). __attribute__ ((noinline)) double direct(int x, ...) { return x*x; } __attribute__ ((noinline)) double broken(double (*indirect)(int x, ...), int v) { return indirect(v); } int main () { double d1, d2; int i = 2; d1 = broken (direct, i); if (d1 != i*i) { __builtin_abort (); } return 0; } Please note that we have a sibcall from "broken" to "indirect". "direct" is variadic function so it is conforming to AAPCS base standard. "broken" is a non-variadic function and will return the value in floating point register for TARGET_HARD_FLOAT. Thus we should not be doing sibcall here. Attached patch fixes this. Bootstrap and regression testing is ongoing. Is this OK if no issues with the testing? Thanks, Kugan gcc/ChangeLog: 2015-11-17 Kugan Vivekanandarajah * config/arm/arm.c (arm_function_ok_for_sibcall): Disable sibcall to indirect function when TARGET_HARD_FLOAT. gcc/testsuite/ChangeLog: 2015-11-17 Kugan Vivekanandarajah * gcc.target/arm/variadic_sibcall.c: New test. --------------090909040906090504050908 Content-Type: text/plain; charset=UTF-8; name="p.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="p.txt" Content-length: 1753 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2FybS5jIGIvZ2NjL2NvbmZp Zy9hcm0vYXJtLmMKaW5kZXggYTM3OTEyMS4uOGI1NjBiYyAxMDA2NDQKLS0t IGEvZ2NjL2NvbmZpZy9hcm0vYXJtLmMKKysrIGIvZ2NjL2NvbmZpZy9hcm0v YXJtLmMKQEAgLTY2ODEsNiArNjY4MSwxMiBAQCBhcm1fZnVuY3Rpb25fb2tf Zm9yX3NpYmNhbGwgKHRyZWUgZGVjbCwgdHJlZSBleHApCiAJIHJlZ2lzdGVy LiAgKi8KICAgICAgIHJ0eCBhLCBiOwogCisgICAgICAvKiBXaGVuIGl0IGlz IGFuIGluZGlyZWN0IGNhbGwgKGkuZSwgZGVjbCA9PSBOVUxMKSwgaXQgY291 bGQgYmUKKwkgcmV0dXJuaW5nIGl0cyByZXN1bHQgaW4gYSBWRlAgb3IgY291 bGQgYmUgYSB2YXJpYWRpYyBmdW5jdGlvbi4KKwkgVGh1cyByZXR1cm4gZmFs c2UuICAqLworICAgICAgaWYgKCFkZWNsICYmIFRBUkdFVF9IQVJEX0ZMT0FU KQorCXJldHVybiBmYWxzZTsKKwogICAgICAgYSA9IGFybV9mdW5jdGlvbl92 YWx1ZSAoVFJFRV9UWVBFIChleHApLCBkZWNsLCBmYWxzZSk7CiAgICAgICBi ID0gYXJtX2Z1bmN0aW9uX3ZhbHVlIChUUkVFX1RZUEUgKERFQ0xfUkVTVUxU IChjZnVuLT5kZWNsKSksCiAJCQkgICAgICBjZnVuLT5kZWNsLCBmYWxzZSk7 CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL3Zh cmlhZGljX3NpYmNhbGwuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9h cm0vdmFyaWFkaWNfc2liY2FsbC5jCmluZGV4IGU2OWRlMjkuLjg2ZjA3ZmUg MTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vdmFy aWFkaWNfc2liY2FsbC5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9hcm0vdmFyaWFkaWNfc2liY2FsbC5jCkBAIC0wLDAgKzEsMjcgQEAKKy8q IHsgZGctZG8gcnVuIH0gICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiIgfSAq LworCitfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQorZG91YmxlIGRpcmVj dChpbnQgeCwgLi4uKQoreworICByZXR1cm4geCp4OworfQorCitfX2F0dHJp YnV0ZV9fICgobm9pbmxpbmUpKQorZG91YmxlIGJyb2tlbihkb3VibGUgKCpp bmRpcmVjdCkoaW50IHgsIC4uLiksIGludCB2KQoreworICByZXR1cm4gaW5k aXJlY3Qodik7Cit9CisKK2ludCBtYWluICgpCit7CisgIGRvdWJsZSBkMSwg ZDI7CisgIGludCBpID0gMjsKKyAgZDEgPSBicm9rZW4gKGRpcmVjdCwgaSk7 CisgIGlmIChkMSAhPSBpKmkpCisgICAgeworICAgICAgX19idWlsdGluX2Fi b3J0ICgpOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisK --------------090909040906090504050908--