<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Hi Alexander,
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Sorry, forgot to run valgrind.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I’m gonna commit quick follow-up (see attach), would you please take a look?
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Thanks, Vladimir<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Alexander Kornienko [mailto:alexfh@google.com]
<br>
<b>Sent:</b> 23 September 2015 15:41<br>
<b>To:</b> Vladimir Sukharev<br>
<b>Cc:</b> cfe-commits<br>
<b>Subject:</b> Re: r248370 - [ARM] Fix crash "-target arm -mcpu=generic", without "-march="<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<div>
<p class="MsoNormal">On Wed, Sep 23, 2015 at 11:29 AM, Vladimir Sukharev via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>> wrote:<o:p></o:p></p>
<p class="MsoNormal">Author: vsukharev<br>
Date: Wed Sep 23 04:29:32 2015<br>
New Revision: 248370<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=248370&view=rev" target="_blank">
http://llvm.org/viewvc/llvm-project?rev=248370&view=rev</a><br>
Log:<br>
[ARM] Fix crash "-target arm -mcpu=generic", without "-march="<br>
<br>
An assertion hit has been fixed for cmdlines like<br>
<br>
$ clang --target=arm-linux-gnueabi -mcpu=generic hello.c<br>
<br>
Related to: <a href="http://reviews.llvm.org/rL245445" target="_blank">http://reviews.llvm.org/rL245445</a><br>
<br>
Reviewers: rengolin<br>
<br>
Subscribers: cfe-commits<br>
<br>
Differential Revision: <a href="http://reviews.llvm.org/D13013" target="_blank">http://reviews.llvm.org/D13013</a><br>
<br>
<br>
Modified:<br>
    cfe/trunk/lib/Driver/ToolChain.cpp<br>
    cfe/trunk/lib/Driver/Tools.cpp<br>
    cfe/trunk/lib/Driver/Tools.h<br>
    cfe/trunk/test/Driver/aarch64-cpus.c<br>
    cfe/trunk/test/Driver/arm-cortex-cpus.c<br>
<br>
Modified: cfe/trunk/lib/Driver/ToolChain.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChain.cpp?rev=248370&r1=248369&r2=248370&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChain.cpp?rev=248370&r1=248369&r2=248370&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/ToolChain.cpp (original)<br>
+++ cfe/trunk/lib/Driver/ToolChain.cpp Wed Sep 23 04:29:32 2015<br>
@@ -317,8 +317,7 @@ std::string ToolChain::ComputeLLVMTriple<br>
             ? tools::arm::getARMCPUForMArch(MArch, Triple).str()<br>
             : tools::arm::getARMTargetCPU(MCPU, MArch, Triple);<br>
     StringRef Suffix =<br>
-      tools::arm::getLLVMArchSuffixForARM(CPU,<br>
-                                          tools::arm::getARMArch(MArch, Triple));<br>
+      tools::arm::getLLVMArchSuffixForARM(CPU, MArch, Triple);<br>
     bool ThumbDefault = Suffix.startswith("v6m") || Suffix.startswith("v7m") ||<br>
       Suffix.startswith("v7em") ||<br>
       (Suffix.startswith("v7") && getTriple().isOSBinFormatMachO());<br>
<br>
Modified: cfe/trunk/lib/Driver/Tools.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=248370&r1=248369&r2=248370&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=248370&r1=248369&r2=248370&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/Tools.cpp (original)<br>
+++ cfe/trunk/lib/Driver/Tools.cpp Wed Sep 23 04:29:32 2015<br>
@@ -560,8 +560,7 @@ static void checkARMCPUName(const Driver<br>
                             llvm::StringRef CPUName, llvm::StringRef ArchName,<br>
                             const llvm::Triple &Triple) {<br>
   std::string CPU = arm::getARMTargetCPU(CPUName, ArchName, Triple);<br>
-  std::string Arch = arm::getARMArch(ArchName, Triple);<br>
-  if (arm::getLLVMArchSuffixForARM(CPU, Arch).empty())<br>
+  if (arm::getLLVMArchSuffixForARM(CPU, ArchName, Triple).empty())<br>
     D.Diag(diag::err_drv_clang_unsupported) << A->getAsString(Args);<br>
 }<br>
