Add module flags metadata to record the settings for enum and wchar width
Add module flags metadata to record the settings for enum and wchar width, to allow correct ARM build attribute generation llvm-svn: 211354
This commit is contained in:
parent
c2a363aa33
commit
e3a4fb6512
|
@ -352,6 +352,23 @@ void CodeGenModule::Release() {
|
|||
getModule().addModuleFlag(llvm::Module::Warning, "Debug Info Version",
|
||||
llvm::DEBUG_METADATA_VERSION);
|
||||
|
||||
// We need to record the widths of enums and wchar_t, so that we can generate
|
||||
// the correct build attributes in the ARM backend.
|
||||
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);
|
||||
}
|
||||
|
||||
SimplifyPersonality();
|
||||
|
||||
if (getCodeGenOpts().EmitDeclMetadata)
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
// REQUIRES: arm-registered-target
|
||||
// RUN: %clang_cc1 -triple armv7a-linux-gnueabi -emit-llvm -o - %s | FileCheck -check-prefix=DEFAULT %s
|
||||
// RUN: %clang_cc1 -triple armv7a-linux-gnueabi -emit-llvm -o - %s -fshort-enums | FileCheck -check-prefix=SHORT-ENUM %s
|
||||
// RUN: %clang_cc1 -triple armv7a-linux-gnueabi -emit-llvm -o - %s -fshort-wchar | FileCheck -check-prefix=SHORT-WCHAR %s
|
||||
|
||||
// DEFAULT: !{{[0-9]+}} = metadata !{i32 1, metadata !"wchar_size", i32 4}
|
||||
// DEFAULT: !{{[0-9]+}} = metadata !{i32 1, metadata !"min_enum_size", i32 4}
|
||||
|
||||
// SHORT-WCHAR: !{{[0-9]+}} = metadata !{i32 1, metadata !"wchar_size", i32 2}
|
||||
// SHORT-WCHAR: !{{[0-9]+}} = metadata !{i32 1, metadata !"min_enum_size", i32 4}
|
||||
|
||||
// SHORT_ENUM: !{{[0-9]+}} = metadata !{i32 1, metadata !"wchar_size", i32 4}
|
||||
// SHORT-ENUM: !{{[0-9]+}} = metadata !{i32 1, metadata !"min_enum_size", i32 1}
|
Loading…
Reference in New Issue