From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 42900 invoked by alias); 26 Feb 2015 17:52:59 -0000 Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org Received: (qmail 42890 invoked by uid 89); 26 Feb 2015 17:52:59 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Thu, 26 Feb 2015 17:52:55 +0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id t1QHqet3017210 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 26 Feb 2015 12:52:40 -0500 Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t1QHqbsd026054; Thu, 26 Feb 2015 12:52:38 -0500 Message-ID: <54EF5D65.8050605@redhat.com> Date: Thu, 26 Feb 2015 19:41:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.3.0 MIME-Version: 1.0 To: paul@mad-scientist.net CC: Jack Howarth , pinskia@gmail.com, Simon Marchi , "Paul_Koning@dell.com" , "gdb@sourceware.org" Subject: Re: format string is not a string literal References: <0AB56024-875B-4724-8ED2-A9DDB237CBFF@dell.com> <23CC7871-C616-436C-920C-4A635DC87189@dell.com> <7A311B56-C424-4C4F-A0E4-B12B65131745@gmail.com> <54EEECD9.4050909@redhat.com> <1424972642.824.33.camel@homebase> In-Reply-To: <1424972642.824.33.camel@homebase> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2015-02/txt/msg00071.txt.bz2 On 02/26/2015 05:44 PM, Paul Smith wrote: > On Thu, 2015-02-26 at 09:52 +0000, Pedro Alves wrote: >> + /* Use FMT from here on instead of complaint->fmt, to avoid "format >> + string is not a string literal" warnings. */ >> + gdb_assert (complaint->fmt == fmt); >> + >> if (complaint->file != NULL) >> - internal_vwarning (complaint->file, complaint->line, >> - complaint->fmt, args); >> + internal_vwarning (complaint->file, complaint->line, fmt, args); > > Can someone quickly explain how using fmt instead of complaint->fmt here > removes the warning? fmt is not a "string literal" either...? > > Just curious what the trick is... Simon explained it, actually: > If the function is vprintf-style, it's similar but the last argument > should be 0. It will push the argument check a level higher, where > eventually they are explicitely defined printf-style. The doc is > somewhere here [2] in the middle. That code is in this function: > static void ATTRIBUTE_PRINTF (4, 0) vcomplaint (struct complaints **c, const char *file, int line, const char *fmt, va_list args) { So here the compiler will check FMT in the caller. Thanks, Pedro Alves