From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19909 invoked by alias); 21 Feb 2004 17:24:18 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 19902 invoked by uid 48); 21 Feb 2004 17:24:17 -0000 Date: Sat, 21 Feb 2004 17:24:00 -0000 From: "carlo at gcc dot gnu dot org" To: gcc-bugs@gcc.gnu.org Message-ID: <20040221172413.14238.carlo@gcc.gnu.org> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug preprocessor/14238] New: Dependency tracking and PCH X-Bugzilla-Reason: CC X-SW-Source: 2004-02/txt/msg02070.txt.bz2 List-Id: As automake generates, the usual way to create automatic dependencies is by adding something like -MD -MP -MT a.o -MF a.deps to the normal compilation line, giving the benefit of gcc's one-pass compile + make depend. If we use PCH, one might need a compilation like: g++ -include pch.h -c a.cc and thus end up with doing: g++ -include pch.h -c a.cc -MD -MP -MT a.o -MF a.deps Often, the PCH (pch.h in this case) contains a LOT of header files, and we don't want to recompile every compilation unit when we touch a single header, even when all source files are including this pch.h. So, correctly, the dependency tracking is ignoring both pch.h and whatever it includes. The real dependency information is therefore gathered from the #include's inside a.cc. And here is the problem, when a.cc does include "a.h", then this is recorded - but when a.h uses the usual inclusion gard macros, and it is including "a2.h", then we don't see that back in the output to a.deps! After all, the pre- processor thinks that gard macro of a.h is defined (which is the case because a.h was included before from pch.h) and there does not process the #include's in a.h for the same of dependency tracking. I've included a simple test case that demonstrates this. Please untar and execute the commands: make depend-pch cat a.deps The output will be: a.o: a.cc a.h a.h: Compare this with: >make depend-nopch g++-cvs-3.4 -c a.cc -MD -MP -MT a.o -MF a.deps g++-cvs-3.4 -c b.cc -MD -MP -MT b.o -MF b.deps >cat a.deps a.o: a.cc a.h a2.h a.h: a2.h: -- Summary: Dependency tracking and PCH Product: gcc Version: 3.5.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: preprocessor AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: carlo at gcc dot gnu dot org CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14238