<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 14, 2015 at 10:46 AM, Ristow, Warren <span dir="ltr"><<a href="mailto:warren_ristow@playstation.sony.com" target="_blank">warren_ristow@playstation.sony.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Yes, I agree a diagnostic is a good idea.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">That said, I wasn't so much proposing the specifics of that example-patch as the precise fix/change to  make, as I was using it to concretely demonstrate
 to concept of how I was thinking of adding a flag to the TargetInfo class, and then making use of it.  I'm wondering do others care about an object-compatibility issue like this (in which case guarding it in this more generic way seems sensible), or would
 it be better to just guard it directly with the PS4-triple?</span></p></div></div></blockquote><div><br></div><div>I'm not so sure we need to burn a bit for this sort of thing.  We already have stuff like honorsRevision0_98() which is purely triple based.</div><div><br></div><div>Us on the clang-cl side care deeply about compatibility between clang and MSVC to the point where we will mimic their semantic bugs.  However, we are not interested in mimicing bugs in older versions of clang.</div><div><br></div><div>TBH, I'm very curious how far you want to take this.  Would every fix to ItaniumMangle.cpp be wrapped in if () logic?</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="purple"><div><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u><u></u></span></p><span class="">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Thanks,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">-Warren<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">--<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Warren Ristow<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">SN Systems - Sony Computer Entertainment Group<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
