<div dir="ltr">Why are you committing while all the builds are broken? This isn't right.<div><br></div><div>Eli</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Jun 20, 2014 at 5:43 AM, Oliver Stannard <span dir="ltr"><<a href="mailto:oliver.stannard@arm.com" target="_blank">oliver.stannard@arm.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: olista01<br>
Date: Fri Jun 20 07:43:07 2014<br>
New Revision: 211354<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=211354&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=211354&view=rev</a><br>
Log:<br>
Add module flags metadata to record the settings for enum and wchar width<br>
<br>
Add module flags metadata to record the settings for enum and wchar width,<br>
to allow correct ARM build attribute generation<br>
<br>
<br>
Added:<br>
    cfe/trunk/test/CodeGen/arm-metadata.c<br>
Modified:<br>
    cfe/trunk/lib/CodeGen/CodeGenModule.cpp<br>
<br>
Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=211354&r1=211353&r2=211354&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=211354&r1=211353&r2=211354&view=diff</a><br>


==============================================================================<br>
--- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)<br>
+++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Fri Jun 20 07:43:07 2014<br>
@@ -352,6 +352,23 @@ void CodeGenModule::Release() {<br>
     getModule().addModuleFlag(llvm::Module::Warning, "Debug Info Version",<br>
                               llvm::DEBUG_METADATA_VERSION);<br>
<br>
+  // We need to record the widths of enums and wchar_t, so that we can generate<br>
+  // the correct build attributes in the ARM backend.<br>
+       llvm::Triple::ArchType Arch = Context.getTargetInfo().getTriple().getArch();<br>
+  if (   Arch == llvm::Triple::arm<br>
+      || Arch == llvm::Triple::armeb<br>
+      || Arch == llvm::Triple::thumb<br>
+      || Arch == llvm::Triple::thumbeb) {<br>
+    // Width of wchar_t in bytes<br>
+    uint64_t WCharWidth =<br>
+        Context.getTypeSizeInChars(Context.getWideCharType()).getQuantity();<br>
+    getModule().addModuleFlag(llvm::Module::Error, "wchar_size", WCharWidth);<br>
+<br>
+    // The minimum width of an enum in bytes<br>
+    uint64_t EnumWidth = Context.getLangOpts().ShortEnums ? 1 : 4;<br>
+    getModule().addModuleFlag(llvm::Module::Error, "min_enum_size", EnumWidth);<br>
+  }<br>
+<br>
   SimplifyPersonality();<br>
<br>
   if (getCodeGenOpts().EmitDeclMetadata)<br>
<br>
Added: cfe/trunk/test/CodeGen/arm-metadata.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/arm-metadata.c?rev=211354&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/arm-metadata.c?rev=211354&view=auto</a><br>


==============================================================================<br>
--- cfe/trunk/test/CodeGen/arm-metadata.c (added)<br>
+++ cfe/trunk/test/CodeGen/arm-metadata.c Fri Jun 20 07:43:07 2014<br>
@@ -0,0 +1,13 @@<br>
+// REQUIRES: arm-registered-target<br>
+// RUN: %clang_cc1 -triple armv7a-linux-gnueabi -emit-llvm -o - %s | FileCheck -check-prefix=DEFAULT %s<br>
+// RUN: %clang_cc1 -triple armv7a-linux-gnueabi -emit-llvm -o - %s -fshort-enums | FileCheck -check-prefix=SHORT-ENUM %s<br>
+// RUN: %clang_cc1 -triple armv7a-linux-gnueabi -emit-llvm -o - %s -fshort-wchar | FileCheck -check-prefix=SHORT-WCHAR %s<br>
+<br>
+// DEFAULT:  !{{[0-9]+}} = metadata !{i32 1, metadata !"wchar_size", i32 4}<br>
+// DEFAULT:   !{{[0-9]+}} = metadata !{i32 1, metadata !"min_enum_size", i32 4}<br>
+<br>
+// SHORT-WCHAR: !{{[0-9]+}} = metadata !{i32 1, metadata !"wchar_size", i32 2}<br>
+// SHORT-WCHAR:   !{{[0-9]+}} = metadata !{i32 1, metadata !"min_enum_size", i32 4}<br>
+<br>
+// SHORT_ENUM:  !{{[0-9]+}} = metadata !{i32 1, metadata !"wchar_size", i32 4}<br>
+// SHORT-ENUM:  !{{[0-9]+}} = metadata !{i32 1, metadata !"min_enum_size", i32 1}<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>