Следующий простой тестовый файл дает мне ошибку времени компиляции с подсказкой «мастер» из зеркала Clang на github при компиляции с -fmodules
с использованием команды, показанной ниже. Мне интересно, является ли это ошибкой с новой экспериментальной функцией модуля для Clang — может быть, проблема с реализацией карт модулей для стандартной библиотеки — или я что-то делаю неправильно. Ошибка по-прежнему появляется, если я добавляю -fbuiltin-module-map
к команде. Интересно, что ошибка больше не появляется, если я заменяю stdint.h
на cstdint
.
#include <stdint.h>
uint64_t foo;
Вот моя команда компиляции с сообщением об ошибке:
anhall@leviathan: /Users/anhall/impersonal/code/llvm-reflexpr/install/bin/clang++ -o module-uint64_t-test.o -c module-uint64_t-test.cpp --std=c++1z -fmodules
module-uint64_t-test.cpp:3:1: error: missing '#include <_types/_uint64_t.h>'; declaration of 'uint64_t' must be imported from module 'Darwin.POSIX._types._uint64_t' before it is
required
uint64_t foo;
^
/usr/include/_types/_uint64_t.h:31:28: note: previous declaration is here
typedef unsigned long long uint64_t;
Информация о сборке, которую я использую: это форк Matus Chochlik зеркала github Clang; но я настроен на коммит, который соответствует (на тот момент) главе «мастера» в исходном зеркале clang git (другими словами, он не включает коммиты из ветки «reflexpr» функции Матуса Чочлика):
anhall@leviathan: /Users/anhall/impersonal/code/llvm-reflexpr/install/bin/clang++ -v
clang version 4.0.0 (https://github.com/matus-chochlik/clang.git 1fa85026bfc23f5cda0b89598bd2056b817ae9d4) (https://github.com/llvm-mirror/llvm.git 069db88a3b2cae52023664fdd30378d3adc26566)
Target: x86_64-apple-darwin15.6.0
Thread model: posix
InstalledDir: /Users/anhall/impersonal/code/llvm-reflexpr/install/bin
(Примечание: подозревая, что это ошибка, я также отправил вышеупомянутый отчет по электронной почте администраторам LLVM и намерен отправить его в LLVM Bugzilla, если они ответят и дадут мне логин. Но я подумал, что опубликую его и здесь, на случай, если я что-то не так понял или это интересно всем, кто работает с поддержкой модулей Clang C++1z+)
Редактировать 1:
Если я добавлю -v
в командную строку компиляции, это покажет, что он действительно ищет каталоги include
моей сборки, а не каталоги другой сборки Clang, например:
#include "..." search starts here:
#include <...> search starts here:
/Users/anhall/impersonal/code/llvm-reflexpr/install/bin/../include/c++/v1
/usr/local/include
/Users/anhall/impersonal/code/llvm-reflexpr/install/bin/../lib/clang/4.0.0/include
/usr/include
/System/Library/Frameworks (framework directory)
/Library/Frameworks (framework directory)
End of search list.
Я не знаю, может ли проблема быть во взаимодействии между заголовками моей сборки Clang и системными заголовками OS X в /usr/local/include
и /usr/include