[PATCH] Add module flags metadata to record the settings for enum and wchar width

Oliver Stannard oliver.stannard at arm.com
Thu Jun 19 06:45:52 PDT 2014


Add module flags metadata to record the settings for enum and wchar width, to allow correct ARM build attribute generation

http://reviews.llvm.org/D4212

Files:
  lib/CodeGen/CodeGenModule.cpp
  test/CodeGen/arm-metadata.c

Index: lib/CodeGen/CodeGenModule.cpp
===================================================================
--- lib/CodeGen/CodeGenModule.cpp
+++ lib/CodeGen/CodeGenModule.cpp
@@ -352,6 +352,21 @@
     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.
+  // Width of wchar_t in bytes
+  uint64_t WCharWidth = Context.getLangOpts().ShortWChar ? 1 : 0;
+  getModule().addModuleFlag(llvm::Module::Error, "short_wchar",
+                            WCharWidth);
+
+  // 1 => Enum values occupy the smallest container big enough to hold all
+  //      their values.
+  // 2 => Enum containers are 32-bit, unless they have a value which requires
+  //      a 64-bit container to represent.
+  uint64_t EnumWidth = Context.getLangOpts().ShortEnums ? 1 : 0;
+  getModule().addModuleFlag(llvm::Module::Error, "short_enum", EnumWidth);
+
+
   SimplifyPersonality();
 
   if (getCodeGenOpts().EmitDeclMetadata)
Index: test/CodeGen/arm-metadata.c
===================================================================
--- /dev/null
+++ test/CodeGen/arm-metadata.c
@@ -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 !"short_wchar", i32 0}
+// DEFAULT:   !{{[0-9]+}} = metadata !{i32 1, metadata !"short_enum", i32 0}
+
+// SHORT-WCHAR: !{{[0-9]+}} = metadata !{i32 1, metadata !"short_wchar", i32 1}
+// SHORT-WCHAR:   !{{[0-9]+}} = metadata !{i32 1, metadata !"short_enum", i32 0}
+
+// SHORT_ENUM:  !{{[0-9]+}} = metadata !{i32 1, metadata !"short_wchar", i32 0}
+// SHORT-ENUM:  !{{[0-9]+}} = metadata !{i32 1, metadata !"short_enum", i32 1}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D4212.10633.patch
Type: text/x-patch
Size: 2156 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140619/fcec2443/attachment.bin>


More information about the cfe-commits mailing list