From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 62593 invoked by alias); 3 Jul 2017 16:30:59 -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 62422 invoked by uid 89); 3 Jul 2017 16:30:50 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=Hx-languages-length:1877 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 ESMTP; Mon, 03 Jul 2017 16:30:49 +0000 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3F76AC04B936 for ; Mon, 3 Jul 2017 16:30:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 3F76AC04B936 Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=law@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 3F76AC04B936 Received: from localhost.localdomain (ovpn-117-103.phx2.redhat.com [10.3.117.103]) by smtp.corp.redhat.com (Postfix) with ESMTP id EA4555D960; Mon, 3 Jul 2017 16:30:47 +0000 (UTC) Subject: Re: [PATCH 3/3] C: hints for missing stdlib includes for macros and types To: David Malcolm , gcc-patches@gcc.gnu.org References: <1494006675-28033-1-git-send-email-dmalcolm@redhat.com> <1494006675-28033-3-git-send-email-dmalcolm@redhat.com> From: Jeff Law Message-ID: Date: Mon, 03 Jul 2017 16:30:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.0 MIME-Version: 1.0 In-Reply-To: <1494006675-28033-3-git-send-email-dmalcolm@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2017-07/txt/msg00125.txt.bz2 On 05/05/2017 11:51 AM, David Malcolm wrote: > The C frontend already "knows" about many common functions in > the C standard library: > > test.c: In function 'test': > test.c:3:3: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration] > printf ("hello world\n"); > ^~~~~~ > test.c:3:3: warning: incompatible implicit declaration of built-in function 'printf' > test.c:3:3: note: include '' or provide a declaration of 'printf' > > and which header file they are in. > > However it doesn't know about various types and macros: > > test.c:1:13: error: 'NULL' undeclared here (not in a function) > void *ptr = NULL; > ^~~~ > > This patch uses the name_hint/deferred_diagnostic machinery to > add hints for missing C standard library headers for some of the > most common type and macro names. > > For example, the above becomes: > test.c:1:13: error: 'NULL' undeclared here (not in a function) > void *ptr = NULL; > ^~~~ > test.c:1:13: note: 'NULL' is defined in header ''; did you forget to '#include '? > > If the patch to add fix-it hints for missing #includes is approved: > https://gcc.gnu.org/ml/gcc-patches/2017-05/msg00321.html > then it's trivial to add a fix-it hint to the note. > > gcc/c/ChangeLog: > * c-decl.c (get_c_name_hint): New function. > (class suggest_missing_header): New class. > (lookup_name_fuzzy): Call get_c_name_hint and use it to > suggest missing headers to the user. > > gcc/testsuite/ChangeLog: > * gcc.dg/spellcheck-stdlib.c: New test case. OK once prereqs are approved. FWIW, I'm getting a little concerned that we're adding a lot of overhead to the error paths -- that often doesn't matter. But sometimes it does (testcase reduction, errors with machine generated code, etc). Something to be aware of. jeff