Ошибки Clang++ -fmodules с использованием типов после #include ‹cstdint›

Следующий простой тестовый файл дает мне ошибку времени компиляции с подсказкой «мастер» из зеркала 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


person Anthony Hall    schedule 07.12.2016    source источник


Ответы (1)


Это была проблема в libc++, которую я исправил в r287690. Если вы обновите свою пользовательскую установку Clang/libc++, эти проблемы должны быть исправлены.

За последний месяц я исправил ряд проблем, связанных с использованием libc++ с модулями. Буквально только вчера я прошел все тесты libc++ с включенными модулями.

person EricWF    schedule 08.12.2016
comment
Я очень рад, что вы сказали, что исправили это, потому что я обновил свой исходный код libcxx сегодня и собрал его, просто чтобы посмотреть, случайно ли ошибка не была исправлена ​​​​с момента моего последнего обновления, и это все еще не работал для меня. Но, увидев ваш ответ, я был мотивирован искать усерднее. Оказывается, хотя я и запускал make для LLVM, я еще не запускал make install. Дерп. Сейчас это работает. Спасибо большое. - person Anthony Hall; 08.12.2016
comment
Без проблем! Чем больше людей тестируют новые возможности C++, тем лучше. - person EricWF; 08.12.2016