<div dir="ltr">Not sure I understand the context for these changes - could you describe the motivation(s) in more detail?</div><br><div class="gmail_quote"><div dir="ltr">On Sun, Aug 6, 2017 at 10:39 PM Mandeep Singh Grang via Phabricator <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">mgrang created this revision.<br>
<br>
This patch is in response to <a href="https://reviews.llvm.org/D35043" rel="noreferrer" target="_blank">https://reviews.llvm.org/D35043</a> which removed -reverse-iterate flag<br>
and the base definition for PointerLikeTypeTrait.<br>
<br>
<br>
<a href="https://reviews.llvm.org/D36386" rel="noreferrer" target="_blank">https://reviews.llvm.org/D36386</a><br>
<br>
Files:<br>
  include/clang/AST/ExternalASTSource.h<br>
  test/Rewriter/<a href="http://objc-modern-metadata-visibility2.mm" rel="noreferrer" target="_blank">objc-modern-metadata-visibility2.mm</a><br>
<br>
<br>
Index: test/Rewriter/<a href="http://objc-modern-metadata-visibility2.mm" rel="noreferrer" target="_blank">objc-modern-metadata-visibility2.mm</a><br>
===================================================================<br>
--- test/Rewriter/<a href="http://objc-modern-metadata-visibility2.mm" rel="noreferrer" target="_blank">objc-modern-metadata-visibility2.mm</a><br>
+++ /dev/null<br>
@@ -1,45 +0,0 @@<br>
-// REQUIRES: abi-breaking-checks<br>
-// NOTE: This test has been split from <a href="http://objc-modern-metadata-visibility.mm" rel="noreferrer" target="_blank">objc-modern-metadata-visibility.mm</a> in<br>
-// order to test with -reverse-iterate as this flag is only present with<br>
-// ABI_BREAKING_CHECKS.<br>
-<br>
-// RUN: %clang_cc1 -E %s -o %<a href="http://t.mm" rel="noreferrer" target="_blank">t.mm</a> -mllvm -reverse-iterate<br>
-// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %<a href="http://t.mm" rel="noreferrer" target="_blank">t.mm</a> -mllvm -reverse-iterate -o - | FileCheck %s<br>
-// rdar://11144048<br>
-<br>
-@class NSString;<br>
-<br>
-@interface NSObject {<br>
-    Class isa;<br>
-}<br>
-@end<br>
-<br>
-@interface Sub : NSObject {<br>
-    int subIvar;<br>
-    NSString *nsstring;<br>
-@private<br>
-    id PrivateIvar;<br>
-}<br>
-@end<br>
-<br>
-@implementation Sub<br>
-- (id) MyNSString { return subIvar ? PrivateIvar : nsstring; }<br>
-@end<br>
-<br>
-@interface NSString @end<br>
-@implementation NSString @end<br>
-<br>
-// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" __declspec(dllimport) unsigned long OBJC_IVAR_$_Sub$subIvar;<br>
-// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" unsigned long OBJC_IVAR_$_Sub$PrivateIvar;<br>
-// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" __declspec(dllimport) unsigned long OBJC_IVAR_$_Sub$nsstring;<br>
-// CHECK: #pragma warning(disable:4273)<br>
-// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" __declspec(dllexport) unsigned long int OBJC_IVAR_$_Sub$subIvar<br>
-// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" __declspec(dllexport) unsigned long int OBJC_IVAR_$_Sub$nsstring<br>
-// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" unsigned long int OBJC_IVAR_$_Sub$PrivateIvar<br>
-// CHECK: extern "C" __declspec(dllimport) struct _class_t OBJC_METACLASS_$_NSObject;<br>
-// CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_METACLASS_$_Sub<br>
-// CHECK: extern "C" __declspec(dllimport) struct _class_t OBJC_CLASS_$_NSObject;<br>
-// CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_CLASS_$_Sub<br>
-// CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_CLASS_$_NSString;<br>
-// CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_METACLASS_$_NSString<br>
-// CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_CLASS_$_NSString<br>
Index: include/clang/AST/ExternalASTSource.h<br>
===================================================================<br>
--- include/clang/AST/ExternalASTSource.h<br>
+++ include/clang/AST/ExternalASTSource.h<br>
@@ -466,9 +466,10 @@<br>
 namespace llvm {<br>
 template<typename Owner, typename T,<br>
          void (clang::ExternalASTSource::*Update)(Owner)><br>
-struct PointerLikeTypeTraits<<br>
+class PointerLikeTypeTraits<<br>
     clang::LazyGenerationalUpdatePtr<Owner, T, Update>> {<br>
   typedef clang::LazyGenerationalUpdatePtr<Owner, T, Update> Ptr;<br>
+public:<br>
   static void *getAsVoidPointer(Ptr P) { return P.getOpaqueValue(); }<br>
   static Ptr getFromVoidPointer(void *P) { return Ptr::getFromOpaqueValue(P); }<br>
   enum {<br>
<br>
<br>
</blockquote></div>