From patchwork Fri Jul 28 11:13:39 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Martin_Li=C5=A1ka?= X-Patchwork-Id: 794801 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-459247-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="w3q/FvFi"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3xJmSH6Csfz9s4q for ; Fri, 28 Jul 2017 21:13:51 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :subject:to:message-id:date:mime-version:content-type; q=dns; s= default; b=cEj3LRFbGmS5nh6Ana93dRlkiM/fksu/r5M5NKddF9/N0/TAV/WkE AqA+Pk+xnSlxspflrKwamb3wF5UsLz5tLCBUYY+Rp9rZjM61W0Gnx+Ufg2HGbXQF aVNmACnvA5U4STyzkl2AeOkDwTm5N0Wz/tOhIg5N90egJvntxH0sw4= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :subject:to:message-id:date:mime-version:content-type; s= default; bh=ddO+Z6+s1Qm4bEaXGAbDMnm1crs=; b=w3q/FvFi/goGZD9J/BaS ES4Ct5MJrR+enkWeZQV6KNNZVUz/seY7IwIYlwPIfN2iOVqkQch6Knp5NbX5uN/5 JqCF7c9yqSOuFNRPQoRowdKgOjD8xs+Jutu/zKLE+tsVw3reYvIYgVpYRV0egVw4 Y0c7fbf1T4Jli9CiczZPuZM= Received: (qmail 24360 invoked by alias); 28 Jul 2017 11:13:44 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22497 invoked by uid 89); 28 Jul 2017 11:13:43 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mx1.suse.de Received: from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 28 Jul 2017 11:13:41 +0000 Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id A4732AD78 for ; Fri, 28 Jul 2017 11:13:39 +0000 (UTC) From: =?UTF-8?Q?Martin_Li=c5=a1ka?= Subject: [PATCH] Fix target attribute handling (PR c++/81355). To: gcc-patches@gcc.gnu.org Message-ID: Date: Fri, 28 Jul 2017 13:13:39 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 X-IsSubscribed: yes Hello. Following patch skips empty strings in 'target' attribute. Patch can bootstrap on ppc64le-redhat-linux and survives regression tests. Ready to be installed? Martin gcc/ChangeLog: 2017-07-13 Martin Liska PR c++/81355 * attribs.c (sorted_attr_string): Skip empty strings. gcc/testsuite/ChangeLog: 2017-07-13 Martin Liska PR c++/81355 * g++.dg/other/pr81355.C: New test. --- gcc/attribs.c | 6 ++++++ gcc/testsuite/g++.dg/other/pr81355.C | 14 ++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 gcc/testsuite/g++.dg/other/pr81355.C diff --git a/gcc/attribs.c b/gcc/attribs.c index 5eb19e82795..bf8452a3cec 100644 --- a/gcc/attribs.c +++ b/gcc/attribs.c @@ -725,6 +725,9 @@ sorted_attr_string (tree arglist) { const char *str = TREE_STRING_POINTER (TREE_VALUE (arg)); size_t len = strlen (str); + /* Skip empty string. */ + if (len == 0) + continue; str_len_sum += len + 1; if (arg != arglist) argnum++; @@ -739,6 +742,9 @@ sorted_attr_string (tree arglist) { const char *str = TREE_STRING_POINTER (TREE_VALUE (arg)); size_t len = strlen (str); + /* Skip empty string. */ + if (len == 0) + continue; memcpy (attr_str + str_len_sum, str, len); attr_str[str_len_sum + len] = TREE_CHAIN (arg) ? ',' : '\0'; str_len_sum += len + 1; diff --git a/gcc/testsuite/g++.dg/other/pr81355.C b/gcc/testsuite/g++.dg/other/pr81355.C new file mode 100644 index 00000000000..d52b444261c --- /dev/null +++ b/gcc/testsuite/g++.dg/other/pr81355.C @@ -0,0 +1,14 @@ +/* { dg-do compile { target x86_64-*-* } } */ + +__attribute__((target("default"))) +int foo() {return 1;} + +__attribute__((target("arch=core2", ""))) +int foo() {return 2;} + +__attribute__((target("sse4.2", "", ""))) +int foo() {return 2;} + +int main() { + return foo(); +}