Bug 33173

Summary: препроцессору не передается -fstack-protector => .gch файлы не включаются
Product: Sisyphus Reporter: Big Benis <big.benis>
Component: gcc7Assignee: Nobody's working on this, feel free to take it <nobody>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: vseleznv
Version: unstable   
Hardware: all   
OS: Linux   

Description Big Benis 2017-02-26 05:15:32 MSK
джисиси очень сильно глючит, в результате чего не проходит тест свит у сосикеша.
В частности сосикеш выполнят такой тест: компилирует заголовочный файл в .gch, удаляет оригинал, после чего скомпилированный заголовок должен в определенных случаях включаться препроцессором эз из.  А он не включается!

$ touch foo.h
$ gcc -c foo.h                                         
$ rm foo.h

$ gcc-6 -Winvalid-pch -fpch-preprocess -include foo.h -E - </dev/null
# 1 "<stdin>"                                                                              
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
cc1: warning: ./foo.h.gch: not used because `__SSP__' not defined [-Winvalid-pch]
cc1: error: one or more PCH files were found, but they were invalid
cc1: fatal error: foo.h: No such file or directory
compilation terminated.

А если передать препроцессору -fstack-protector, то включается нормально:

$ gcc-6 -fstack-protector -Winvalid-pch -fpch-preprocess -include foo.h -E - </dev/null               1
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
#pragma GCC pch_preprocess "./foo.h.gch"
# 1 "<stdin>"

И действительно, разница на один этот дифайн __SSP__:

$ diff -U1 <(cpp  -dM </dev/null) <(cpp -fstack-protector -dM </dev/null)                                                   @@ -198,2 +198,3 @@
 #define __INT_LEAST8_MAX__ 0x7f
+#define __SSP__ 1
 #define __SIZEOF_INT128__ 16

Получается интеграция -fstack-protector в джисиси не совсем симлис.