</span><div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0in 0in 0in">
<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""> David Majnemer [mailto:<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</a>]
<br>
<b>Sent:</b> Monday, July 13, 2015 4:56 PM<br>
<b>To:</b> Ristow, Warren<br>
<b>Cc:</b> <a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a><br>
<b>Subject:</b> Re: [cfe-dev] Managing bugfixes that cause struct-layout changes<u></u><u></u></span></p>
</div><div><div class="h5">
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">Shouldn't a diagnostic be given if the path returning the incorrect calculation would return a result that disagrees from the correct calculation?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">On Mon, Jul 13, 2015 at 1:45 AM, Ristow, Warren <<a href="mailto:warren_ristow@playstation.sony.com" target="_blank">warren_ristow@playstation.sony.com</a>> wrote:<u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Courier New"">Hi,</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">We at Sony have a particularly strong interest in not breaking object file compatibility from release to release.  So when a bug exists in
 release X, which gets fixed in release Y, where that bugfix is an ABI-breaking change, we generally have to weigh the pluses of fixing the bug against the minuses of breaking our object compatibility goal.  The impact of object file incompatibility is quite
 bad for us, and so we likely are more concerned than most toolchain providers about this issue.  But that said, I would imagine there are others out there that have some concerns along these lines.  I'm curious to hear about preferred methods of dealing with
 this.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">A straightforward solution is for us simply to guard an ABI-breaking bugfix with our PS4-triple.  Conceptually:</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">  if (TargetIsPS4) {</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    // old way, with known bug, to retain object compatibility</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">  } else {</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    // new way, that fixes bug, but breaks object compatibility</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">  }</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">But if others are interested in retaining the compatibility, then instead, something like the following may be preferred:</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">  if (TargetUsesBuggyApproachX) {</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    // old way, with known bug, to retain object compatibility</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">  } else {</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    // new way, that fixes bug, but breaks object compatibility</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">  }</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">where the concept of "Target Uses Buggy Approach X" is implemented by, for example, adding another single-bit bitfield to the TargetInfo
 class, and initializing it appropriately for different targets.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">To be more specific, a current example of an ABI-breaking issue for us is PR22279:</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> 
<a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_bugs_show-5Fbug.cgi-3Fid-3D22279&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=CnzuN65ENJ1H9py9XLiRvC_UQz6u3oG6GUNn7_wosSM&m=lXuuZHGNbM5VWBNuDiKV3v7N_V9LCHH2xrCPvUMQtwg&s=GI3CSVFNVtMz8AGMn056T-sqMFcZTBRleH3r166fngs&e=" target="_blank">https://llvm.org/bugs/show_bug.cgi?id=22279</a></span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">As described there, a bugfix in the handling of alignment attributes (and alignas()) for enums causes a change in object layout.  For our
 customers, and hence for us, the fix in proper alignment of enum types in these cases isn't as important as retaining object compatibility.  So we need to suppress that fix.  It's easy enough for us to suppress the change by checking whether the target is
 PS4, but adding a bit to TargetInfo like:</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">  unsigned IgnoreEnumTypeAlignment : 1;</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">seems better.  I'm appending a patch on clang below, that shows this approach concretely.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">Or possibly there is some other preferred approach?  I'm curious to hear people's opinions.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">Thanks,</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">-Warren</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">--</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">Warren Ristow</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">SN Systems - Sony Computer Entertainment Group</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">diff --git include/clang/Basic/TargetInfo.h include/clang/Basic/TargetInfo.h</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">index fed69a8..7aca509 100644</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">--- include/clang/Basic/TargetInfo.h</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+++ include/clang/Basic/TargetInfo.h</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">@@ -84,6 +84,7 @@ protected:</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   mutable VersionTuple PlatformMinVersion;</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   unsigned HasAlignMac68kSupport : 1;</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+  unsigned IgnoreEnumTypeAlignment : 1;</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   unsigned RealTypeUsesObjCFPRet : 3;</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   unsigned ComplexLongDoubleUsesFP2Ret : 1;</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">@@ -463,6 +464,11 @@ public:</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">     return HasAlignMac68kSupport;</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   }</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+  /// \brief Ignore alignment specifier on definitions of enum types</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+  bool ignoreEnumTypeAlignment() const {</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+    return IgnoreEnumTypeAlignment;</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+  }</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   /// \brief Return the user string for the specified integer type enum.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   ///</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   /// For example, SignedShort -> "short".</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">diff --git lib/AST/ASTContext.cpp lib/AST/ASTContext.cpp</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">index fb96301..6a76ef3 100644</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">--- lib/AST/ASTContext.cpp</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+++ lib/AST/ASTContext.cpp</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">@@ -1705,6 +1705,8 @@ TypeInfo ASTContext::getTypeInfoImpl(const Type *T) const {</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">     if (const EnumType *ET = dyn_cast<EnumType>(TT)) {</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">       const EnumDecl *ED = ET->getDecl();</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+      if (getTargetInfo().ignoreEnumTypeAlignment())</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+        return getTypeInfo(ED->getIntegerType());</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">       TypeInfo Info =</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">           getTypeInfo(ED->getIntegerType()->getUnqualifiedDesugaredType());</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">       if (unsigned AttrAlign = ED->getMaxAlignment()) {</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">@@ -1846,7 +1848,8 @@ unsigned ASTContext::getPreferredTypeAlign(const Type *T) const {</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   if (const ComplexType *CT = T->getAs<ComplexType>())</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">     T = CT->getElementType().getTypePtr();</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   if (const EnumType *ET = T->getAs<EnumType>())</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">-    T = ET->getDecl()->getIntegerType().getTypePtr();</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+    if (!getTargetInfo().ignoreEnumTypeAlignment())</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+      T = ET->getDecl()->getIntegerType().getTypePtr();</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   if (T->isSpecificBuiltinType(BuiltinType::Double) ||</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">       T->isSpecificBuiltinType(BuiltinType::LongLong) ||</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">       T->isSpecificBuiltinType(BuiltinType::ULongLong))</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">diff --git lib/Basic/TargetInfo.cpp lib/Basic/TargetInfo.cpp</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">index 856ad50..99ed923 100644</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">--- lib/Basic/TargetInfo.cpp</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+++ lib/Basic/TargetInfo.cpp</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">@@ -76,6 +76,7 @@ TargetInfo::TargetInfo(const llvm::Triple &T) : TargetOpts(), Triple(T) {</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   RegParmMax = 0;</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   SSERegParmMax = 0;</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   HasAlignMac68kSupport = false;</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+  IgnoreEnumTypeAlignment = false;</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   // Default to no types using fpret.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   RealTypeUsesObjCFPRet = 0;</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">diff --git lib/Basic/Targets.cpp lib/Basic/Targets.cpp</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">index c5bf90f..b93343b 100644</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">--- lib/Basic/Targets.cpp</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+++ lib/Basic/Targets.cpp</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">@@ -580,6 +580,14 @@ public:</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   PS4OSTargetInfo(const llvm::Triple &Triple) : OSTargetInfo<Target>(Triple) {</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">     this->WCharType = this->UnsignedShort;</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+    // On PS4, for object compatibility with compilers prior to the fix of</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+    // PR22279, we ignore alignment specifiers on definitions of enum types.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+    // For example, in the following fragment, the alignment of 'y' will</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+    // be 4, rather than 16:</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+    //    enum Y { val1, val2, val3 } __attribute__((aligned(16)));</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+    //    Y y;</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+    IgnoreEnumTypeAlignment = true;</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">     this->UserLabelPrefix = "";</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New""> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">     switch (Triple.getArch()) {</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">diff --git lib/Sema/SemaDeclAttr.cpp lib/Sema/SemaDeclAttr.cpp</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">index b8d0830..3843fcb 100644</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">--- lib/Sema/SemaDeclAttr.cpp</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+++ lib/Sema/SemaDeclAttr.cpp</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">@@ -3024,8 +3024,9 @@ void Sema::CheckAlignasUnderalignment(Decl *D) {</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">     UnderlyingTy = DiagTy = VD->getType();</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   } else {</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">     UnderlyingTy = DiagTy = Context.getTagDeclType(cast<TagDecl>(D));</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">-    if (EnumDecl *ED = dyn_cast<EnumDecl>(D))</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">-      UnderlyingTy = ED->getIntegerType();</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+    if (!Context.getTargetInfo().ignoreEnumTypeAlignment())</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+      if (EnumDecl *ED = dyn_cast<EnumDecl>(D))</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">+        UnderlyingTy = ED->getIntegerType();</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   }</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   if (DiagTy->isDependentType() || DiagTy->isIncompleteType())</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">     return;</span><u></u><u></u></p>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div></div></div>
</div>

</blockquote></div><br></div></div>