Bug 11709 - Test suite failure with gcc 6
Test suite failure with gcc 6
Status: RESOLVED MOVED
Product: ccache
Classification: Unclassified
Component: ccache
3.2.4
All All
: P5 normal
: ---
Assigned To: Joel Rosdahl
Joel Rosdahl
:
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2016-02-03 21:23 UTC by Ville Skyttä
Modified: 2016-06-11 16:58 UTC (History)
0 users

See Also:


Attachments
Test dir contents (23.25 KB, application/x-xz)
2016-02-03 21:23 UTC, Ville Skyttä
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Ville Skyttä 2016-02-03 21:23:03 UTC
Created attachment 11805 [details]
Test dir contents

Test suite fails when building with gcc 6, Fedora development:

CC='gcc' ./test.sh
compiler: /usr/lib64/ccache/gcc
version: gcc (GCC) 6.0.0 20160129 (Red Hat 6.0.0-0.7) Copyright (C) 2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
test dir: testdir.15690
starting testsuite base
SUITE: "base", TEST: "-D not hashed" - Expected "cache hit (preprocessed)" to be 14, got 13
cache directory                     /builddir/build/BUILD/ccache-3.2.4/testdir.15690/.ccache
primary config                      /builddir/build/BUILD/ccache-3.2.4/testdir.15690/.ccache/ccache.conf
secondary config      (readonly)    /etc/ccache.conf
cache hit (direct)                     0
cache hit (preprocessed)              13
cache miss                            40
called for link                        2
called for preprocessing               2
multiple source files                  1
compiler produced stdout               1
couldn't find the compiler             1
bad compiler arguments                 1
unsupported source language            2
unsupported compiler option            1
output to a non-regular file           1
no input file                          1
files in cache                         3
cache size                          12.3 kB
max cache size                       5.0 GB
TEST FAILED
Test data and log file have been left in testdir.15690
Makefile:82: recipe for target 'test' failed
Comment 1 Ville Skyttä 2016-02-22 12:00:46 UTC
FWIW, comments from the Fedora gcc 6 rebuild summary:

https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/DH7M2ADHM6XCRFTRRSKZD6MWFUJKHBZK/

| ccache-3.2.4-1.fc24.src.rpm
| ccache mis-uses the preprocessor; it should be tweaked to use -fdirectives-only
Comment 2 Joel Rosdahl 2016-06-09 20:45:48 UTC
Reproduced with GCC 6.1.0:

% touch empty.c
% gcc -E empty.c -o nofoo.i
% gcc -E empty.c -DFOO=1 -o foo.i
% gcc -E empty.c -DFOO=1 -DBAR=2 -o foobar.i
% sha1sum nofoo.i foo.i foobar.i
ba3948dae05201f00f0d657779686ea5f9a6647f  nofoo.i
a86a7bf21f6e47d0de75ef0973d393952894179f  foo.i
a86a7bf21f6e47d0de75ef0973d393952894179f  foobar.i

Right, there's a difference between zero -D options and one or several -D options:

% diff -u nofoo.i foo.i
--- nofoo.i     2016-06-09 22:26:07.112737465 +0200
+++ foo.i       2016-06-09 22:26:00.527937097 +0200
@@ -1,7 +1,6 @@
 # 1 "empty.c"
 # 1 "<built-in>"
 # 1 "<command-line>"
-# 31 "<command-line>"
 # 1 "/usr/include/stdc-predef.h" 1 3 4
-# 32 "<command-line>" 2
+# 1 "<command-line>" 2
 # 1 "empty.c"
% diff -u foo.i foobar.i

OK, so with no -D options, gcc for some reason adds a two "<command-line>" entries but with one or several -D options it only adds one. Looks like the latter behavior also is what GCC 5 does.

I guess we have to teach ccache to ignore "<command-line>" entries or so.

Ville: Or do you think that this is a GCC regression that will be fixed?

> | ccache-3.2.4-1.fc24.src.rpm
> | ccache mis-uses the preprocessor; it should be tweaked to use
> -fdirectives-only

I don't think that comment has anything to do with the reported problem since adding -fdirectives-only only makes things worse: then "#define FOO 1" will be added to the preprocessed output, making it completely impossible to get ccache hits for irrelevant -D options (i.e. those that don't affect the outcome).

By the way, I find the choice of words a bit surprising. ccache has used the preprocessor method many years before -fdirectives-only even existed.

Also, ccache can't just be tweaked to use -fdirectives-only since it must work with other compilers that lack -fdirectives-only, for instance older GCC versions.
Comment 3 Ville Skyttä 2016-06-10 07:27:36 UTC
No idea wrt regression/not, I suggest asking GCC devs.

(And just to clarify, comment 1 was me just forwarding the message here, I don't have competence to have an informed opinion on it.)
Comment 4 Joel Rosdahl 2016-06-11 16:58:35 UTC
(In reply to Ville Skyttä from comment #3)
> (And just to clarify, comment 1 was me just forwarding the message here,
> I don't have competence to have an informed opinion on it.)

Yes, that wasn't unclear. I just took the opportunity to vent some minor frustration. :)
Comment 5 Joel Rosdahl 2016-06-11 16:58:53 UTC
Moved to https://github.com/ccache/ccache/issues/96.