diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-05-22 19:43:45 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-05-22 19:43:45 +0000 | 
| commit | aa803409c3bd3930126db630c29f63d42f255153 (patch) | |
| tree | 042106605c08352895ba4383ef97eae88b6b31aa /lib/CodeGen/CodeGenModule.cpp | |
| parent | 1ce08792766261dcaa25d8215f9d1c2f70d7b7e9 (diff) | |
Notes
Diffstat (limited to 'lib/CodeGen/CodeGenModule.cpp')
| -rw-r--r-- | lib/CodeGen/CodeGenModule.cpp | 20 | 
1 files changed, 14 insertions, 6 deletions
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index a0254797ea43..9d0f802ece07 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -45,6 +45,7 @@  #include "clang/Frontend/CodeGenOptions.h"  #include "clang/Sema/SemaDiagnostic.h"  #include "llvm/ADT/Triple.h" +#include "llvm/Analysis/TargetLibraryInfo.h"  #include "llvm/IR/CallSite.h"  #include "llvm/IR/CallingConv.h"  #include "llvm/IR/DataLayout.h" @@ -113,6 +114,7 @@ CodeGenModule::CodeGenModule(ASTContext &C, const HeaderSearchOptions &HSO,    Int8PtrPtrTy = Int8PtrTy->getPointerTo(0);    AllocaInt8PtrTy = Int8Ty->getPointerTo(        M.getDataLayout().getAllocaAddrSpace()); +  ASTAllocaAddressSpace = getTargetCodeGenInfo().getASTAllocaAddressSpace();    RuntimeCC = getTargetCodeGenInfo().getABIInfo().getRuntimeCC();    BuiltinCC = getTargetCodeGenInfo().getABIInfo().getBuiltinCC(); @@ -464,18 +466,24 @@ void CodeGenModule::Release() {      getModule().addModuleFlag(llvm::Module::Warning, "Debug Info Version",                                llvm::DEBUG_METADATA_VERSION); +  // Width of wchar_t in bytes +  uint64_t WCharWidth = +      Context.getTypeSizeInChars(Context.getWideCharType()).getQuantity(); +  assert(LangOpts.ShortWChar || +         llvm::TargetLibraryInfoImpl::getTargetWCharSize(Target.getTriple()) == +                 Target.getWCharWidth() / 8 && +             "LLVM wchar_t size out of sync"); +    // We need to record the widths of enums and wchar_t, so that we can generate -  // the correct build attributes in the ARM backend. +  // the correct build attributes in the ARM backend. wchar_size is also used by +  // TargetLibraryInfo. +  getModule().addModuleFlag(llvm::Module::Error, "wchar_size", WCharWidth); +    llvm::Triple::ArchType Arch = Context.getTargetInfo().getTriple().getArch();    if (   Arch == llvm::Triple::arm        || Arch == llvm::Triple::armeb        || Arch == llvm::Triple::thumb        || Arch == llvm::Triple::thumbeb) { -    // Width of wchar_t in bytes -    uint64_t WCharWidth = -        Context.getTypeSizeInChars(Context.getWideCharType()).getQuantity(); -    getModule().addModuleFlag(llvm::Module::Error, "wchar_size", WCharWidth); -      // The minimum width of an enum in bytes      uint64_t EnumWidth = Context.getLangOpts().ShortEnums ? 1 : 4;      getModule().addModuleFlag(llvm::Module::Error, "min_enum_size", EnumWidth);  | 