<br>
@@ -6087,7 +6086,7 @@ const std::string arm::getARMArch(String<br>
     std::string CPU = llvm::sys::getHostCPUName();<br>
     if (CPU != "generic") {<br>
       // Translate the native cpu into the architecture suffix for that CPU.<br>
-      StringRef Suffix = arm::getLLVMArchSuffixForARM(CPU, MArch);<br>
+      StringRef Suffix = arm::getLLVMArchSuffixForARM(CPU, MArch, Triple);<br>
       // If there is no valid architecture suffix for this CPU we don't know how<br>
       // to handle it, so return no architecture.<br>
       if (Suffix.empty())<br>
@@ -6133,12 +6132,19 @@ std::string arm::getARMTargetCPU(StringR<br>
 /// getLLVMArchSuffixForARM - Get the LLVM arch name to use for a particular<br>
 /// CPU  (or Arch, if CPU is generic).<br>
 // FIXME: This is redundant with -mcpu, why does LLVM use this.<br>
-StringRef arm::getLLVMArchSuffixForARM(StringRef CPU, StringRef Arch) {<br>
-  if (CPU == "generic")<br>
-    return llvm::ARM::getSubArch(<br>
-        llvm::ARM::parseArch(Arch));<br>
-<br>
-  unsigned ArchKind = llvm::ARM::parseCPUArch(CPU);<br>
+StringRef arm::getLLVMArchSuffixForARM(StringRef CPU, StringRef Arch,<br>
+                                       const llvm::Triple &Triple) {<br>
+  unsigned ArchKind;<br>
+  Arch = tools::arm::getARMArch(Arch, Triple);<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">arm::getARMArch returns std::string, so here you're ending up with a dangling StringRef. Please fix or revert.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<p class="MsoNormal">+  if (CPU == "generic") {<br>
+    ArchKind = llvm::ARM::parseArch(Arch);<br>
+    if (ArchKind == llvm::ARM::AK_INVALID)<br>
+      // In case of generic Arch, i.e. "arm",<br>
+      // extract arch from default cpu of the Triple<br>
+      ArchKind = llvm::ARM::parseCPUArch(Triple.getARMCPUForArch(Arch));<br>
+  } else {<br>
+    ArchKind = llvm::ARM::parseCPUArch(CPU);<br>
+  }<br>
   if (ArchKind == llvm::ARM::AK_INVALID)<br>
     return "";<br>
   return llvm::ARM::getSubArch(ArchKind);<br>
<br>
Modified: cfe/trunk/lib/Driver/Tools.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.h?rev=248370&r1=248369&r2=248370&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.h?rev=248370&r1=248369&r2=248370&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/Tools.h (original)<br>
+++ cfe/trunk/lib/Driver/Tools.h Wed Sep 23 04:29:32 2015<br>
@@ -246,7 +246,8 @@ std::string getARMTargetCPU(StringRef CP<br>
 const std::string getARMArch(StringRef Arch,<br>
                              const llvm::Triple &Triple);<br>
 StringRef getARMCPUForMArch(StringRef Arch, const llvm::Triple &Triple);<br>
-StringRef getLLVMArchSuffixForARM(StringRef CPU, StringRef Arch);<br>
+StringRef getLLVMArchSuffixForARM(StringRef CPU, StringRef Arch,<br>
+                                  const llvm::Triple &Triple);<br>
<br>
 void appendEBLinkFlags(const llvm::opt::ArgList &Args, ArgStringList &CmdArgs,<br>
                        const llvm::Triple &Triple);<br>
<br>
Modified: cfe/trunk/test/Driver/aarch64-cpus.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/aarch64-cpus.c?rev=248370&r1=248369&r2=248370&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/aarch64-cpus.c?rev=248370&r1=248369&r2=248370&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/Driver/aarch64-cpus.c (original)<br>
+++ cfe/trunk/test/Driver/aarch64-cpus.c Wed Sep 23 04:29:32 2015<br>
@@ -1,12 +1,17 @@<br>
 // Check target CPUs are correctly passed.<br>
<br>
 // RUN: %clang -target aarch64 -### -c %s 2>&1 | FileCheck -check-prefix=GENERIC %s<br>
+// RUN: %clang -target aarch64 -mcpu=generic -### -c %s 2>&1 | FileCheck -check-prefix=GENERIC %s<br>
 // RUN: %clang -target aarch64 -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=GENERIC %s<br>
+// RUN: %clang -target aarch64 -mlittle-endian -mcpu=generic -### -c %s 2>&1 | FileCheck -check-prefix=GENERIC %s<br>
 // RUN: %clang -target aarch64_be -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=GENERIC %s<br>
+// RUN: %clang -target aarch64_be -mlittle-endian -mcpu=generic -### -c %s 2>&1 | FileCheck -check-prefix=GENERIC %s<br>
 // GENERIC: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "generic"<br>
<br>
 // RUN: %clang -target arm64 -### -c %s 2>&1 | FileCheck -check-prefix=ARM64-GENERIC %s<br>
+// RUN: %clang -target arm64 -mcpu=generic -### -c %s 2>&1 | FileCheck -check-prefix=ARM64-GENERIC %s<br>
 // RUN: %clang -target arm64 -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=ARM64-GENERIC %s<br>
+// RUN: %clang -target arm64 -mlittle-endian -mcpu-generic -### -c %s 2>&1 | FileCheck -check-prefix=ARM64-GENERIC %s<br>
<br>
 // ARM64-GENERIC: "-cc1"{{.*}} "-triple" "arm64{{.*}}" "-target-cpu" "generic"<br>
<br>
<br>
Modified: cfe/trunk/test/Driver/arm-cortex-cpus.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/arm-cortex-cpus.c?rev=248370&r1=248369&r2=248370&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/arm-cortex-cpus.c?rev=248370&r1=248369&r2=248370&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/Driver/arm-cortex-cpus.c (original)<br>
+++ cfe/trunk/test/Driver/arm-cortex-cpus.c Wed Sep 23 04:29:32 2015<br>
@@ -1,4 +1,16 @@<br>
 // ================== Check default CPU on each major architecture<br>
+// RUN: %clang -target arm -mcpu=generic -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-GENERIC %s<br>
+// CHECK-GENERIC: "-cc1"{{.*}} "-triple" "armv4t-{{.*}} "-target-cpu" "generic"<br>
+<br>
+// RUN: %clang -target armeb -mcpu=generic -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-GENERIC %s<br>
+// CHECK-BE-GENERIC: "-cc1"{{.*}} "-triple" "armebv4t-{{.*}} "-target-cpu" "generic"<br>
+<br>
+// RUN: %clang -target arm -mthumb -mcpu=generic -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-GENERIC-THUMB %s<br>
+// CHECK-GENERIC-THUMB: "-cc1"{{.*}} "-triple" "thumbv4t-{{.*}} "-target-cpu" "generic"<br>
+<br>
+// RUN: %clang -target armeb -mthumb -mcpu=generic -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-GENERIC-THUMB %s<br>
+// CHECK-BE-GENERIC-THUMB: "-cc1"{{.*}} "-triple" "thumbebv4t-{{.*}} "-target-cpu" "generic"<br>
+<br>
 // RUN: %clang -target armv4t -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V4T %s<br>
 // RUN: %clang -target arm -march=armv4t -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V4T %s<br>
 // CHECK-V4T: "-cc1"{{.*}} "-triple" "armv4t-{{.*}} "-target-cpu" "arm7tdmi"<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><o:p></o:p></p>
</blockquote>
</div>
<p class="MsoNormal"><br>
<br clear="all">
<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p class="MsoNormal">-- <o:p></o:p></p>
<div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="color:#666666;border:solid #D50F25 1.5pt;padding:2.0pt">Alexander Kornienko |</span><span style="color:#666666;border:solid #3369E8 1.5pt;padding:2.0pt"> Software Engineer |</span><span style="color:#666666;border:solid #009939 1.5pt;padding:2.0pt"> </span><span style="border:solid #009939 1.5pt;padding:2.0pt"><a href="mailto:alexfh@google.com" target="_blank"><span style="color:#1155CC">alexfh@google.com</span></a> |</span><span style="border:solid #EEB211 1.5pt;padding:2.0pt"> Google
 Germany, Munich</span><o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<br>
<font face="Arial" color="Black" size="2">-- IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents
 to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.<br>
<br>
ARM Limited, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ, Registered in England & Wales, Company No: 2557590<br>
ARM Holdings plc, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ, Registered in England & Wales, Company No: 2548782<br>
</font>
</body>
</html>