From patchwork Thu Dec 1 11:54:01 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Georg-Johann Lay X-Patchwork-Id: 86025 Delivered-To: patch@linaro.org Received: by 10.140.20.101 with SMTP id 92csp654163qgi; Thu, 1 Dec 2016 03:54:31 -0800 (PST) X-Received: by 10.84.216.28 with SMTP id m28mr84668123pli.107.1480593271239; Thu, 01 Dec 2016 03:54:31 -0800 (PST) Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id 1si40406342plw.75.2016.12.01.03.54.30 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 01 Dec 2016 03:54:31 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-return-443186-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org; spf=pass (google.com: domain of gcc-patches-return-443186-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-443186-patch=linaro.org@gcc.gnu.org DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:to:cc :from:subject:message-id:date:mime-version:content-type; q=dns; s=default; b=RB0pddK7laZojyyvZw31jgxBbtfR2uhEkyoFFdaW9/C4fo6L3x zkmGLYb3FMgh0mRowSGbPHy8ZZFGfNN2dfRC2Kj2lcwPnPAqkIlOI9UKGpsm/72w 8aJ34OXdWiKZAdnvp8qJPy1RBXAyIwwDAkn/40Y0Rm4Q26TMZ60gFkAG0= 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:to:cc :from:subject:message-id:date:mime-version:content-type; s= default; bh=+Yw4dZAbQSEv0p8J4wjSWK09n9Y=; b=P9p2ZsTeThpYvggzBVSR 9PBOgpm1pdUQBUlrJmma28MF+TCpi/CchcXuhIB4IbwWUA+tLzsbWyPwEzGAtFWe /7fgf/DmmhI3SPWfxRd16iI2vLwR5hymW6dxe0Bneo/Yk229zunJQaufHlkOTe+/ 201PMfvEbUaRCPrQv+9MOiY= Received: (qmail 40346 invoked by alias); 1 Dec 2016 11:54:15 -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 40328 invoked by uid 89); 1 Dec 2016 11:54:15 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL, BAYES_00, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_LOW autolearn=no version=3.3.2 spammy=nonexistent, respective, avrtiny, atmega8 X-HELO: mo4-p00-ob.smtp.rzone.de Received: from mo4-p00-ob.smtp.rzone.de (HELO mo4-p00-ob.smtp.rzone.de) (81.169.146.163) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 01 Dec 2016 11:54:05 +0000 X-RZG-AUTH: :LXoWVUeid/7A29J/hMvvT3ol15ykJcYwTPLBCxG2PQt7BpWLF2I= X-RZG-CLASS-ID: mo00 Received: from [192.168.0.123] (ip5f5871bb.dynamic.kabel-deutschland.de [95.88.113.187]) by smtp.strato.de (RZmta 39.10 DYNA|AUTH) with ESMTPSA id j09772sB1Bs11ai (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA)) (Client did not present a certificate); Thu, 1 Dec 2016 12:54:01 +0100 (CET) To: gcc-patches Cc: Denis Chertykov , Senthil Kumar Selvaraj , Pitchumani Sivanupandi From: Georg-Johann Lay Subject: [patch, testsuite, avr]: Filter-out -mmcu= from options for tests that set -mmcu= Message-ID: Date: Thu, 1 Dec 2016 12:54:01 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 X-IsSubscribed: yes This patch moves the compile tests that have a hard coded -mmcu=MCU in their dg-options to a new folder. The exp driver filters out -mmcu= from the command line options that are provided by, say, board description files or --tool-opts. This is needed because otherwise conflicting -mmcu= will FAIL respective test cases because of "specified option '-mmcu' more than once" errors from avr-gcc. Ok for trunk? Johann gcc/testsuite/ * gcc.target/avr/mmcu: New folder for compile-tests with -mmcu=. * gcc.target/avr/mmcu/avr-mmcu.exp: New file. * gcc.target/avr/pr58545.c: Move to gcc.target/avr/mmcu. * gcc.target/avr/tiny-caller-save.c: Dito. * gcc.target/avr/tiny-memx.c: Dito. Index: gcc.target/avr/mmcu/avr-mmcu.exp =================================================================== --- gcc.target/avr/mmcu/avr-mmcu.exp (nonexistent) +++ gcc.target/avr/mmcu/avr-mmcu.exp (working copy) @@ -0,0 +1,99 @@ +# Copyright (C) 2008-2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# . + +# GCC testsuite that uses the `dg.exp' driver. + +# This folder contains compile tests that set dg-options to +# some -mmcu= which might collide with the MCU set by the +# target board. This in turn will fail the test case due to +# "error: specified option '-mmcu' more than once". +# +# Hence we filter out -mmcu= from cflags and --tool_opts before +# running the tests. + +# Exit immediately if this isn't an AVR target. +if ![istarget avr-*-*] then { + return +} + +# Return the saved values of the variable_list +proc save_variables { variable_list } { + set saved_variable { } + + foreach variable $variable_list { + upvar 1 $variable var + + set save($variable) $var + lappend saved_variable $save($variable) + } + return $saved_variable +} + +# Restore the values of the variable_list +proc restore_variables { variable_list saved_variable } { + foreach variable $variable_list value $saved_variable { + upvar 1 $variable var + set var $value + } +} + +# Filter out -mmcu= options +proc filter_out_mmcu { options } { + set reduced {} + + foreach option [ split $options ] { + if { ![ regexp "\-mmcu=.*" $option ] } { + lappend reduced $option + } + } + + return [ join $reduced " " ] +} + +# Load support procs. +load_lib gcc-dg.exp + +# If a testcase doesn't have special options, use these. +global DEFAULT_CFLAGS +if ![info exists DEFAULT_CFLAGS] then { + set DEFAULT_CFLAGS " -ansi -pedantic-errors" +} + +# If no --tool_opts were specified, use empty ones. +if ![info exists TOOL_OPTIONS] then { + set TOOL_OPTIONS "" +} + +# Initialize `dg'. +dg-init + +# Save +set variablelist [ list TOOL_OPTIONS board_info([target_info name],cflags) ] +set saved_value [ save_variables $variablelist ] + +# Filter-out -mmcu= +set TOOL_OPTIONS [ filter_out_mmcu $TOOL_OPTIONS ] +set board_info([ target_info name ],cflags) [ filter_out_mmcu $board_info([ target_info name ],cflags) ] + +# Main loop. +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.{\[cCS\],cpp}]] \ + "" $DEFAULT_CFLAGS + +# Restore +restore_variables $variablelist $saved_value + +# All done. +dg-finish Index: gcc.target/avr/mmcu/pr58545.c =================================================================== Index: gcc.target/avr/mmcu/tiny-caller-save.c =================================================================== --- gcc.target/avr/mmcu/tiny-caller-save.c (revision 243105) +++ gcc.target/avr/mmcu/tiny-caller-save.c (working copy) @@ -1,4 +1,4 @@ -/* { dg-do compile { target avr_tiny } } */ +/* { dg-do compile } */ /* { dg-options "-mmcu=avrtiny -gdwarf -Os" } */ /* This is a stripped down piece of libgcc2.c that triggerd an ICE for avr with Index: gcc.target/avr/mmcu/tiny-memx.c =================================================================== --- gcc.target/avr/mmcu/tiny-memx.c (revision 243105) +++ gcc.target/avr/mmcu/tiny-memx.c (working copy) @@ -1,4 +1,4 @@ -/* { dg-do compile { target avr_tiny } } */ +/* { dg-do compile } */ /* { dg-options "-mmcu=avrtiny" } */ const __memx char ascmonth[] = "Jan"; /* { dg-error "not supported" } */ Index: gcc.target/avr/pr58545.c =================================================================== --- gcc.target/avr/pr58545.c (revision 243104) +++ gcc.target/avr/pr58545.c (nonexistent) @@ -1,23 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "-Os -mmcu=atmega8" } */ - -typedef unsigned char uint8_t; -typedef unsigned int uint16_t; - -extern uint8_t f1 (const uint8_t*); -extern void f2 (uint8_t*, uint8_t); - -void func (uint16_t parameter, uint8_t *addr, uint8_t data) -{ - uint8_t status; - - status = f1 (addr + 8); - - addr++; - - if (*addr == parameter + 8) - *addr = parameter; - - f2 (addr, data); - f2 (addr + 8, status + 1); -} Index: gcc.target/avr/tiny-caller-save.c =================================================================== --- gcc.target/avr/tiny-caller-save.c (revision 243105) +++ gcc.target/avr/tiny-caller-save.c (nonexistent) @@ -1,78 +0,0 @@ -/* { dg-do compile { target avr_tiny } } */ -/* { dg-options "-mmcu=avrtiny -gdwarf -Os" } */ - -/* This is a stripped down piece of libgcc2.c that triggerd an ICE for avr with - "-mmcu=avrtiny -g -Os"; replace_reg_with_saved_mem would generate: - (concatn:SI [ - (reg:SI 18 r18) - (reg:SI 19 r19) - (mem/c:QI (plus:HI (reg/f:HI 28 r28) - (const_int 43 [0x2b])) [6 S1 A8]) - (mem/c:QI (plus:HI (reg/f:HI 28 r28) - (const_int 44 [0x2c])) [6 S1 A8]) - ]) */ - -typedef int SItype __attribute__ ((mode (SI))); -typedef unsigned int USItype __attribute__ ((mode (SI))); -typedef int DItype __attribute__ ((mode (DI))); -typedef unsigned int UDItype __attribute__ ((mode (DI))); -struct DWstruct -{ - SItype low, high; -}; -typedef union -{ - struct DWstruct s; - DItype ll; -} DWunion; - -UDItype -__udivmoddi4 (UDItype n, UDItype d) -{ - const DWunion nn = {.ll = n }; - const DWunion dd = {.ll = d }; - USItype d0, d1, n2; - USItype q0; - - d0 = dd.s.low; - d1 = dd.s.high; - n2 = nn.s.high; - - USItype m0; - - do - { - USItype __d1, __d0, __q1, __q0; - USItype __r1, __m; - __d1 = ((USItype) (d1) >> 16); - __d0 = ((USItype) (d1) & (((USItype) 1 << 16) - 1)); - __r1 = (n2) % __d1; - __q1 = (n2) / __d1; - __m = (USItype) __q1 *__d0; - __r1 -= __m; - __q0 = __r1 / __d1; - (q0) = (USItype) __q1 *((USItype) 1 << 16) | __q0; - } - while (0); - do - { - USItype __x0, __x1, __x2; - USItype __ul, __vl, __uh, __vh; - __ul = ((USItype) (q0) & (((USItype) 1 << 16) - 1)); - __uh = ((USItype) (q0) >> 16); - __vl = ((USItype) (d0) & (((USItype) 1 << 16) - 1)); - __vh = ((USItype) (d0) >> 16); - __x0 = (USItype) __ul *__vl; - __x1 = (USItype) __ul *__vh; - __x2 = (USItype) __uh *__vl; - __x1 += ((USItype) (__x0) >> 16); - __x1 += __x2; - (m0) = - ((USItype) (__x1) & (((USItype) 1 << 16) - 1)) * - ((USItype) 1 << 16) + - ((USItype) (__x0) & (((USItype) 1 << 16) - 1)); - } - while (0); - -return m0; -} Index: gcc.target/avr/tiny-memx.c =================================================================== --- gcc.target/avr/tiny-memx.c (revision 243105) +++ gcc.target/avr/tiny-memx.c (nonexistent) @@ -1,4 +0,0 @@ -/* { dg-do compile { target avr_tiny } } */ -/* { dg-options "-mmcu=avrtiny" } */ - -const __memx char ascmonth[] = "Jan"; /* { dg-error "not supported" } */