30 clang::DiagnosticOptions diag_opts;
31 clang::DiagnosticsEngine diags(
32 llvm::makeIntrusiveRefCnt<clang::DiagnosticIDs>(), diag_opts,
33 new clang::IgnoringDiagConsumer());
35 return std::unique_ptr<clang::TargetInfo>(
36 clang::TargetInfo::CreateTargetInfo(diags, target_opts));
46 clang::TargetOptions target_opts;
47 target_opts.Triple = triple.str();
50 return llvm::createStringErrorV(
"Unknown Clang target: '{0}'",
53 auto bytes = [](
unsigned bits) -> uint32_t {
return bits / 8; };
55 sizes.
bool_size = bytes(target->getBoolWidth());
56 sizes.
short_size = bytes(target->getShortWidth());
57 sizes.
int_size = bytes(target->getIntWidth());
58 sizes.
long_size = bytes(target->getLongWidth());
60 sizes.
wchar_size = bytes(target->getWCharWidth());
61 sizes.
char16_size = bytes(target->getChar16Width());
62 sizes.
char32_size = bytes(target->getChar32Width());
63 sizes.
float_size = bytes(target->getFloatWidth());
64 sizes.
double_size = bytes(target->getDoubleWidth());
66 sizes.
pointer_size = bytes(target->getPointerWidth(clang::LangAS::Default));
69 semantics.
half = &target->getHalfFormat();
70 semantics.
single = &target->getFloatFormat();
71 semantics.
double_ = &target->getDoubleFormat();
72 semantics.
long_double = &target->getLongDoubleFormat();
73 semantics.
float128 = &target->getFloat128Format();
75 return LanguageOpts(std::move(triple), std::move(target), sizes, semantics);