
On Sat, Feb 01, 2020 at 12:26:32PM +0400, Gleb Popov wrote:
Yep, the problem is with Clang's preprocessor. Running it manually results in a bunch of
warning: missing terminating ' character [-Winvalid-pp-token]
messages.
I don't think it is just clang, the macros are not not valid C-preprocessor input. $ for cpp in gcc{7,8,8} clang{37,39,60,70}; do printf "--- CPP: %s\n" "$cpp" printf "#define foo a' = b\nfoo\n" | $cpp -Werror -E - 2>&1 printf "EXIT: $?\n" done | egrep -v '^# [0-9]|^$' --- CPP: gcc7 <stdin>:1:14: error: missing terminating ' character [-Werror] a' = b cc1: all warnings being treated as errors EXIT: 1 --- CPP: gcc8 <stdin>:1:14: error: missing terminating ' character [-Werror] a' = b cc1: all warnings being treated as errors EXIT: 1 --- CPP: gcc8 <stdin>:1:14: error: missing terminating ' character [-Werror] a' = b cc1: all warnings being treated as errors EXIT: 1 --- CPP: clang37 <stdin>:1:14: error: missing terminating ' character [-Werror,-Winvalid-pp-token] #define foo a' = b ^ a' = b 1 error generated. EXIT: 1 --- CPP: clang39 <stdin>:1:14: error: missing terminating ' character [-Werror,-Winvalid-pp-token] #define foo a' = b ^ a' = b 1 error generated. EXIT: 1 --- CPP: clang60 <stdin>:1:14: error: missing terminating ' character [-Werror,-Winvalid-pp-token] #define foo a' = b ^ a' = b 1 error generated. EXIT: 1 --- CPP: clang70 <stdin>:1:14: error: missing terminating ' character [-Werror,-Winvalid-pp-token] #define foo a' = b ^ a' = b 1 error generated. EXIT: 1
This is the case for IsValue instance, which contain typeOf' method.
Not sure if this should be reported to the package developer, GHC devs or Clang devs.
The package developer. Neither GHC nor Clang are at-fault for invalid CPP macro syntax. -- Viktor.