r213386 - Mark C++ reference parameters as dereferenceable

Hal Finkel hfinkel at anl.gov
Fri Jul 18 09:40:21 PDT 2014


----- Original Message -----
> From: "Justin Bogner" <mail at justinbogner.com>
> To: "Hal Finkel" <hfinkel at anl.gov>
> Cc: cfe-commits at cs.uiuc.edu
> Sent: Friday, July 18, 2014 11:32:53 AM
> Subject: Re: r213386 - Mark C++ reference parameters as dereferenceable
> 
> Hal Finkel <hfinkel at anl.gov> writes:
> > Author: hfinkel
> > Date: Fri Jul 18 10:52:10 2014
> > New Revision: 213386
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=213386&view=revLog:
> > Mark C++ reference parameters as dereferenceable
> >
> > Because references must be initialized using some evaluated
> > expression, they
> > must point to something, and a callee can assume the reference
> > parameter is
> > dereferenceable. Taking advantage of a new attribute just added to
> > LLVM, mark
> > them as such.
> >
> > Because dereferenceability in addrspace(0) implies nonnull in the
> > backend, we
> > don't need both attributes. However, we need to know the size of
> > the object to
> > use the dereferenceable attribute, so for incomplete types we still
> > emit only
> > nonnull.
> >
> > Modified: cfe/trunk/lib/CodeGen/CGCall.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCall.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/lib/CodeGen/CGCall.cpp (original)
> > +++ cfe/trunk/lib/CodeGen/CGCall.cpp Fri Jul 18 10:52:10 2014
> > @@ -1202,8 +1202,14 @@ void CodeGenModule::ConstructAttributeLi
> >      llvm_unreachable("Invalid ABI kind for return argument");
> >    }
> >  
> > -  if (RetTy->isReferenceType())
> > -    RetAttrs.addAttribute(llvm::Attribute::NonNull);
> > +  if (const auto *RefTy = RetTy->getAs<ReferenceType>()) {
> > +    QualType PTy = RefTy->getPointeeType();
> > +    if (!PTy->isIncompleteType() && PTy->isConstantSizeType())
> > +
> >      RetAttrs.addDereferenceableAttr(getContext().getTypeSizeInChars(PTy)
> > +                                        .getQuantity());
> > +    else if (getContext().getTargetAddressSpace(PTy) == 0)
> > +      RetAttrs.addAttribute(llvm::Attribute::NonNull);
> 
> Why don't we emit nonnull if the address space is something other
> than
> zero?

Because only in addrspace(0) do we know that valid pointers are nonnull. You're right, my explanation in the commit message was not clear about that.

 -Hal

> 
> From the explanation in the commit message I would've expected logic
> like:
> 
> 1. If we have a complete type, add the dereferenceable attribute
> 2. If we don't have a complete type or if we are not in addrspace(0),
>    add the nonnull attribute
> 
> It could be I didn't understand the explanation though.
> 
> > +  }
> >  
> >    if (RetAttrs.hasAttributes())
> >      PAL.push_back(llvm::
> > @@ -1293,8 +1299,14 @@ void CodeGenModule::ConstructAttributeLi
> >      }
> >      }
> >  
> > -    if (ParamType->isReferenceType())
> > -      Attrs.addAttribute(llvm::Attribute::NonNull);
> > +    if (const auto *RefTy = ParamType->getAs<ReferenceType>()) {
> > +      QualType PTy = RefTy->getPointeeType();
> > +      if (!PTy->isIncompleteType() && PTy->isConstantSizeType())
> > +
> >        Attrs.addDereferenceableAttr(getContext().getTypeSizeInChars(PTy)
> > +                                       .getQuantity());
> > +      else if (getContext().getTargetAddressSpace(PTy) == 0)
> > +        Attrs.addAttribute(llvm::Attribute::NonNull);
> > +    }
> >  
> >      if (Attrs.hasAttributes())
> >        PAL.push_back(llvm::AttributeSet::get(getLLVMContext(),
> >        Index, Attrs));
> >
> > Modified: cfe/trunk/test/CXX/except/except.spec/p14-ir.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/except/except.spec/p14-ir.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CXX/except/except.spec/p14-ir.cpp (original)
> > +++ cfe/trunk/test/CXX/except/except.spec/p14-ir.cpp Fri Jul 18
> > 10:52:10 2014
> > @@ -26,12 +26,12 @@ struct X4 {
> >  struct X5 : X0, X4 { };
> >  
> >  void test(X2 x2, X3 x3, X5 x5) {
> > -  // CHECK: define linkonce_odr void @_ZN2X2C1ERKS_(%struct.X2*
> > %this, %struct.X2* nonnull) unnamed_addr
> > +  // CHECK: define linkonce_odr void @_ZN2X2C1ERKS_(%struct.X2*
> > %this, %struct.X2* dereferenceable({{[0-9]+}})) unnamed_addr
> >    // CHECK:      call void @_ZN2X2C2ERKS_({{.*}}) [[NUW:#[0-9]+]]
> >    // CHECK-NEXT: ret void
> >    // CHECK-NEXT: }
> >    X2 x2a(x2);
> > -  // CHECK: define linkonce_odr void @_ZN2X3C1ERKS_(%struct.X3*
> > %this, %struct.X3* nonnull) unnamed_addr
> > +  // CHECK: define linkonce_odr void @_ZN2X3C1ERKS_(%struct.X3*
> > %this, %struct.X3* dereferenceable({{[0-9]+}})) unnamed_addr
> >    // CHECK:      call void @_ZN2X3C2ERKS_({{.*}}) [[NUW]]
> >    // CHECK-NEXT: ret void
> >    // CHECK-NEXT: }
> >
> > Added: cfe/trunk/test/CodeGenCXX/address-space-ref.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/address-space-ref.cpp?rev=213386&view=auto==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/address-space-ref.cpp (added)
> > +++ cfe/trunk/test/CodeGenCXX/address-space-ref.cpp Fri Jul 18
> > 10:52:10 2014
> > @@ -0,0 +1,34 @@
> > +// RUN: %clang_cc1 %s -std=c++11 -triple=x86_64-apple-darwin10
> > -emit-llvm -o - | FileCheck %s
> > +
> > +// For a reference to a complete type, output the dereferenceable
> > attribute (in
> > +// any address space).
> > +
> > +typedef int a __attribute__((address_space(1)));
> > +
> > +a & foo(a &x, a & y) {
> > +  return x;
> > +}
> > +
> > +// CHECK: define dereferenceable(4) i32 addrspace(1)*
> > @_Z3fooRU3AS1iS0_(i32 addrspace(1)* dereferenceable(4) %x, i32
> > addrspace(1)* dereferenceable(4) %y)
> > +
> > +// For a reference to an incomplete type in an alternate address
> > space, output
> > +// neither dereferenceable nor nonnull.
> > +
> > +class bc;
> > +typedef bc b __attribute__((address_space(1)));
> > +
> > +b & bar(b &x, b & y) {
> > +  return x;
> > +}
> > +
> > +// CHECK: define %class.bc addrspace(1)*
> > @_Z3barRU3AS12bcS1_(%class.bc addrspace(1)* %x, %class.bc
> > addrspace(1)* %y)
> > +
> > +// For a reference to an incomplete type in addrspace(0), output
> > nonnull.
> > +
> > +bc & bar2(bc &x, bc & y) {
> > +  return x;
> > +}
> > +
> > +// CHECK: define nonnull %class.bc* @_Z4bar2R2bcS0_(%class.bc*
> > nonnull %x, %class.bc* nonnull %y)
> > +
> > +
> >
> > Modified: cfe/trunk/test/CodeGenCXX/blocks-cxx11.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/blocks-cxx11.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/blocks-cxx11.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/blocks-cxx11.cpp Fri Jul 18 10:52:10
> > 2014
> > @@ -106,7 +106,7 @@ namespace test_block_in_lambda {
> >    // CHECK:      [[TO_DESTROY:%.*]] = getelementptr inbounds
> >    [[BLOCK_T]]* [[BLOCK]], i32 0, i32 5
> >    // CHECK:      [[T0:%.*]] = getelementptr inbounds [[BLOCK_T]]*
> >    [[BLOCK]], i32 0, i32 5
> >    // CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[LAMBDA_T]]*
> >    [[THIS]], i32 0, i32 0
> > -  // CHECK-NEXT: call void
> > @_ZN20test_block_in_lambda1AC1ERKS0_({{.*}}* [[T0]], {{.*}}*
> > nonnull [[T1]])
> > +  // CHECK-NEXT: call void
> > @_ZN20test_block_in_lambda1AC1ERKS0_({{.*}}* [[T0]], {{.*}}*
> > dereferenceable({{[0-9]+}}) [[T1]])
> >    // CHECK-NEXT: [[T0:%.*]] = bitcast [[BLOCK_T]]* [[BLOCK]] to
> >    void ()*
> >    // CHECK-NEXT: call void
> >    @_ZN20test_block_in_lambda9takeBlockEU13block_pointerFvvE(void
> >    ()* [[T0]])
> >    // CHECK-NEXT: call void
> >    @_ZN20test_block_in_lambda1AD1Ev({{.*}}* [[TO_DESTROY]])
> >
> > Modified: cfe/trunk/test/CodeGenCXX/blocks.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/blocks.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/blocks.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/blocks.cpp Fri Jul 18 10:52:10 2014
> > @@ -164,7 +164,7 @@ namespace test5 {
> >  
> >    // CHECK-NOT:  br
> >    // CHECK:      [[CAPTURE:%.*]] = getelementptr inbounds
> >    [[BLOCK_T]]* [[BLOCK]], i32 0, i32 5
> > -  // CHECK-NEXT: call void @_ZN5test51AC1ERKS0_([[A]]*
> > [[CAPTURE]], [[A]]* nonnull [[X]])
> > +  // CHECK-NEXT: call void @_ZN5test51AC1ERKS0_([[A]]*
> > [[CAPTURE]], [[A]]* dereferenceable({{[0-9]+}}) [[X]])
> >    // CHECK-NEXT: store i1 true, i1* [[CLEANUP_ACTIVE]]
> >    // CHECK-NEXT: bitcast [[BLOCK_T]]* [[BLOCK]] to void ()*
> >    // CHECK-NEXT: br label
> >
> > Modified: cfe/trunk/test/CodeGenCXX/catch-undef-behavior.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/catch-undef-behavior.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/catch-undef-behavior.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/catch-undef-behavior.cpp Fri Jul 18
> > 10:52:10 2014
> > @@ -357,7 +357,7 @@ void downcast_pointer(B *b) {
> >    // CHECK-NEXT: br i1 [[AND]]
> >  }
> >  
> > -// CHECK-LABEL: define void @_Z18downcast_referenceR1B(%class.B*
> > nonnull %b)
> > +// CHECK-LABEL: define void @_Z18downcast_referenceR1B(%class.B*
> > dereferenceable({{[0-9]+}}) %b)
> >  void downcast_reference(B &b) {
> >    (void) static_cast<C&>(b);
> >    // Alignment check from EmitTypeCheck(TCK_DowncastReference,
> >    ...)
> >
> > Modified: cfe/trunk/test/CodeGenCXX/conditional-gnu-ext.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/conditional-gnu-ext.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/conditional-gnu-ext.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/conditional-gnu-ext.cpp Fri Jul 18
> > 10:52:10 2014
> > @@ -83,7 +83,7 @@ namespace test3 {
> >      // CHECK-NEXT: [[T0:%.*]] = load [[B]]** [[X]]
> >      // CHECK-NEXT: [[BOOL:%.*]] = call zeroext i1
> >      @_ZN5test31BcvbEv([[B]]* [[T0]])
> >      // CHECK-NEXT: br i1 [[BOOL]]
> > -    // CHECK:      call void @_ZN5test31BC1ERKS0_([[B]]*
> > [[RESULT:%.*]], [[B]]* nonnull [[T0]])
> > +    // CHECK:      call void @_ZN5test31BC1ERKS0_([[B]]*
> > [[RESULT:%.*]], [[B]]* dereferenceable({{[0-9]+}}) [[T0]])
> >      // CHECK-NEXT: br label
> >      // CHECK:      call void @_ZN5test31BC1Ev([[B]]* [[RESULT]])
> >      // CHECK-NEXT: br label
> > @@ -97,7 +97,7 @@ namespace test3 {
> >      // CHECK-NEXT: call  void @_ZN5test312test1_helperEv([[B]]*
> >      sret [[TEMP]])
> >      // CHECK-NEXT: [[BOOL:%.*]] = call zeroext i1
> >      @_ZN5test31BcvbEv([[B]]* [[TEMP]])
> >      // CHECK-NEXT: br i1 [[BOOL]]
> > -    // CHECK:      call void @_ZN5test31BC1ERKS0_([[B]]*
> > [[RESULT:%.*]], [[B]]* nonnull [[TEMP]])
> > +    // CHECK:      call void @_ZN5test31BC1ERKS0_([[B]]*
> > [[RESULT:%.*]], [[B]]* dereferenceable({{[0-9]+}}) [[TEMP]])
> >      // CHECK-NEXT: br label
> >      // CHECK:      call void @_ZN5test31BC1Ev([[B]]* [[RESULT]])
> >      // CHECK-NEXT: br label
> >
> > Modified: cfe/trunk/test/CodeGenCXX/const-init-cxx11.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/const-init-cxx11.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/const-init-cxx11.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/const-init-cxx11.cpp Fri Jul 18
> > 10:52:10 2014
> > @@ -532,10 +532,10 @@ namespace InitFromConst {
> >      // CHECK: call void @_ZN13InitFromConst7consumeIdEEvT_(double
> >      4.300000e+00)
> >      consume(d);
> >  
> > -    // CHECK: call void
> > @_ZN13InitFromConst7consumeIRKNS_1SEEEvT_(%"struct.InitFromConst::S"*
> > nonnull @_ZN13InitFromConstL1sE)
> > +    // CHECK: call void
> > @_ZN13InitFromConst7consumeIRKNS_1SEEEvT_(%"struct.InitFromConst::S"*
> > dereferenceable({{[0-9]+}}) @_ZN13InitFromConstL1sE)
> >      consume<const S&>(s);
> >  
> > -    // CHECK: call void
> > @_ZN13InitFromConst7consumeIRKNS_1SEEEvT_(%"struct.InitFromConst::S"*
> > nonnull @_ZN13InitFromConstL1sE)
> > +    // CHECK: call void
> > @_ZN13InitFromConst7consumeIRKNS_1SEEEvT_(%"struct.InitFromConst::S"*
> > dereferenceable({{[0-9]+}}) @_ZN13InitFromConstL1sE)
> >      consume<const S&>(r);
> >  
> >      // CHECK: call void
> >      @_ZN13InitFromConst7consumeIPKNS_1SEEEvT_(%"struct.InitFromConst::S"*
> >      @_ZN13InitFromConstL1sE)
> >
> > Modified: cfe/trunk/test/CodeGenCXX/constructor-direct-call.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/constructor-direct-call.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/constructor-direct-call.cpp
> > (original)
> > +++ cfe/trunk/test/CodeGenCXX/constructor-direct-call.cpp Fri Jul
> > 18 10:52:10 2014
> > @@ -54,6 +54,6 @@ void f3() {
> >    // CHECK-NEXT: call x86_thiscallcc void
> >    @_ZN5Test3C1Ev(%class.Test3* %var)
> >    var.Test3::Test3();
> >  
> > -  // CHECK-NEXT: call x86_thiscallcc void
> > @_ZN5Test3C1ERKS_(%class.Test3* %var, %class.Test3* nonnull %var2)
> > +  // CHECK-NEXT: call x86_thiscallcc void
> > @_ZN5Test3C1ERKS_(%class.Test3* %var, %class.Test3*
> > dereferenceable({{[0-9]+}}) %var2)
> >    var.Test3::Test3(var2);
> >  }
> >
> > Modified: cfe/trunk/test/CodeGenCXX/constructor-init.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/constructor-init.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/constructor-init.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/constructor-init.cpp Fri Jul 18
> > 10:52:10 2014
> > @@ -163,7 +163,7 @@ template<typename T> struct X;
> >  
> >  // Make sure that the instantiated constructor initializes start
> >  and
> >  // end properly.
> > -// CHECK-LABEL: define linkonce_odr void
> > @_ZN1XIiEC2ERKS0_(%struct.X* %this, %struct.X* nonnull %other)
> > unnamed_addr
> > +// CHECK-LABEL: define linkonce_odr void
> > @_ZN1XIiEC2ERKS0_(%struct.X* %this, %struct.X*
> > dereferenceable({{[0-9]+}}) %other) unnamed_addr
> >  // CHECK: {{store.*null}}
> >  // CHECK: {{store.*null}}
> >  // CHECK: ret
> >
> > Modified: cfe/trunk/test/CodeGenCXX/convert-to-fptr.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/convert-to-fptr.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/convert-to-fptr.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/convert-to-fptr.cpp Fri Jul 18
> > 10:52:10 2014
> > @@ -39,4 +39,4 @@ int main()
> >  }
> >  
> >  // CHECK: call i32 (i32)* (%struct.A*)* @_ZN1AcvPFiiEEv
> > -// CHECK: call nonnull i32 (i32)* (%struct.B*)* @_ZN1BcvRFiiEEv
> > +// CHECK: call i32 (i32)* (%struct.B*)* @_ZN1BcvRFiiEEv
> >
> > Modified: cfe/trunk/test/CodeGenCXX/copy-assign-synthesis-1.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/copy-assign-synthesis-1.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/copy-assign-synthesis-1.cpp
> > (original)
> > +++ cfe/trunk/test/CodeGenCXX/copy-assign-synthesis-1.cpp Fri Jul
> > 18 10:52:10 2014
> > @@ -92,4 +92,4 @@ int main() {
> >    dstY.pr();
> >  }
> >  
> > -// CHECK: define linkonce_odr nonnull %struct.X* @_ZN1XaSERKS_
> > +// CHECK: define linkonce_odr dereferenceable({{[0-9]+}})
> > %struct.X* @_ZN1XaSERKS_
> >
> > Modified: cfe/trunk/test/CodeGenCXX/copy-constructor-elim-2.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/copy-constructor-elim-2.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/copy-constructor-elim-2.cpp
> > (original)
> > +++ cfe/trunk/test/CodeGenCXX/copy-constructor-elim-2.cpp Fri Jul
> > 18 10:52:10 2014
> > @@ -21,7 +21,7 @@ namespace no_elide_base {
> >      Derived(const Other &O);
> >    };
> >  
> > -  // CHECK: define {{.*}}
> > @_ZN13no_elide_base7DerivedC1ERKNS_5OtherE(%"struct.no_elide_base::Derived"*
> > returned %this, %"struct.no_elide_base::Other"* nonnull %O)
> > unnamed_addr
> > +  // CHECK: define {{.*}}
> > @_ZN13no_elide_base7DerivedC1ERKNS_5OtherE(%"struct.no_elide_base::Derived"*
> > returned %this, %"struct.no_elide_base::Other"*
> > dereferenceable({{[0-9]+}}) %O) unnamed_addr
> >    Derived::Derived(const Other &O)
> >      // CHECK: call {{.*}} @_ZNK13no_elide_base5OthercvNS_4BaseEEv
> >      // CHECK: call {{.*}} @_ZN13no_elide_base4BaseC2ERKS0_
> >
> > Modified:
> > cfe/trunk/test/CodeGenCXX/copy-constructor-synthesis-2.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/copy-constructor-synthesis-2.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/copy-constructor-synthesis-2.cpp
> > (original)
> > +++ cfe/trunk/test/CodeGenCXX/copy-constructor-synthesis-2.cpp Fri
> > Jul 18 10:52:10 2014
> > @@ -3,5 +3,5 @@
> >  struct A { virtual void a(); };
> >  A x(A& y) { return y; }
> >  
> > -// CHECK: define linkonce_odr {{.*}} @_ZN1AC1ERKS_(%struct.A*
> > {{.*}}%this, %struct.A* nonnull) unnamed_addr
> > +// CHECK: define linkonce_odr {{.*}} @_ZN1AC1ERKS_(%struct.A*
> > {{.*}}%this, %struct.A* dereferenceable({{[0-9]+}})) unnamed_addr
> >  // CHECK: store i8** getelementptr inbounds ([3 x i8*]* @_ZTV1A,
> >  i64 0, i64 2)
> >
> > Modified: cfe/trunk/test/CodeGenCXX/copy-constructor-synthesis.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/copy-constructor-synthesis.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/copy-constructor-synthesis.cpp
> > (original)
> > +++ cfe/trunk/test/CodeGenCXX/copy-constructor-synthesis.cpp Fri
> > Jul 18 10:52:10 2014
> > @@ -21,7 +21,7 @@ struct P {
> >  };
> >  
> >  
> > -// CHECK-LABEL: define linkonce_odr void @_ZN1XC1ERKS_(%struct.X*
> > %this, %struct.X* nonnull) unnamed_addr
> > +// CHECK-LABEL: define linkonce_odr void @_ZN1XC1ERKS_(%struct.X*
> > %this, %struct.X* dereferenceable({{[0-9]+}})) unnamed_addr
> >  struct X  : M, N, P { // ...
> >    X() : f1(1.0), d1(2.0), i1(3), name("HELLO"), bf1(0xff),
> >    bf2(0xabcd),
> >          au_i1(1234), au1_4("MASKED") {}
> > @@ -136,7 +136,7 @@ void f(B b1) {
> >    B b2 = b1;
> >  }
> >  
> > -// CHECK:    define linkonce_odr nonnull [[A:%.*]]*
> > @_ZN12rdar138169401AaSERKS0_(
> > +// CHECK:    define linkonce_odr dereferenceable({{[0-9]+}})
> > [[A:%.*]]* @_ZN12rdar138169401AaSERKS0_(
> >  // CHECK:      [[THIS:%.*]] = load [[A]]**
> >  // CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[A]]*
> >  [[THIS]], i32 0, i32 1
> >  // CHECK-NEXT: [[OTHER:%.*]] = load [[A]]**
> > @@ -158,7 +158,7 @@ void f(B b1) {
> >  // CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[T4]],
> >  i8* [[T5]], i64 8, i32 8, i1 false)
> >  // CHECK-NEXT: ret void
> >  
> > -// CHECK-LABEL: define linkonce_odr void
> > @_ZN6PR66281BC2ERKS0_(%"struct.PR6628::B"* %this,
> > %"struct.PR6628::B"* nonnull) unnamed_addr
> > +// CHECK-LABEL: define linkonce_odr void
> > @_ZN6PR66281BC2ERKS0_(%"struct.PR6628::B"* %this,
> > %"struct.PR6628::B"* dereferenceable({{[0-9]+}})) unnamed_addr
> >  // CHECK: call void @_ZN6PR66281TC1Ev
> >  // CHECK: call void @_ZN6PR66281TC1Ev
> >  // CHECK: call void @_ZN6PR66281AC2ERKS0_RKNS_1TES5_
> >
> > Modified: cfe/trunk/test/CodeGenCXX/cxx11-initializer-aggregate.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/cxx11-initializer-aggregate.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/cxx11-initializer-aggregate.cpp
> > (original)
> > +++ cfe/trunk/test/CodeGenCXX/cxx11-initializer-aggregate.cpp Fri
> > Jul 18 10:52:10 2014
> > @@ -20,7 +20,7 @@ int &fn2(int &v) {
> >    // CHECK: %[[INITLIST2:.*]] = alloca %struct.B, align 8
> >    // CHECK: %[[R:.*]] = getelementptr inbounds %struct.B*
> >    %[[INITLIST2:.*]], i32 0, i32 0
> >    // CHECK: store i32* %{{.*}}, i32** %[[R]], align 8
> > -  // CHECK: call nonnull i32* @_ZN1B1fEv(%struct.B*
> > %[[INITLIST2:.*]])
> > +  // CHECK: call dereferenceable({{[0-9]+}}) i32*
> > @_ZN1B1fEv(%struct.B* %[[INITLIST2:.*]])
> >    return B{v}.f();
> >  }
> >  
> >
> > Modified:
> > cfe/trunk/test/CodeGenCXX/cxx11-thread-local-reference.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/cxx11-thread-local-reference.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/cxx11-thread-local-reference.cpp
> > (original)
> > +++ cfe/trunk/test/CodeGenCXX/cxx11-thread-local-reference.cpp Fri
> > Jul 18 10:52:10 2014
> > @@ -10,10 +10,10 @@ thread_local int &r = f();
> >  int &g() { return r; }
> >  
> >  // CHECK: define {{.*}} @[[R_INIT:.*]]()
> > -// CHECK: call nonnull i32* @_Z1fv()
> > +// CHECK: call dereferenceable({{[0-9]+}}) i32* @_Z1fv()
> >  // CHECK: store i32* %{{.*}}, i32** @r, align 8
> >  
> > -// CHECK-LABEL: define nonnull i32* @_Z1gv()
> > +// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i32* @_Z1gv()
> >  // CHECK: call i32* @_ZTW1r()
> >  // CHECK: ret i32* %{{.*}}
> >  
> >
> > Modified: cfe/trunk/test/CodeGenCXX/decl-ref-init.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/decl-ref-init.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/decl-ref-init.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/decl-ref-init.cpp Fri Jul 18 10:52:10
> > 2014
> > @@ -23,5 +23,5 @@ int main() {
> >  	const A& rca2 = d();
> >  }
> >  
> > -// CHECK: call nonnull %struct.A* @_ZN1BcvR1AEv
> > -// CHECK: call nonnull %struct.A* @_ZN1BcvR1AEv
> > +// CHECK: call dereferenceable({{[0-9]+}}) %struct.A*
> > @_ZN1BcvR1AEv
> > +// CHECK: call dereferenceable({{[0-9]+}}) %struct.A*
> > @_ZN1BcvR1AEv
> >
> > Modified: cfe/trunk/test/CodeGenCXX/default-arg-temps.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/default-arg-temps.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/default-arg-temps.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/default-arg-temps.cpp Fri Jul 18
> > 10:52:10 2014
> > @@ -16,12 +16,12 @@ public:
> >  // CHECK-LABEL: define void @_Z1gv()
> >  void g() {
> >    // CHECK:      call void @_ZN1TC1Ev([[T:%.*]]* [[AGG1:%.*]])
> > -  // CHECK-NEXT: call void @_Z1fRK1T([[T]]* nonnull [[AGG1]])
> > +  // CHECK-NEXT: call void @_Z1fRK1T([[T]]*
> > dereferenceable({{[0-9]+}}) [[AGG1]])
> >    // CHECK-NEXT: call void @_ZN1TD1Ev([[T]]* [[AGG1]])
> >    f();
> >  
> >    // CHECK-NEXT: call void @_ZN1TC1Ev([[T:%.*]]* [[AGG2:%.*]])
> > -  // CHECK-NEXT: call void @_Z1fRK1T([[T]]* nonnull [[AGG2]])
> > +  // CHECK-NEXT: call void @_Z1fRK1T([[T]]*
> > dereferenceable({{[0-9]+}}) [[AGG2]])
> >    // CHECK-NEXT: call void @_ZN1TD1Ev([[T]]* [[AGG2]])
> >    f();
> >  
> >
> > Modified: cfe/trunk/test/CodeGenCXX/derived-to-base-conv.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/derived-to-base-conv.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/derived-to-base-conv.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/derived-to-base-conv.cpp Fri Jul 18
> > 10:52:10 2014
> > @@ -33,9 +33,9 @@ void test0(X x) {
> >    test0_helper(x);
> >    // CHECK-LABEL:    define void @_Z5test01X(
> >    // CHECK:      [[TMP:%.*]] = alloca [[A:%.*]], align
> > -  // CHECK-NEXT: [[T0:%.*]] = call nonnull [[B:%.*]]*
> > @_ZN1XcvR1BEv(
> > +  // CHECK-NEXT: [[T0:%.*]] = call dereferenceable({{[0-9]+}})
> > [[B:%.*]]* @_ZN1XcvR1BEv(
> >    // CHECK-NEXT: [[T1:%.*]] = bitcast [[B]]* [[T0]] to [[A]]*
> > -  // CHECK-NEXT: call void @_ZN1AC1ERKS_([[A]]* [[TMP]], [[A]]*
> > nonnull [[T1]])
> > +  // CHECK-NEXT: call void @_ZN1AC1ERKS_([[A]]* [[TMP]], [[A]]*
> > dereferenceable({{[0-9]+}}) [[T1]])
> >    // CHECK-NEXT: call void @_Z12test0_helper1A([[A]]* [[TMP]])
> >    // CHECK-NEXT: call void @_ZN1AD1Ev([[A]]* [[TMP]])
> >    // CHECK-NEXT: ret void
> >
> > Modified:
> > cfe/trunk/test/CodeGenCXX/derived-to-virtual-base-class-calls-final.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/derived-to-virtual-base-class-calls-final.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > ---
> > cfe/trunk/test/CodeGenCXX/derived-to-virtual-base-class-calls-final.cpp
> > (original)
> > +++
> > cfe/trunk/test/CodeGenCXX/derived-to-virtual-base-class-calls-final.cpp
> > Fri Jul 18 10:52:10 2014
> > @@ -9,7 +9,7 @@ struct D final : virtual C {
> >    virtual void f();
> >  };
> >  
> > -// CHECK-LABEL: define nonnull %struct.B* @_Z1fR1D
> > +// CHECK-LABEL: define dereferenceable({{[0-9]+}}) %struct.B*
> > @_Z1fR1D
> >  B &f(D &d) {
> >    // CHECK-NOT: load i8**
> >    return d;
> >
> > Modified: cfe/trunk/test/CodeGenCXX/dllexport-members.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/dllexport-members.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/dllexport-members.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/dllexport-members.cpp Fri Jul 18
> > 10:52:10 2014
> > @@ -288,32 +288,32 @@ struct ExportSpecials {
> >    // G64-DAG: define dllexport                void
> >    @_ZN14ExportSpecialsD2Ev(%struct.ExportSpecials* %this)
> >    __declspec(dllexport) ~ExportSpecials();
> >  
> > -  // M32-DAG: define dllexport x86_thiscallcc
> > %struct.ExportSpecials*
> > @"\01??0ExportSpecials@@QAE at ABU0@@Z"(%struct.ExportSpecials*
> > returned %this, %struct.ExportSpecials* nonnull)
> > -  // M64-DAG: define dllexport
> >                %struct.ExportSpecials*
> > @"\01??0ExportSpecials@@QEAA at AEBU0@@Z"(%struct.ExportSpecials*
> > returned %this, %struct.ExportSpecials* nonnull)
> > -  // G32-DAG: define dllexport x86_thiscallcc void
> > @_ZN14ExportSpecialsC1ERKS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* nonnull)
> > -  // G64-DAG: define dllexport                void
> > @_ZN14ExportSpecialsC1ERKS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* nonnull)
> > -  // G32-DAG: define dllexport x86_thiscallcc void
> > @_ZN14ExportSpecialsC2ERKS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* nonnull)
> > -  // G64-DAG: define dllexport                void
> > @_ZN14ExportSpecialsC2ERKS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* nonnull)
> > +  // M32-DAG: define dllexport x86_thiscallcc
> > %struct.ExportSpecials*
> > @"\01??0ExportSpecials@@QAE at ABU0@@Z"(%struct.ExportSpecials*
> > returned %this, %struct.ExportSpecials*
> > dereferenceable({{[0-9]+}}))
> > +  // M64-DAG: define dllexport
> >                %struct.ExportSpecials*
> > @"\01??0ExportSpecials@@QEAA at AEBU0@@Z"(%struct.ExportSpecials*
> > returned %this, %struct.ExportSpecials*
> > dereferenceable({{[0-9]+}}))
> > +  // G32-DAG: define dllexport x86_thiscallcc void
> > @_ZN14ExportSpecialsC1ERKS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
> > +  // G64-DAG: define dllexport                void
> > @_ZN14ExportSpecialsC1ERKS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
> > +  // G32-DAG: define dllexport x86_thiscallcc void
> > @_ZN14ExportSpecialsC2ERKS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
> > +  // G64-DAG: define dllexport                void
> > @_ZN14ExportSpecialsC2ERKS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
> >    __declspec(dllexport) ExportSpecials(const ExportSpecials&);
> >  
> > -  // M32-DAG: define dllexport x86_thiscallcc nonnull
> > %struct.ExportSpecials*
> > @"\01??4ExportSpecials@@QAEAAU0 at ABU0@@Z"(%struct.ExportSpecials*
> > %this, %struct.ExportSpecials* nonnull)
> > -  // M64-DAG: define dllexport                nonnull
> > %struct.ExportSpecials*
> > @"\01??4ExportSpecials@@QEAAAEAU0 at AEBU0@@Z"(%struct.ExportSpecials*
> > %this, %struct.ExportSpecials* nonnull)
> > -  // G32-DAG: define dllexport x86_thiscallcc nonnull
> > %struct.ExportSpecials*
> > @_ZN14ExportSpecialsaSERKS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* nonnull)
> > -  // G64-DAG: define dllexport                nonnull
> > %struct.ExportSpecials*
> > @_ZN14ExportSpecialsaSERKS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* nonnull)
> > +  // M32-DAG: define dllexport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ExportSpecials*
> > @"\01??4ExportSpecials@@QAEAAU0 at ABU0@@Z"(%struct.ExportSpecials*
> > %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
> > +  // M64-DAG: define dllexport
> >                dereferenceable({{[0-9]+}}) %struct.ExportSpecials*
> > @"\01??4ExportSpecials@@QEAAAEAU0 at AEBU0@@Z"(%struct.ExportSpecials*
> > %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
> > +  // G32-DAG: define dllexport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ExportSpecials*
> > @_ZN14ExportSpecialsaSERKS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
> > +  // G64-DAG: define dllexport
> >                dereferenceable({{[0-9]+}}) %struct.ExportSpecials*
> > @_ZN14ExportSpecialsaSERKS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
> >    __declspec(dllexport) ExportSpecials& operator=(const
> >    ExportSpecials&);
> >  
> > -  // M32-DAG: define dllexport x86_thiscallcc
> > %struct.ExportSpecials*
> > @"\01??0ExportSpecials@@QAE@$$QAU0@@Z"(%struct.ExportSpecials*
> > returned %this, %struct.ExportSpecials* nonnull)
> > -  // M64-DAG: define dllexport
> >                %struct.ExportSpecials*
> > @"\01??0ExportSpecials@@QEAA@$$QEAU0@@Z"(%struct.ExportSpecials*
> > returned %this, %struct.ExportSpecials* nonnull)
> > -  // G32-DAG: define dllexport x86_thiscallcc void
> > @_ZN14ExportSpecialsC1EOS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* nonnull)
> > -  // G64-DAG: define dllexport                void
> > @_ZN14ExportSpecialsC1EOS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* nonnull)
> > -  // G32-DAG: define dllexport x86_thiscallcc void
> > @_ZN14ExportSpecialsC2EOS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* nonnull)
> > -  // G64-DAG: define dllexport                void
> > @_ZN14ExportSpecialsC2EOS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* nonnull)
> > +  // M32-DAG: define dllexport x86_thiscallcc
> > %struct.ExportSpecials*
> > @"\01??0ExportSpecials@@QAE@$$QAU0@@Z"(%struct.ExportSpecials*
> > returned %this, %struct.ExportSpecials*
> > dereferenceable({{[0-9]+}}))
> > +  // M64-DAG: define dllexport
> >                %struct.ExportSpecials*
> > @"\01??0ExportSpecials@@QEAA@$$QEAU0@@Z"(%struct.ExportSpecials*
> > returned %this, %struct.ExportSpecials*
> > dereferenceable({{[0-9]+}}))
> > +  // G32-DAG: define dllexport x86_thiscallcc void
> > @_ZN14ExportSpecialsC1EOS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
> > +  // G64-DAG: define dllexport                void
> > @_ZN14ExportSpecialsC1EOS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
> > +  // G32-DAG: define dllexport x86_thiscallcc void
> > @_ZN14ExportSpecialsC2EOS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
> > +  // G64-DAG: define dllexport                void
> > @_ZN14ExportSpecialsC2EOS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
> >    __declspec(dllexport) ExportSpecials(ExportSpecials&&);
> >  
> > -  // M32-DAG: define dllexport x86_thiscallcc nonnull
> > %struct.ExportSpecials*
> > @"\01??4ExportSpecials@@QAEAAU0@$$QAU0@@Z"(%struct.ExportSpecials*
> > %this, %struct.ExportSpecials* nonnull)
> > -  // M64-DAG: define dllexport                nonnull
> > %struct.ExportSpecials*
> > @"\01??4ExportSpecials@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ExportSpecials*
> > %this, %struct.ExportSpecials* nonnull)
> > -  // G32-DAG: define dllexport x86_thiscallcc nonnull
> > %struct.ExportSpecials*
> > @_ZN14ExportSpecialsaSEOS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* nonnull)
> > -  // G64-DAG: define dllexport                nonnull
> > %struct.ExportSpecials*
> > @_ZN14ExportSpecialsaSEOS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* nonnull)
> > +  // M32-DAG: define dllexport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ExportSpecials*
> > @"\01??4ExportSpecials@@QAEAAU0@$$QAU0@@Z"(%struct.ExportSpecials*
> > %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
> > +  // M64-DAG: define dllexport
> >                dereferenceable({{[0-9]+}}) %struct.ExportSpecials*
> > @"\01??4ExportSpecials@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ExportSpecials*
> > %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
> > +  // G32-DAG: define dllexport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ExportSpecials*
> > @_ZN14ExportSpecialsaSEOS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
> > +  // G64-DAG: define dllexport
> >                dereferenceable({{[0-9]+}}) %struct.ExportSpecials*
> > @_ZN14ExportSpecialsaSEOS_(%struct.ExportSpecials* %this,
> > %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
> >    __declspec(dllexport) ExportSpecials&
> >    operator=(ExportSpecials&&);
> >  };
> >  ExportSpecials::ExportSpecials() {}
> > @@ -344,10 +344,10 @@ struct ExportInlineSpecials {
> >    // G64-DAG: define weak_odr dllexport                void
> >    @_ZN20ExportInlineSpecialsC1ERKS_(
> >    __declspec(dllexport) inline ExportInlineSpecials(const
> >    ExportInlineSpecials&);
> >  
> > -  // M32-DAG: define weak_odr dllexport x86_thiscallcc nonnull
> > %struct.ExportInlineSpecials*
> > @"\01??4ExportInlineSpecials@@QAEAAU0 at ABU0@@Z"(
> > -  // M64-DAG: define weak_odr dllexport                nonnull
> > %struct.ExportInlineSpecials*
> > @"\01??4ExportInlineSpecials@@QEAAAEAU0 at AEBU0@@Z"(
> > -  // G32-DAG: define weak_odr dllexport x86_thiscallcc nonnull
> > %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSERKS_(
> > -  // G64-DAG: define weak_odr dllexport                nonnull
> > %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSERKS_(
> > +  // M32-DAG: define weak_odr dllexport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials*
> > @"\01??4ExportInlineSpecials@@QAEAAU0 at ABU0@@Z"(
> > +  // M64-DAG: define weak_odr dllexport
> >                dereferenceable({{[0-9]+}})
> > %struct.ExportInlineSpecials*
> > @"\01??4ExportInlineSpecials@@QEAAAEAU0 at AEBU0@@Z"(
> > +  // G32-DAG: define weak_odr dllexport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials*
> > @_ZN20ExportInlineSpecialsaSERKS_(
> > +  // G64-DAG: define weak_odr dllexport
> >                dereferenceable({{[0-9]+}})
> > %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSERKS_(
> >    __declspec(dllexport) ExportInlineSpecials& operator=(const
> >    ExportInlineSpecials&);
> >  
> >    // M32-DAG: define weak_odr dllexport x86_thiscallcc
> >    %struct.ExportInlineSpecials*
> >    @"\01??0ExportInlineSpecials@@QAE@$$QAU0@@Z"(
> > @@ -356,10 +356,10 @@ struct ExportInlineSpecials {
> >    // G64-DAG: define weak_odr dllexport                void
> >    @_ZN20ExportInlineSpecialsC1EOS_(
> >    __declspec(dllexport)
> >    ExportInlineSpecials(ExportInlineSpecials&&) {}
> >  
> > -  // M32-DAG: define weak_odr dllexport x86_thiscallcc nonnull
> > %struct.ExportInlineSpecials*
> > @"\01??4ExportInlineSpecials@@QAEAAU0@$$QAU0@@Z"(
> > -  // M64-DAG: define weak_odr dllexport                nonnull
> > %struct.ExportInlineSpecials*
> > @"\01??4ExportInlineSpecials@@QEAAAEAU0@$$QEAU0@@Z"(
> > -  // G32-DAG: define weak_odr dllexport x86_thiscallcc nonnull
> > %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSEOS_(
> > -  // G64-DAG: define weak_odr dllexport                nonnull
> > %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSEOS_(
> > +  // M32-DAG: define weak_odr dllexport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials*
> > @"\01??4ExportInlineSpecials@@QAEAAU0@$$QAU0@@Z"(
> > +  // M64-DAG: define weak_odr dllexport
> >                dereferenceable({{[0-9]+}})
> > %struct.ExportInlineSpecials*
> > @"\01??4ExportInlineSpecials@@QEAAAEAU0@$$QEAU0@@Z"(
> > +  // G32-DAG: define weak_odr dllexport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials*
> > @_ZN20ExportInlineSpecialsaSEOS_(
> > +  // G64-DAG: define weak_odr dllexport
> >                dereferenceable({{[0-9]+}})
> > %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSEOS_(
> >    __declspec(dllexport) ExportInlineSpecials&
> >    operator=(ExportInlineSpecials&&) { return *this; }
> >  };
> >  ExportInlineSpecials::ExportInlineSpecials(const
> >  ExportInlineSpecials&) {}
> > @@ -392,32 +392,32 @@ __declspec(dllexport) ExportDefaultedDef
> >  // G64-DAG: define dllexport                void
> >  @_ZN19ExportDefaultedDefsD2Ev(%struct.ExportDefaultedDefs* %this)
> >  ExportDefaultedDefs::~ExportDefaultedDefs() = default;
> >  
> > -// M32-DAG: define weak_odr dllexport x86_thiscallcc
> > %struct.ExportDefaultedDefs*
> > @"\01??0ExportDefaultedDefs@@QAE at ABU0@@Z"(%struct.ExportDefaultedDefs*
> > returned %this, %struct.ExportDefaultedDefs* nonnull)
> > -// M64-DAG: define weak_odr dllexport
> >                %struct.ExportDefaultedDefs*
> > @"\01??0ExportDefaultedDefs@@QEAA at AEBU0@@Z"(%struct.ExportDefaultedDefs*
> > returned %this, %struct.ExportDefaultedDefs* nonnull)
> > -// G32-DAG: define weak_odr dllexport x86_thiscallcc void
> > @_ZN19ExportDefaultedDefsC1ERKS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* nonnull)
> > -// G64-DAG: define weak_odr dllexport                void
> > @_ZN19ExportDefaultedDefsC1ERKS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* nonnull)
> > -// G32-DAG: define weak_odr dllexport x86_thiscallcc void
> > @_ZN19ExportDefaultedDefsC2ERKS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* nonnull)
> > -// G64-DAG: define weak_odr dllexport                void
> > @_ZN19ExportDefaultedDefsC2ERKS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* nonnull)
> > +// M32-DAG: define weak_odr dllexport x86_thiscallcc
> > %struct.ExportDefaultedDefs*
> > @"\01??0ExportDefaultedDefs@@QAE at ABU0@@Z"(%struct.ExportDefaultedDefs*
> > returned %this, %struct.ExportDefaultedDefs*
> > dereferenceable({{[0-9]+}}))
> > +// M64-DAG: define weak_odr dllexport
> >                %struct.ExportDefaultedDefs*
> > @"\01??0ExportDefaultedDefs@@QEAA at AEBU0@@Z"(%struct.ExportDefaultedDefs*
> > returned %this, %struct.ExportDefaultedDefs*
> > dereferenceable({{[0-9]+}}))
> > +// G32-DAG: define weak_odr dllexport x86_thiscallcc void
> > @_ZN19ExportDefaultedDefsC1ERKS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// G64-DAG: define weak_odr dllexport                void
> > @_ZN19ExportDefaultedDefsC1ERKS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// G32-DAG: define weak_odr dllexport x86_thiscallcc void
> > @_ZN19ExportDefaultedDefsC2ERKS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// G64-DAG: define weak_odr dllexport                void
> > @_ZN19ExportDefaultedDefsC2ERKS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
> >  __declspec(dllexport)
> >  ExportDefaultedDefs::ExportDefaultedDefs(const
> >  ExportDefaultedDefs&) = default;
> >  
> > -// M32-DAG: define weak_odr dllexport x86_thiscallcc nonnull
> > %struct.ExportDefaultedDefs*
> > @"\01??4ExportDefaultedDefs@@QAEAAU0 at ABU0@@Z"(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* nonnull)
> > -// M64-DAG: define weak_odr dllexport                nonnull
> > %struct.ExportDefaultedDefs*
> > @"\01??4ExportDefaultedDefs@@QEAAAEAU0 at AEBU0@@Z"(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* nonnull)
> > -// G32-DAG: define weak_odr dllexport x86_thiscallcc nonnull
> > %struct.ExportDefaultedDefs*
> > @_ZN19ExportDefaultedDefsaSERKS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* nonnull)
> > -// G64-DAG: define weak_odr dllexport                nonnull
> > %struct.ExportDefaultedDefs*
> > @_ZN19ExportDefaultedDefsaSERKS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* nonnull)
> > +// M32-DAG: define weak_odr dllexport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs*
> > @"\01??4ExportDefaultedDefs@@QAEAAU0 at ABU0@@Z"(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// M64-DAG: define weak_odr dllexport
> >                dereferenceable({{[0-9]+}})
> > %struct.ExportDefaultedDefs*
> > @"\01??4ExportDefaultedDefs@@QEAAAEAU0 at AEBU0@@Z"(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// G32-DAG: define weak_odr dllexport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs*
> > @_ZN19ExportDefaultedDefsaSERKS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// G64-DAG: define weak_odr dllexport
> >                dereferenceable({{[0-9]+}})
> > %struct.ExportDefaultedDefs*
> > @_ZN19ExportDefaultedDefsaSERKS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
> >  inline ExportDefaultedDefs& ExportDefaultedDefs::operator=(const
> >  ExportDefaultedDefs&) = default;
> >  
> > -// M32-DAG: define dllexport x86_thiscallcc
> > %struct.ExportDefaultedDefs*
> > @"\01??0ExportDefaultedDefs@@QAE@$$QAU0@@Z"(%struct.ExportDefaultedDefs*
> > returned %this, %struct.ExportDefaultedDefs* nonnull)
> > -// M64-DAG: define dllexport
> >                %struct.ExportDefaultedDefs*
> > @"\01??0ExportDefaultedDefs@@QEAA@$$QEAU0@@Z"(%struct.ExportDefaultedDefs*
> > returned %this, %struct.ExportDefaultedDefs* nonnull)
> > -// G32-DAG: define dllexport x86_thiscallcc void
> > @_ZN19ExportDefaultedDefsC1EOS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* nonnull)
> > -// G64-DAG: define dllexport                void
> > @_ZN19ExportDefaultedDefsC1EOS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* nonnull)
> > -// G32-DAG: define dllexport x86_thiscallcc void
> > @_ZN19ExportDefaultedDefsC2EOS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* nonnull)
> > -// G64-DAG: define dllexport                void
> > @_ZN19ExportDefaultedDefsC2EOS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* nonnull)
> > +// M32-DAG: define dllexport x86_thiscallcc
> > %struct.ExportDefaultedDefs*
> > @"\01??0ExportDefaultedDefs@@QAE@$$QAU0@@Z"(%struct.ExportDefaultedDefs*
> > returned %this, %struct.ExportDefaultedDefs*
> > dereferenceable({{[0-9]+}}))
> > +// M64-DAG: define dllexport
> >                %struct.ExportDefaultedDefs*
> > @"\01??0ExportDefaultedDefs@@QEAA@$$QEAU0@@Z"(%struct.ExportDefaultedDefs*
> > returned %this, %struct.ExportDefaultedDefs*
> > dereferenceable({{[0-9]+}}))
> > +// G32-DAG: define dllexport x86_thiscallcc void
> > @_ZN19ExportDefaultedDefsC1EOS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// G64-DAG: define dllexport                void
> > @_ZN19ExportDefaultedDefsC1EOS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// G32-DAG: define dllexport x86_thiscallcc void
> > @_ZN19ExportDefaultedDefsC2EOS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// G64-DAG: define dllexport                void
> > @_ZN19ExportDefaultedDefsC2EOS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
> >  __declspec(dllexport)
> >  ExportDefaultedDefs::ExportDefaultedDefs(ExportDefaultedDefs&&) =
> >  default;
> >  
> > -// M32-DAG: define dllexport x86_thiscallcc nonnull
> > %struct.ExportDefaultedDefs*
> > @"\01??4ExportDefaultedDefs@@QAEAAU0@$$QAU0@@Z"(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* nonnull)
> > -// M64-DAG: define dllexport                nonnull
> > %struct.ExportDefaultedDefs*
> > @"\01??4ExportDefaultedDefs@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* nonnull)
> > -// G32-DAG: define dllexport x86_thiscallcc nonnull
> > %struct.ExportDefaultedDefs*
> > @_ZN19ExportDefaultedDefsaSEOS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* nonnull)
> > -// G64-DAG: define dllexport                nonnull
> > %struct.ExportDefaultedDefs*
> > @_ZN19ExportDefaultedDefsaSEOS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* nonnull)
> > +// M32-DAG: define dllexport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs*
> > @"\01??4ExportDefaultedDefs@@QAEAAU0@$$QAU0@@Z"(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// M64-DAG: define dllexport
> >                dereferenceable({{[0-9]+}})
> > %struct.ExportDefaultedDefs*
> > @"\01??4ExportDefaultedDefs@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// G32-DAG: define dllexport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs*
> > @_ZN19ExportDefaultedDefsaSEOS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// G64-DAG: define dllexport
> >                dereferenceable({{[0-9]+}})
> > %struct.ExportDefaultedDefs*
> > @_ZN19ExportDefaultedDefsaSEOS_(%struct.ExportDefaultedDefs*
> > %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
> >  ExportDefaultedDefs&
> >  ExportDefaultedDefs::operator=(ExportDefaultedDefs&&) = default;
> >  
> >  
> >
> > Modified: cfe/trunk/test/CodeGenCXX/dllexport.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/dllexport.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/dllexport.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/dllexport.cpp Fri Jul 18 10:52:10
> > 2014
> > @@ -489,7 +489,7 @@ struct S {
> >  
> >  struct __declspec(dllexport) T {
> >    // Copy assignment operator:
> > -  // M32-DAG: define weak_odr dllexport x86_thiscallcc nonnull
> > %struct.T* @"\01??4T@@QAEAAU0 at ABU0@@Z"
> > +  // M32-DAG: define weak_odr dllexport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.T* @"\01??4T@@QAEAAU0 at ABU0@@Z"
> >  
> >    // Explicitly defaulted copy constructur:
> >    T(const T&) = default;
> > @@ -511,7 +511,7 @@ int T::c;
> >  template <typename T> struct __declspec(dllexport) U { void foo()
> >  {} };
> >  // The U<int> specialization below must cause the following to be
> >  emitted:
> >  // M32-DAG: define weak_odr dllexport x86_thiscallcc void
> >  @"\01?foo@?$U at H@@QAEXXZ"
> > -// M32-DAG: define weak_odr dllexport x86_thiscallcc nonnull
> > %struct.U* @"\01??4?$U at H@@QAEAAU0 at ABU0@@Z"
> > +// M32-DAG: define weak_odr dllexport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.U*
> > @"\01??4?$U at H@@QAEAAU0 at ABU0@@Z"
> >  struct __declspec(dllexport) V : public U<int> { };
> >  
> >  
> > @@ -531,7 +531,7 @@ struct __declspec(dllexport) X : public
> >  
> >  struct __declspec(dllexport) Y {
> >    // Move assignment operator:
> > -  // M32-DAG: define weak_odr dllexport x86_thiscallcc nonnull
> > %struct.Y* @"\01??4Y@@QAEAAU0@$$QAU0@@Z"
> > +  // M32-DAG: define weak_odr dllexport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.Y*
> > @"\01??4Y@@QAEAAU0@$$QAU0@@Z"
> >  
> >    int x;
> >  };
> >
> > Modified: cfe/trunk/test/CodeGenCXX/dllimport-members.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/dllimport-members.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/dllimport-members.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/dllimport-members.cpp Fri Jul 18
> > 10:52:10 2014
> > @@ -420,28 +420,28 @@ struct ImportSpecials {
> >    // G64-DAG: declare dllimport                void
> >                       @_ZN14ImportSpecialsD1Ev(%struct.ImportSpecials*)
> >    __declspec(dllimport) ~ImportSpecials();
> >  
> > -  // M32-DAG: declare dllimport x86_thiscallcc
> > %struct.ImportSpecials*
> > @"\01??0ImportSpecials@@QAE at ABU0@@Z"(%struct.ImportSpecials*
> > returned, %struct.ImportSpecials* nonnull)
> > -  // M64-DAG: declare dllimport
> >                %struct.ImportSpecials*
> > @"\01??0ImportSpecials@@QEAA at AEBU0@@Z"(%struct.ImportSpecials*
> > returned, %struct.ImportSpecials* nonnull)
> > -  // G32-DAG: declare dllimport x86_thiscallcc void
> >                    @_ZN14ImportSpecialsC1ERKS_(%struct.ImportSpecials*,
> > %struct.ImportSpecials* nonnull)
> > -  // G64-DAG: declare dllimport                void
> >                    @_ZN14ImportSpecialsC1ERKS_(%struct.ImportSpecials*,
> > %struct.ImportSpecials* nonnull)
> > +  // M32-DAG: declare dllimport x86_thiscallcc
> > %struct.ImportSpecials*
> > @"\01??0ImportSpecials@@QAE at ABU0@@Z"(%struct.ImportSpecials*
> > returned, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
> > +  // M64-DAG: declare dllimport
> >                %struct.ImportSpecials*
> > @"\01??0ImportSpecials@@QEAA at AEBU0@@Z"(%struct.ImportSpecials*
> > returned, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
> > +  // G32-DAG: declare dllimport x86_thiscallcc void
> >                    @_ZN14ImportSpecialsC1ERKS_(%struct.ImportSpecials*,
> > %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
> > +  // G64-DAG: declare dllimport                void
> >                    @_ZN14ImportSpecialsC1ERKS_(%struct.ImportSpecials*,
> > %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
> >    __declspec(dllimport) ImportSpecials(const ImportSpecials&);
> >  
> > -  // M32-DAG: declare dllimport x86_thiscallcc nonnull
> > %struct.ImportSpecials*
> > @"\01??4ImportSpecials@@QAEAAU0 at ABU0@@Z"(%struct.ImportSpecials*,
> > %struct.ImportSpecials* nonnull)
> > -  // M64-DAG: declare dllimport                nonnull
> > %struct.ImportSpecials*
> > @"\01??4ImportSpecials@@QEAAAEAU0 at AEBU0@@Z"(%struct.ImportSpecials*,
> > %struct.ImportSpecials* nonnull)
> > -  // G32-DAG: declare dllimport x86_thiscallcc nonnull
> > %struct.ImportSpecials*
> > @_ZN14ImportSpecialsaSERKS_(%struct.ImportSpecials*,
> > %struct.ImportSpecials* nonnull)
> > -  // G64-DAG: declare dllimport                nonnull
> > %struct.ImportSpecials*
> > @_ZN14ImportSpecialsaSERKS_(%struct.ImportSpecials*,
> > %struct.ImportSpecials* nonnull)
> > +  // M32-DAG: declare dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportSpecials*
> > @"\01??4ImportSpecials@@QAEAAU0 at ABU0@@Z"(%struct.ImportSpecials*,
> > %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
> > +  // M64-DAG: declare dllimport
> >                dereferenceable({{[0-9]+}}) %struct.ImportSpecials*
> > @"\01??4ImportSpecials@@QEAAAEAU0 at AEBU0@@Z"(%struct.ImportSpecials*,
> > %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
> > +  // G32-DAG: declare dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportSpecials*
> > @_ZN14ImportSpecialsaSERKS_(%struct.ImportSpecials*,
> > %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
> > +  // G64-DAG: declare dllimport
> >                dereferenceable({{[0-9]+}}) %struct.ImportSpecials*
> > @_ZN14ImportSpecialsaSERKS_(%struct.ImportSpecials*,
> > %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
> >    __declspec(dllimport) ImportSpecials& operator=(const
> >    ImportSpecials&);
> >  
> > -  // M32-DAG: declare dllimport x86_thiscallcc
> > %struct.ImportSpecials*
> > @"\01??0ImportSpecials@@QAE@$$QAU0@@Z"(%struct.ImportSpecials*
> > returned, %struct.ImportSpecials* nonnull)
> > -  // M64-DAG: declare dllimport
> >                %struct.ImportSpecials*
> > @"\01??0ImportSpecials@@QEAA@$$QEAU0@@Z"(%struct.ImportSpecials*
> > returned, %struct.ImportSpecials* nonnull)
> > -  // G32-DAG: declare dllimport x86_thiscallcc void
> >                    @_ZN14ImportSpecialsC1EOS_(%struct.ImportSpecials*,
> > %struct.ImportSpecials* nonnull)
> > -  // G64-DAG: declare dllimport                void
> >                    @_ZN14ImportSpecialsC1EOS_(%struct.ImportSpecials*,
> > %struct.ImportSpecials* nonnull)
> > +  // M32-DAG: declare dllimport x86_thiscallcc
> > %struct.ImportSpecials*
> > @"\01??0ImportSpecials@@QAE@$$QAU0@@Z"(%struct.ImportSpecials*
> > returned, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
> > +  // M64-DAG: declare dllimport
> >                %struct.ImportSpecials*
> > @"\01??0ImportSpecials@@QEAA@$$QEAU0@@Z"(%struct.ImportSpecials*
> > returned, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
> > +  // G32-DAG: declare dllimport x86_thiscallcc void
> >                    @_ZN14ImportSpecialsC1EOS_(%struct.ImportSpecials*,
> > %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
> > +  // G64-DAG: declare dllimport                void
> >                    @_ZN14ImportSpecialsC1EOS_(%struct.ImportSpecials*,
> > %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
> >    __declspec(dllimport) ImportSpecials(ImportSpecials&&);
> >  
> > -  // M32-DAG: declare dllimport x86_thiscallcc nonnull
> > %struct.ImportSpecials*
> > @"\01??4ImportSpecials@@QAEAAU0@$$QAU0@@Z"(%struct.ImportSpecials*,
> > %struct.ImportSpecials* nonnull)
> > -  // M64-DAG: declare dllimport                nonnull
> > %struct.ImportSpecials*
> > @"\01??4ImportSpecials@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportSpecials*,
> > %struct.ImportSpecials* nonnull)
> > -  // G32-DAG: declare dllimport x86_thiscallcc nonnull
> > %struct.ImportSpecials*
> > @_ZN14ImportSpecialsaSEOS_(%struct.ImportSpecials*,
> > %struct.ImportSpecials* nonnull)
> > -  // G64-DAG: declare dllimport                nonnull
> > %struct.ImportSpecials*
> > @_ZN14ImportSpecialsaSEOS_(%struct.ImportSpecials*,
> > %struct.ImportSpecials* nonnull)
> > +  // M32-DAG: declare dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportSpecials*
> > @"\01??4ImportSpecials@@QAEAAU0@$$QAU0@@Z"(%struct.ImportSpecials*,
> > %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
> > +  // M64-DAG: declare dllimport
> >                dereferenceable({{[0-9]+}}) %struct.ImportSpecials*
> > @"\01??4ImportSpecials@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportSpecials*,
> > %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
> > +  // G32-DAG: declare dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportSpecials*
> > @_ZN14ImportSpecialsaSEOS_(%struct.ImportSpecials*,
> > %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
> > +  // G64-DAG: declare dllimport
> >                dereferenceable({{[0-9]+}}) %struct.ImportSpecials*
> > @_ZN14ImportSpecialsaSEOS_(%struct.ImportSpecials*,
> > %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
> >    __declspec(dllimport) ImportSpecials&
> >    operator=(ImportSpecials&&);
> >  };
> >  USESPECIALS(ImportSpecials)
> > @@ -465,36 +465,36 @@ struct ImportInlineSpecials {
> >    // GO1-DAG: define available_externally dllimport x86_thiscallcc
> >    void @_ZN20ImportInlineSpecialsD1Ev(
> >    __declspec(dllimport) ~ImportInlineSpecials() {}
> >  
> > -  // M32-DAG: declare dllimport x86_thiscallcc
> > %struct.ImportInlineSpecials*
> > @"\01??0ImportInlineSpecials@@QAE at ABU0@@Z"(%struct.ImportInlineSpecials*
> > returned, %struct.ImportInlineSpecials* nonnull)
> > -  // M64-DAG: declare dllimport
> >                %struct.ImportInlineSpecials*
> > @"\01??0ImportInlineSpecials@@QEAA at AEBU0@@Z"(%struct.ImportInlineSpecials*
> > returned, %struct.ImportInlineSpecials* nonnull)
> > -  // G32-DAG: declare dllimport x86_thiscallcc void
> > @_ZN20ImportInlineSpecialsC1ERKS_(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* nonnull)
> > -  // G64-DAG: declare dllimport                void
> > @_ZN20ImportInlineSpecialsC1ERKS_(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* nonnull)
> > +  // M32-DAG: declare dllimport x86_thiscallcc
> > %struct.ImportInlineSpecials*
> > @"\01??0ImportInlineSpecials@@QAE at ABU0@@Z"(%struct.ImportInlineSpecials*
> > returned, %struct.ImportInlineSpecials*
> > dereferenceable({{[0-9]+}}))
> > +  // M64-DAG: declare dllimport
> >                %struct.ImportInlineSpecials*
> > @"\01??0ImportInlineSpecials@@QEAA at AEBU0@@Z"(%struct.ImportInlineSpecials*
> > returned, %struct.ImportInlineSpecials*
> > dereferenceable({{[0-9]+}}))
> > +  // G32-DAG: declare dllimport x86_thiscallcc void
> > @_ZN20ImportInlineSpecialsC1ERKS_(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
> > +  // G64-DAG: declare dllimport                void
> > @_ZN20ImportInlineSpecialsC1ERKS_(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
> >    // MO1-DAG: define available_externally dllimport x86_thiscallcc
> >    %struct.ImportInlineSpecials*
> >    @"\01??0ImportInlineSpecials@@QAE at ABU0@@Z"(
> >    // GO1-DAG: define available_externally dllimport x86_thiscallcc
> >    void @_ZN20ImportInlineSpecialsC1ERKS_(
> >    __declspec(dllimport) inline ImportInlineSpecials(const
> >    ImportInlineSpecials&);
> >  
> > -  // M32-DAG: declare dllimport x86_thiscallcc nonnull
> > %struct.ImportInlineSpecials*
> > @"\01??4ImportInlineSpecials@@QAEAAU0 at ABU0@@Z"(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* nonnull)
> > -  // M64-DAG: declare dllimport                nonnull
> > %struct.ImportInlineSpecials*
> > @"\01??4ImportInlineSpecials@@QEAAAEAU0 at AEBU0@@Z"(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* nonnull)
> > -  // G32-DAG: declare dllimport x86_thiscallcc nonnull
> > %struct.ImportInlineSpecials*
> > @_ZN20ImportInlineSpecialsaSERKS_(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* nonnull)
> > -  // G64-DAG: declare dllimport                nonnull
> > %struct.ImportInlineSpecials*
> > @_ZN20ImportInlineSpecialsaSERKS_(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* nonnull)
> > -  // MO1-DAG: define available_externally dllimport x86_thiscallcc
> > nonnull %struct.ImportInlineSpecials*
> > @"\01??4ImportInlineSpecials@@QAEAAU0 at ABU0@@Z"(
> > -  // GO1-DAG: define available_externally dllimport x86_thiscallcc
> > nonnull %struct.ImportInlineSpecials*
> > @_ZN20ImportInlineSpecialsaSERKS_(
> > +  // M32-DAG: declare dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials*
> > @"\01??4ImportInlineSpecials@@QAEAAU0 at ABU0@@Z"(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
> > +  // M64-DAG: declare dllimport
> >                dereferenceable({{[0-9]+}})
> > %struct.ImportInlineSpecials*
> > @"\01??4ImportInlineSpecials@@QEAAAEAU0 at AEBU0@@Z"(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
> > +  // G32-DAG: declare dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials*
> > @_ZN20ImportInlineSpecialsaSERKS_(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
> > +  // G64-DAG: declare dllimport
> >                dereferenceable({{[0-9]+}})
> > %struct.ImportInlineSpecials*
> > @_ZN20ImportInlineSpecialsaSERKS_(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
> > +  // MO1-DAG: define available_externally dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials*
> > @"\01??4ImportInlineSpecials@@QAEAAU0 at ABU0@@Z"(
> > +  // GO1-DAG: define available_externally dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials*
> > @_ZN20ImportInlineSpecialsaSERKS_(
> >    __declspec(dllimport) ImportInlineSpecials& operator=(const
> >    ImportInlineSpecials&);
> >  
> > -  // M32-DAG: declare dllimport x86_thiscallcc
> > %struct.ImportInlineSpecials*
> > @"\01??0ImportInlineSpecials@@QAE@$$QAU0@@Z"(%struct.ImportInlineSpecials*
> > returned, %struct.ImportInlineSpecials* nonnull)
> > -  // M64-DAG: declare dllimport
> >                %struct.ImportInlineSpecials*
> > @"\01??0ImportInlineSpecials@@QEAA@$$QEAU0@@Z"(%struct.ImportInlineSpecials*
> > returned, %struct.ImportInlineSpecials* nonnull)
> > -  // G32-DAG: declare dllimport x86_thiscallcc void
> > @_ZN20ImportInlineSpecialsC1EOS_(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* nonnull)
> > -  // G64-DAG: declare dllimport                void
> > @_ZN20ImportInlineSpecialsC1EOS_(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* nonnull)
> > +  // M32-DAG: declare dllimport x86_thiscallcc
> > %struct.ImportInlineSpecials*
> > @"\01??0ImportInlineSpecials@@QAE@$$QAU0@@Z"(%struct.ImportInlineSpecials*
> > returned, %struct.ImportInlineSpecials*
> > dereferenceable({{[0-9]+}}))
> > +  // M64-DAG: declare dllimport
> >                %struct.ImportInlineSpecials*
> > @"\01??0ImportInlineSpecials@@QEAA@$$QEAU0@@Z"(%struct.ImportInlineSpecials*
> > returned, %struct.ImportInlineSpecials*
> > dereferenceable({{[0-9]+}}))
> > +  // G32-DAG: declare dllimport x86_thiscallcc void
> > @_ZN20ImportInlineSpecialsC1EOS_(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
> > +  // G64-DAG: declare dllimport                void
> > @_ZN20ImportInlineSpecialsC1EOS_(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
> >    // MO1-DAG: define available_externally dllimport x86_thiscallcc
> >    %struct.ImportInlineSpecials*
> >    @"\01??0ImportInlineSpecials@@QAE@$$QAU0@@Z"(
> >    // GO1-DAG: define available_externally dllimport x86_thiscallcc
> >    void @_ZN20ImportInlineSpecialsC1EOS_(
> >    __declspec(dllimport)
> >    ImportInlineSpecials(ImportInlineSpecials&&) {}
> >  
> > -  // M32-DAG: declare dllimport x86_thiscallcc nonnull
> > %struct.ImportInlineSpecials*
> > @"\01??4ImportInlineSpecials@@QAEAAU0@$$QAU0@@Z"(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* nonnull)
> > -  // M64-DAG: declare dllimport                nonnull
> > %struct.ImportInlineSpecials*
> > @"\01??4ImportInlineSpecials@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* nonnull)
> > -  // G32-DAG: declare dllimport x86_thiscallcc nonnull
> > %struct.ImportInlineSpecials*
> > @_ZN20ImportInlineSpecialsaSEOS_(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* nonnull)
> > -  // G64-DAG: declare dllimport                nonnull
> > %struct.ImportInlineSpecials*
> > @_ZN20ImportInlineSpecialsaSEOS_(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* nonnull)
> > -  // MO1-DAG: define available_externally dllimport x86_thiscallcc
> > nonnull %struct.ImportInlineSpecials*
> > @"\01??4ImportInlineSpecials@@QAEAAU0@$$QAU0@@Z"(
> > -  // GO1-DAG: define available_externally dllimport x86_thiscallcc
> > nonnull %struct.ImportInlineSpecials*
> > @_ZN20ImportInlineSpecialsaSEOS_(
> > +  // M32-DAG: declare dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials*
> > @"\01??4ImportInlineSpecials@@QAEAAU0@$$QAU0@@Z"(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
> > +  // M64-DAG: declare dllimport
> >                dereferenceable({{[0-9]+}})
> > %struct.ImportInlineSpecials*
> > @"\01??4ImportInlineSpecials@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
> > +  // G32-DAG: declare dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials*
> > @_ZN20ImportInlineSpecialsaSEOS_(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
> > +  // G64-DAG: declare dllimport
> >                dereferenceable({{[0-9]+}})
> > %struct.ImportInlineSpecials*
> > @_ZN20ImportInlineSpecialsaSEOS_(%struct.ImportInlineSpecials*,
> > %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
> > +  // MO1-DAG: define available_externally dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials*
> > @"\01??4ImportInlineSpecials@@QAEAAU0@$$QAU0@@Z"(
> > +  // GO1-DAG: define available_externally dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials*
> > @_ZN20ImportInlineSpecialsaSEOS_(
> >    __declspec(dllimport) ImportInlineSpecials&
> >    operator=(ImportInlineSpecials&&) { return *this; }
> >  };
> >  ImportInlineSpecials::ImportInlineSpecials(const
> >  ImportInlineSpecials&) {}
> > @@ -520,36 +520,36 @@ struct ImportDefaulted {
> >    // GO1-DAG: define available_externally dllimport x86_thiscallcc
> >    void @_ZN15ImportDefaultedD1Ev(%struct.ImportDefaulted* %this)
> >    __declspec(dllimport) ~ImportDefaulted() = default;
> >  
> > -  // M32-DAG: declare dllimport x86_thiscallcc
> > %struct.ImportDefaulted*
> > @"\01??0ImportDefaulted@@QAE at ABU0@@Z"(%struct.ImportDefaulted*
> > returned, %struct.ImportDefaulted* nonnull)
> > -  // M64-DAG: declare dllimport
> >                %struct.ImportDefaulted*
> > @"\01??0ImportDefaulted@@QEAA at AEBU0@@Z"(%struct.ImportDefaulted*
> > returned, %struct.ImportDefaulted* nonnull)
> > -  // G32-DAG: declare dllimport x86_thiscallcc void
> >                     @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* nonnull)
> > -  // G64-DAG: declare dllimport                void
> >                     @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* nonnull)
> > -  // MO1-DAG: define available_externally dllimport x86_thiscallcc
> > %struct.ImportDefaulted*
> > @"\01??0ImportDefaulted@@QAE at ABU0@@Z"(%struct.ImportDefaulted*
> > returned %this, %struct.ImportDefaulted* nonnull)
> > -  // GO1-DAG: define available_externally dllimport x86_thiscallcc
> > void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted* %this,
> > %struct.ImportDefaulted* nonnull)
> > +  // M32-DAG: declare dllimport x86_thiscallcc
> > %struct.ImportDefaulted*
> > @"\01??0ImportDefaulted@@QAE at ABU0@@Z"(%struct.ImportDefaulted*
> > returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> > +  // M64-DAG: declare dllimport
> >                %struct.ImportDefaulted*
> > @"\01??0ImportDefaulted@@QEAA at AEBU0@@Z"(%struct.ImportDefaulted*
> > returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> > +  // G32-DAG: declare dllimport x86_thiscallcc void
> >                     @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> > +  // G64-DAG: declare dllimport                void
> >                     @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> > +  // MO1-DAG: define available_externally dllimport x86_thiscallcc
> > %struct.ImportDefaulted*
> > @"\01??0ImportDefaulted@@QAE at ABU0@@Z"(%struct.ImportDefaulted*
> > returned %this, %struct.ImportDefaulted*
> > dereferenceable({{[0-9]+}}))
> > +  // GO1-DAG: define available_externally dllimport x86_thiscallcc
> > void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted* %this,
> > %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> >    __declspec(dllimport) ImportDefaulted(const ImportDefaulted&) =
> >    default;
> >  
> > -  // M32-DAG: declare dllimport x86_thiscallcc nonnull
> > %struct.ImportDefaulted*
> > @"\01??4ImportDefaulted@@QAEAAU0 at ABU0@@Z"(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* nonnull)
> > -  // M64-DAG: declare dllimport                nonnull
> > %struct.ImportDefaulted*
> > @"\01??4ImportDefaulted@@QEAAAEAU0 at AEBU0@@Z"(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* nonnull)
> > -  // G32-DAG: declare dllimport x86_thiscallcc nonnull
> > %struct.ImportDefaulted*
> > @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* nonnull)
> > -  // G64-DAG: declare dllimport                nonnull
> > %struct.ImportDefaulted*
> > @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* nonnull)
> > -  // MO1-DAG: define available_externally dllimport x86_thiscallcc
> > nonnull %struct.ImportDefaulted*
> > @"\01??4ImportDefaulted@@QAEAAU0 at ABU0@@Z"(%struct.ImportDefaulted*
> > %this, %struct.ImportDefaulted* nonnull)
> > -  // GO1-DAG: define available_externally dllimport x86_thiscallcc
> > nonnull %struct.ImportDefaulted*
> > @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted* %this,
> > %struct.ImportDefaulted* nonnull)
> > +  // M32-DAG: declare dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportDefaulted*
> > @"\01??4ImportDefaulted@@QAEAAU0 at ABU0@@Z"(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> > +  // M64-DAG: declare dllimport
> >                dereferenceable({{[0-9]+}})
> > %struct.ImportDefaulted*
> > @"\01??4ImportDefaulted@@QEAAAEAU0 at AEBU0@@Z"(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> > +  // G32-DAG: declare dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportDefaulted*
> > @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> > +  // G64-DAG: declare dllimport
> >                dereferenceable({{[0-9]+}})
> > %struct.ImportDefaulted*
> > @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> > +  // MO1-DAG: define available_externally dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportDefaulted*
> > @"\01??4ImportDefaulted@@QAEAAU0 at ABU0@@Z"(%struct.ImportDefaulted*
> > %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> > +  // GO1-DAG: define available_externally dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportDefaulted*
> > @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted* %this,
> > %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> >    __declspec(dllimport) ImportDefaulted& operator=(const
> >    ImportDefaulted&) = default;
> >  
> > -  // M32-DAG: declare dllimport x86_thiscallcc
> > %struct.ImportDefaulted*
> > @"\01??0ImportDefaulted@@QAE@$$QAU0@@Z"(%struct.ImportDefaulted*
> > returned, %struct.ImportDefaulted* nonnull)
> > -  // M64-DAG: declare dllimport
> >                %struct.ImportDefaulted*
> > @"\01??0ImportDefaulted@@QEAA@$$QEAU0@@Z"(%struct.ImportDefaulted*
> > returned, %struct.ImportDefaulted* nonnull)
> > -  // G32-DAG: declare dllimport x86_thiscallcc void
> >                     @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* nonnull)
> > -  // G64-DAG: declare dllimport                void
> >                     @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* nonnull)
> > -  // MO1-DAG: define available_externally dllimport x86_thiscallcc
> > %struct.ImportDefaulted*
> > @"\01??0ImportDefaulted@@QAE@$$QAU0@@Z"(%struct.ImportDefaulted*
> > returned %this, %struct.ImportDefaulted* nonnull)
> > -  // GO1-DAG: define available_externally dllimport x86_thiscallcc
> > void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted* %this,
> > %struct.ImportDefaulted* nonnull)
> > +  // M32-DAG: declare dllimport x86_thiscallcc
> > %struct.ImportDefaulted*
> > @"\01??0ImportDefaulted@@QAE@$$QAU0@@Z"(%struct.ImportDefaulted*
> > returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> > +  // M64-DAG: declare dllimport
> >                %struct.ImportDefaulted*
> > @"\01??0ImportDefaulted@@QEAA@$$QEAU0@@Z"(%struct.ImportDefaulted*
> > returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> > +  // G32-DAG: declare dllimport x86_thiscallcc void
> >                     @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> > +  // G64-DAG: declare dllimport                void
> >                     @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> > +  // MO1-DAG: define available_externally dllimport x86_thiscallcc
> > %struct.ImportDefaulted*
> > @"\01??0ImportDefaulted@@QAE@$$QAU0@@Z"(%struct.ImportDefaulted*
> > returned %this, %struct.ImportDefaulted*
> > dereferenceable({{[0-9]+}}))
> > +  // GO1-DAG: define available_externally dllimport x86_thiscallcc
> > void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted* %this,
> > %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> >    __declspec(dllimport) ImportDefaulted(ImportDefaulted&&) =
> >    default;
> >  
> > -  // M32-DAG: declare dllimport x86_thiscallcc nonnull
> > %struct.ImportDefaulted*
> > @"\01??4ImportDefaulted@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* nonnull)
> > -  // M64-DAG: declare dllimport                nonnull
> > %struct.ImportDefaulted*
> > @"\01??4ImportDefaulted@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* nonnull)
> > -  // G32-DAG: declare dllimport x86_thiscallcc nonnull
> > %struct.ImportDefaulted*
> > @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* nonnull)
> > -  // G64-DAG: declare dllimport                nonnull
> > %struct.ImportDefaulted*
> > @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* nonnull)
> > -  // MO1-DAG: define available_externally dllimport x86_thiscallcc
> > nonnull %struct.ImportDefaulted*
> > @"\01??4ImportDefaulted@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaulted*
> > %this, %struct.ImportDefaulted* nonnull)
> > -  // GO1-DAG: define available_externally dllimport x86_thiscallcc
> > nonnull %struct.ImportDefaulted*
> > @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted* %this,
> > %struct.ImportDefaulted* nonnull)
> > +  // M32-DAG: declare dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportDefaulted*
> > @"\01??4ImportDefaulted@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> > +  // M64-DAG: declare dllimport
> >                dereferenceable({{[0-9]+}})
> > %struct.ImportDefaulted*
> > @"\01??4ImportDefaulted@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> > +  // G32-DAG: declare dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportDefaulted*
> > @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> > +  // G64-DAG: declare dllimport
> >                dereferenceable({{[0-9]+}})
> > %struct.ImportDefaulted*
> > @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted*,
> > %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> > +  // MO1-DAG: define available_externally dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportDefaulted*
> > @"\01??4ImportDefaulted@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaulted*
> > %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> > +  // GO1-DAG: define available_externally dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportDefaulted*
> > @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted* %this,
> > %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
> >    __declspec(dllimport) ImportDefaulted&
> >    operator=(ImportDefaulted&&) = default;
> >  
> >    ForceNonTrivial v; // ensure special members are non-trivial
> > @@ -581,30 +581,30 @@ __declspec(dllimport) ImportDefaultedDef
> >  // G64-DAG: declare dllimport                void
> >  @_ZN19ImportDefaultedDefsD1Ev(%struct.ImportDefaultedDefs*)
> >  __declspec(dllimport) ImportDefaultedDefs::~ImportDefaultedDefs()
> >  = default;
> >  
> > -// M32-DAG: declare dllimport x86_thiscallcc
> > %struct.ImportDefaultedDefs*
> > @"\01??0ImportDefaultedDefs@@QAE at ABU0@@Z"(%struct.ImportDefaultedDefs*
> > returned, %struct.ImportDefaultedDefs* nonnull)
> > -// M64-DAG: declare dllimport
> >                %struct.ImportDefaultedDefs*
> > @"\01??0ImportDefaultedDefs@@QEAA at AEBU0@@Z"(%struct.ImportDefaultedDefs*
> > returned, %struct.ImportDefaultedDefs* nonnull)
> > -// G32-DAG: declare dllimport x86_thiscallcc void
> > @_ZN19ImportDefaultedDefsC1ERKS_(%struct.ImportDefaultedDefs*,
> > %struct.ImportDefaultedDefs* nonnull)
> > -// G64-DAG: declare dllimport                void
> > @_ZN19ImportDefaultedDefsC1ERKS_(%struct.ImportDefaultedDefs*,
> > %struct.ImportDefaultedDefs* nonnull)
> > +// M32-DAG: declare dllimport x86_thiscallcc
> > %struct.ImportDefaultedDefs*
> > @"\01??0ImportDefaultedDefs@@QAE at ABU0@@Z"(%struct.ImportDefaultedDefs*
> > returned, %struct.ImportDefaultedDefs*
> > dereferenceable({{[0-9]+}}))
> > +// M64-DAG: declare dllimport
> >                %struct.ImportDefaultedDefs*
> > @"\01??0ImportDefaultedDefs@@QEAA at AEBU0@@Z"(%struct.ImportDefaultedDefs*
> > returned, %struct.ImportDefaultedDefs*
> > dereferenceable({{[0-9]+}}))
> > +// G32-DAG: declare dllimport x86_thiscallcc void
> > @_ZN19ImportDefaultedDefsC1ERKS_(%struct.ImportDefaultedDefs*,
> > %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// G64-DAG: declare dllimport                void
> > @_ZN19ImportDefaultedDefsC1ERKS_(%struct.ImportDefaultedDefs*,
> > %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
> >  inline ImportDefaultedDefs::ImportDefaultedDefs(const
> >  ImportDefaultedDefs&) = default;
> >  
> > -// M32-DAG: declare dllimport x86_thiscallcc nonnull
> > %struct.ImportDefaultedDefs*
> > @"\01??4ImportDefaultedDefs@@QAEAAU0 at ABU0@@Z"(%struct.ImportDefaultedDefs*,
> > %struct.ImportDefaultedDefs* nonnull)
> > -// M64-DAG: declare dllimport                nonnull
> > %struct.ImportDefaultedDefs*
> > @"\01??4ImportDefaultedDefs@@QEAAAEAU0 at AEBU0@@Z"(%struct.ImportDefaultedDefs*,
> > %struct.ImportDefaultedDefs* nonnull)
> > -// G32-DAG: declare dllimport x86_thiscallcc nonnull
> > %struct.ImportDefaultedDefs*
> > @_ZN19ImportDefaultedDefsaSERKS_(%struct.ImportDefaultedDefs*,
> > %struct.ImportDefaultedDefs* nonnull)
> > -// G64-DAG: declare dllimport                nonnull
> > %struct.ImportDefaultedDefs*
> > @_ZN19ImportDefaultedDefsaSERKS_(%struct.ImportDefaultedDefs*,
> > %struct.ImportDefaultedDefs* nonnull)
> > +// M32-DAG: declare dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs*
> > @"\01??4ImportDefaultedDefs@@QAEAAU0 at ABU0@@Z"(%struct.ImportDefaultedDefs*,
> > %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// M64-DAG: declare dllimport
> >                dereferenceable({{[0-9]+}})
> > %struct.ImportDefaultedDefs*
> > @"\01??4ImportDefaultedDefs@@QEAAAEAU0 at AEBU0@@Z"(%struct.ImportDefaultedDefs*,
> > %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// G32-DAG: declare dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs*
> > @_ZN19ImportDefaultedDefsaSERKS_(%struct.ImportDefaultedDefs*,
> > %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// G64-DAG: declare dllimport
> >                dereferenceable({{[0-9]+}})
> > %struct.ImportDefaultedDefs*
> > @_ZN19ImportDefaultedDefsaSERKS_(%struct.ImportDefaultedDefs*,
> > %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
> >  inline ImportDefaultedDefs& ImportDefaultedDefs::operator=(const
> >  ImportDefaultedDefs&) = default;
> >  
> > -// M32-DAG: define x86_thiscallcc %struct.ImportDefaultedDefs*
> > @"\01??0ImportDefaultedDefs@@QAE@$$QAU0@@Z"(%struct.ImportDefaultedDefs*
> > returned %this, %struct.ImportDefaultedDefs* nonnull)
> > -// M64-DAG: define                %struct.ImportDefaultedDefs*
> > @"\01??0ImportDefaultedDefs@@QEAA@$$QEAU0@@Z"(%struct.ImportDefaultedDefs*
> > returned %this, %struct.ImportDefaultedDefs* nonnull)
> > -// G32-DAG: define x86_thiscallcc void
> > @_ZN19ImportDefaultedDefsC1EOS_(%struct.ImportDefaultedDefs*
> > %this, %struct.ImportDefaultedDefs* nonnull)
> > -// G64-DAG: define                void
> > @_ZN19ImportDefaultedDefsC1EOS_(%struct.ImportDefaultedDefs*
> > %this, %struct.ImportDefaultedDefs* nonnull)
> > -// G32-DAG: define x86_thiscallcc void
> > @_ZN19ImportDefaultedDefsC2EOS_(%struct.ImportDefaultedDefs*
> > %this, %struct.ImportDefaultedDefs* nonnull)
> > -// G64-DAG: define                void
> > @_ZN19ImportDefaultedDefsC2EOS_(%struct.ImportDefaultedDefs*
> > %this, %struct.ImportDefaultedDefs* nonnull)
> > +// M32-DAG: define x86_thiscallcc %struct.ImportDefaultedDefs*
> > @"\01??0ImportDefaultedDefs@@QAE@$$QAU0@@Z"(%struct.ImportDefaultedDefs*
> > returned %this, %struct.ImportDefaultedDefs*
> > dereferenceable({{[0-9]+}}))
> > +// M64-DAG: define                %struct.ImportDefaultedDefs*
> > @"\01??0ImportDefaultedDefs@@QEAA@$$QEAU0@@Z"(%struct.ImportDefaultedDefs*
> > returned %this, %struct.ImportDefaultedDefs*
> > dereferenceable({{[0-9]+}}))
> > +// G32-DAG: define x86_thiscallcc void
> > @_ZN19ImportDefaultedDefsC1EOS_(%struct.ImportDefaultedDefs*
> > %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// G64-DAG: define                void
> > @_ZN19ImportDefaultedDefsC1EOS_(%struct.ImportDefaultedDefs*
> > %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// G32-DAG: define x86_thiscallcc void
> > @_ZN19ImportDefaultedDefsC2EOS_(%struct.ImportDefaultedDefs*
> > %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// G64-DAG: define                void
> > @_ZN19ImportDefaultedDefsC2EOS_(%struct.ImportDefaultedDefs*
> > %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
> >  ImportDefaultedDefs::ImportDefaultedDefs(ImportDefaultedDefs&&) =
> >  default; // dllimport ignored
> >  
> > -// M32-DAG: define x86_thiscallcc nonnull
> > %struct.ImportDefaultedDefs*
> > @"\01??4ImportDefaultedDefs@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaultedDefs*
> > %this, %struct.ImportDefaultedDefs* nonnull)
> > -// M64-DAG: define                nonnull
> > %struct.ImportDefaultedDefs*
> > @"\01??4ImportDefaultedDefs@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportDefaultedDefs*
> > %this, %struct.ImportDefaultedDefs* nonnull)
> > -// G32-DAG: define x86_thiscallcc nonnull
> > %struct.ImportDefaultedDefs*
> > @_ZN19ImportDefaultedDefsaSEOS_(%struct.ImportDefaultedDefs*
> > %this, %struct.ImportDefaultedDefs* nonnull)
> > -// G64-DAG: define                nonnull
> > %struct.ImportDefaultedDefs*
> > @_ZN19ImportDefaultedDefsaSEOS_(%struct.ImportDefaultedDefs*
> > %this, %struct.ImportDefaultedDefs* nonnull)
> > +// M32-DAG: define x86_thiscallcc dereferenceable({{[0-9]+}})
> > %struct.ImportDefaultedDefs*
> > @"\01??4ImportDefaultedDefs@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaultedDefs*
> > %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// M64-DAG: define                dereferenceable({{[0-9]+}})
> > %struct.ImportDefaultedDefs*
> > @"\01??4ImportDefaultedDefs@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportDefaultedDefs*
> > %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// G32-DAG: define x86_thiscallcc dereferenceable({{[0-9]+}})
> > %struct.ImportDefaultedDefs*
> > @_ZN19ImportDefaultedDefsaSEOS_(%struct.ImportDefaultedDefs*
> > %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
> > +// G64-DAG: define                dereferenceable({{[0-9]+}})
> > %struct.ImportDefaultedDefs*
> > @_ZN19ImportDefaultedDefsaSEOS_(%struct.ImportDefaultedDefs*
> > %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
> >  ImportDefaultedDefs&
> >  ImportDefaultedDefs::operator=(ImportDefaultedDefs&&) = default;
> >  // dllimport ignored
> >  
> >  USESPECIALS(ImportDefaultedDefs)
> >
> > Modified: cfe/trunk/test/CodeGenCXX/dllimport.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/dllimport.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/dllimport.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/dllimport.cpp Fri Jul 18 10:52:10
> > 2014
> > @@ -539,11 +539,11 @@ struct __declspec(dllimport) T {
> >    // MO1-DAG: @"\01?b at T@@2HA" = external dllimport global i32
> >  
> >    T& operator=(T&) = default;
> > -  // MO1-DAG: define available_externally dllimport x86_thiscallcc
> > nonnull %struct.T* @"\01??4T@@QAEAAU0 at AAU0@@Z"
> > +  // MO1-DAG: define available_externally dllimport x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.T* @"\01??4T@@QAEAAU0 at AAU0@@Z"
> >  
> >    T& operator=(T&&) = default;
> >    // Note: Don't mark inline move operators dllimport because
> >    current MSVC versions don't export them.
> > -  // MO1-DAG: define linkonce_odr x86_thiscallcc nonnull
> > %struct.T* @"\01??4T@@QAEAAU0@$$QAU0@@Z"
> > +  // MO1-DAG: define linkonce_odr x86_thiscallcc
> > dereferenceable({{[0-9]+}}) %struct.T*
> > @"\01??4T@@QAEAAU0@$$QAU0@@Z"
> >  };
> >  USEMEMFUNC(T, a)
> >  USEVAR(T::b)
> >
> > Modified: cfe/trunk/test/CodeGenCXX/eh.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/eh.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/eh.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/eh.cpp Fri Jul 18 10:52:10 2014
> > @@ -34,7 +34,7 @@ void test2() {
> >  // CHECK-NEXT:  [[SELECTORVAR:%.*]] = alloca i32
> >  // CHECK-NEXT:  [[EXNOBJ:%.*]] = call i8*
> >  @__cxa_allocate_exception(i64 16)
> >  // CHECK-NEXT:  [[EXN:%.*]] = bitcast i8* [[EXNOBJ]] to
> >  [[DSTAR:%[^*]*\*]]
> > -// CHECK-NEXT:  invoke void @_ZN7test2_DC1ERKS_([[DSTAR]] [[EXN]],
> > [[DSTAR]] nonnull @d2)
> > +// CHECK-NEXT:  invoke void @_ZN7test2_DC1ERKS_([[DSTAR]] [[EXN]],
> > [[DSTAR]] dereferenceable({{[0-9]+}}) @d2)
> >  // CHECK-NEXT:     to label %[[CONT:.*]] unwind label %{{.*}}
> >  //      :     [[CONT]]:   (can't check this in Release-Asserts
> >  builds)
> >  // CHECK:       call void @__cxa_throw(i8* [[EXNOBJ]], i8* bitcast
> >  ({{.*}}* @_ZTI7test2_D to i8*), i8* null) [[NR]]
> > @@ -428,7 +428,7 @@ namespace test16 {
> >      // CHECK-NEXT: [[T0:%.*]] = bitcast i8* [[EXN]] to [[B:%.*]]*
> >      // CHECK-NEXT: invoke void @_ZN6test161AC1Ev([[A]]* [[TEMP]])
> >      // CHECK:      store i1 true, i1* [[TEMP_ACTIVE]]
> > -    // CHECK-NEXT: invoke void @_ZN6test161BC1ERKNS_1AE([[B]]*
> > [[T0]], [[A]]* nonnull [[TEMP]])
> > +    // CHECK-NEXT: invoke void @_ZN6test161BC1ERKNS_1AE([[B]]*
> > [[T0]], [[A]]* dereferenceable({{[0-9]+}}) [[TEMP]])
> >      // CHECK:      store i1 false, i1* [[EXN_ACTIVE]]
> >      // CHECK-NEXT: invoke void @__cxa_throw(i8* [[EXN]],
> >  
> >
> > Modified: cfe/trunk/test/CodeGenCXX/empty-nontrivially-copyable.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/empty-nontrivially-copyable.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/empty-nontrivially-copyable.cpp
> > (original)
> > +++ cfe/trunk/test/CodeGenCXX/empty-nontrivially-copyable.cpp Fri
> > Jul 18 10:52:10 2014
> > @@ -19,7 +19,7 @@ bool foo(Empty e) {
> >  }
> >  
> >  void caller(Empty &e) {
> > -// CHECK: @_Z6callerR5Empty(%struct.Empty* nonnull %e)
> > +// CHECK: @_Z6callerR5Empty(%struct.Empty*
> > dereferenceable({{[0-9]+}}) %e)
> >  // CHECK: call {{.*}} @_ZN5EmptyC1ERKS_(%struct.Empty*
> >  [[NEWTMP:%.*]], %struct.Empty*
> >  // CHECK: call {{.*}} @_Z3foo5Empty(%struct.Empty* [[NEWTMP]])
> >    foo(e);
> >
> > Modified: cfe/trunk/test/CodeGenCXX/exceptions.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/exceptions.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/exceptions.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/exceptions.cpp Fri Jul 18 10:52:10
> > 2014
> > @@ -279,7 +279,7 @@ namespace test5 {
> >    // CHECK-NEXT: [[ADJ:%.*]] = call i8*
> >    @__cxa_get_exception_ptr(i8* [[EXN]])
> >    // CHECK-NEXT: [[SRC:%.*]] = bitcast i8* [[ADJ]] to [[A_T]]*
> >    // CHECK-NEXT: invoke void @_ZN5test51TC1Ev([[T_T]]* [[T]])
> > -  // CHECK:      invoke void @_ZN5test51AC1ERKS0_RKNS_1TE([[A_T]]*
> > [[A]], [[A_T]]* nonnull [[SRC]], [[T_T]]* nonnull [[T]])
> > +  // CHECK:      invoke void @_ZN5test51AC1ERKS0_RKNS_1TE([[A_T]]*
> > [[A]], [[A_T]]* dereferenceable({{[0-9]+}}) [[SRC]], [[T_T]]*
> > dereferenceable({{[0-9]+}}) [[T]])
> >    // CHECK:      invoke void @_ZN5test51TD1Ev([[T_T]]* [[T]])
> >    // CHECK:      call i8* @__cxa_begin_catch(i8* [[EXN]]) [[NUW]]
> >    // CHECK-NEXT: invoke void @_ZN5test51AD1Ev([[A_T]]* [[A]])
> >
> > Modified: cfe/trunk/test/CodeGenCXX/fastcall.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/fastcall.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/fastcall.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/fastcall.cpp Fri Jul 18 10:52:10 2014
> > @@ -3,7 +3,7 @@
> >  void __attribute__((fastcall)) foo1(int &y);
> >  void bar1(int &y) {
> >    // CHECK-LABEL: define void @_Z4bar1Ri
> > -  // CHECK: call x86_fastcallcc void @_Z4foo1Ri(i32* inreg nonnull
> > %
> > +  // CHECK: call x86_fastcallcc void @_Z4foo1Ri(i32* inreg
> > dereferenceable({{[0-9]+}}) %
> >    foo1(y);
> >  }
> >  
> >
> > Modified: cfe/trunk/test/CodeGenCXX/goto.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/goto.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/goto.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/goto.cpp Fri Jul 18 10:52:10 2014
> > @@ -22,7 +22,7 @@ namespace test0 {
> >      // CHECK:      store i1 true, i1* [[CLEANUPACTIVE]]
> >      // CHECK:      [[NEWCAST:%.*]] = bitcast i8* [[NEW]] to [[V]]*
> >      // CHECK-NEXT: invoke void @_ZN5test01AC1Ev([[A]]* [[TMP]])
> > -    // CHECK:      invoke void @_ZN5test01VC1ERKNS_1AE([[V]]*
> > [[NEWCAST]], [[A]]* nonnull [[TMP]])
> > +    // CHECK:      invoke void @_ZN5test01VC1ERKNS_1AE([[V]]*
> > [[NEWCAST]], [[A]]* dereferenceable({{[0-9]+}}) [[TMP]])
> >      // CHECK:      store i1 false, i1* [[CLEANUPACTIVE]]
> >      // CHECK-NEXT: invoke void @_ZN5test01AD1Ev([[A]]* [[TMP]])
> >      A y;
> >
> > Modified:
> > cfe/trunk/test/CodeGenCXX/implicit-copy-assign-operator.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/implicit-copy-assign-operator.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/implicit-copy-assign-operator.cpp
> > (original)
> > +++ cfe/trunk/test/CodeGenCXX/implicit-copy-assign-operator.cpp Fri
> > Jul 18 10:52:10 2014
> > @@ -40,7 +40,7 @@ void test_D(D d1, D d2) {
> >    d1 = d2;
> >  }
> >  
> > -// CHECK-LABEL: define linkonce_odr nonnull %struct.D*
> > @_ZN1DaSERS_
> > +// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}})
> > %struct.D* @_ZN1DaSERS_
> >  // CHECK: {{call.*_ZN1AaSERS_}}
> >  // CHECK: {{call.*_ZN1BaSERS_}}
> >  // CHECK: {{call.*_ZN1CaSERKS_}}
> >
> > Modified: cfe/trunk/test/CodeGenCXX/implicit-copy-constructor.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/implicit-copy-constructor.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/implicit-copy-constructor.cpp
> > (original)
> > +++ cfe/trunk/test/CodeGenCXX/implicit-copy-constructor.cpp Fri Jul
> > 18 10:52:10 2014
> > @@ -40,7 +40,7 @@ void f(D d) {
> >    D d2(d);
> >  }
> >  
> > -// CHECK-LABEL: define linkonce_odr void @_ZN1DC1ERS_(%struct.D*
> > %this, %struct.D* nonnull) unnamed_addr
> > +// CHECK-LABEL: define linkonce_odr void @_ZN1DC1ERS_(%struct.D*
> > %this, %struct.D* dereferenceable({{[0-9]+}})) unnamed_addr
> >  // CHECK: call void @_ZN1AC1Ev
> >  // CHECK: call void @_ZN1CC2ERS_1A
> >  // CHECK: call void @_ZN1AD1Ev
> >
> > Modified: cfe/trunk/test/CodeGenCXX/mangle-lambdas.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mangle-lambdas.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/mangle-lambdas.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/mangle-lambdas.cpp Fri Jul 18
> > 10:52:10 2014
> > @@ -192,7 +192,7 @@ namespace PR12123 {
> >    };
> >    void B::h() { f(); }
> >  }
> > -// CHECK-LABEL: define linkonce_odr nonnull %"struct.PR12123::A"*
> > @_ZZN7PR121231B1fERKSt9type_infoEd_NKUlvE_clEv
> > +// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}})
> > %"struct.PR12123::A"*
> > @_ZZN7PR121231B1fERKSt9type_infoEd_NKUlvE_clEv
> >  
> >  namespace PR12808 {
> >    template <typename> struct B {
> >
> > Modified: cfe/trunk/test/CodeGenCXX/mangle.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mangle.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/mangle.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/mangle.cpp Fri Jul 18 10:52:10 2014
> > @@ -280,13 +280,13 @@ struct Ops {
> >    void *v;
> >  };
> >  
> > -// CHECK-LABEL: define nonnull %struct.Ops* @_ZN3OpsplERKS_
> > +// CHECK-LABEL: define dereferenceable({{[0-9]+}}) %struct.Ops*
> > @_ZN3OpsplERKS_
> >  Ops& Ops::operator+(const Ops&) { return *this; }
> > -// CHECK-LABEL: define nonnull %struct.Ops* @_ZN3OpsmiERKS_
> > +// CHECK-LABEL: define dereferenceable({{[0-9]+}}) %struct.Ops*
> > @_ZN3OpsmiERKS_
> >  Ops& Ops::operator-(const Ops&) { return *this; }
> > -// CHECK-LABEL: define nonnull %struct.Ops* @_ZN3OpsanERKS_
> > +// CHECK-LABEL: define dereferenceable({{[0-9]+}}) %struct.Ops*
> > @_ZN3OpsanERKS_
> >  Ops& Ops::operator&(const Ops&) { return *this; }
> > -// CHECK-LABEL: define nonnull %struct.Ops* @_ZN3OpsmlERKS_
> > +// CHECK-LABEL: define dereferenceable({{[0-9]+}}) %struct.Ops*
> > @_ZN3OpsmlERKS_
> >  Ops& Ops::operator*(const Ops&) { return *this; }
> >  
> >  // PR5861
> >
> > Modified:
> > cfe/trunk/test/CodeGenCXX/microsoft-abi-sret-and-byval.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/microsoft-abi-sret-and-byval.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/microsoft-abi-sret-and-byval.cpp
> > (original)
> > +++ cfe/trunk/test/CodeGenCXX/microsoft-abi-sret-and-byval.cpp Fri
> > Jul 18 10:52:10 2014
> > @@ -137,10 +137,10 @@ void call_small_arg_with_dtor() {
> >  
> >  // Test that references aren't destroyed in the callee.
> >  void ref_small_arg_with_dtor(const SmallWithDtor &s) { }
> > -// WIN32: define void
> > @"\01?ref_small_arg_with_dtor@@YAXABUSmallWithDtor@@@Z"(%struct.SmallWithDtor*
> > nonnull %s) {{.*}} {
> > +// WIN32: define void
> > @"\01?ref_small_arg_with_dtor@@YAXABUSmallWithDtor@@@Z"(%struct.SmallWithDtor*
> > dereferenceable({{[0-9]+}}) %s) {{.*}} {
> >  // WIN32-NOT:   call x86_thiscallcc void
> >  @"\01??1SmallWithDtor@@QAE at XZ"
> >  // WIN32: }
> > -// WIN64-LABEL: define void
> > @"\01?ref_small_arg_with_dtor@@YAXAEBUSmallWithDtor@@@Z"(%struct.SmallWithDtor*
> > nonnull %s)
> > +// WIN64-LABEL: define void
> > @"\01?ref_small_arg_with_dtor@@YAXAEBUSmallWithDtor@@@Z"(%struct.SmallWithDtor*
> > dereferenceable({{[0-9]+}}) %s)
> >  
> >  void big_arg_with_dtor(BigWithDtor s) {}
> >  // WIN64-LABEL: define void
> >  @"\01?big_arg_with_dtor@@YAXUBigWithDtor@@@Z"(%struct.BigWithDtor*
> >  %s)
> >
> > Modified:
> > cfe/trunk/test/CodeGenCXX/microsoft-abi-static-initializers.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/microsoft-abi-static-initializers.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/microsoft-abi-static-initializers.cpp
> > (original)
> > +++ cfe/trunk/test/CodeGenCXX/microsoft-abi-static-initializers.cpp
> > Fri Jul 18 10:52:10 2014
> > @@ -119,7 +119,7 @@ inline S &UnreachableStatic() {
> >    return s;
> >  }
> >  
> > -// CHECK-LABEL: define linkonce_odr nonnull %struct.S*
> > @"\01?UnreachableStatic@@YAAAUS@@XZ"()
> > +// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}})
> > %struct.S* @"\01?UnreachableStatic@@YAAAUS@@XZ"()
> >  // CHECK: and i32 {{.*}}, 2
> >  // CHECK: or i32 {{.*}}, 2
> >  // CHECK: ret
> > @@ -129,7 +129,7 @@ inline S &getS() {
> >    return TheS;
> >  }
> >  
> > -// CHECK-LABEL: define linkonce_odr nonnull %struct.S*
> > @"\01?getS@@YAAAUS@@XZ"
> > +// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}})
> > %struct.S* @"\01?getS@@YAAAUS@@XZ"
> >  // CHECK: load i32* @"\01??_B?1??getS@@YAAAUS@@XZ at 51"
> >  // CHECK: and i32 {{.*}}, 1
> >  // CHECK: icmp ne i32 {{.*}}, 0
> >
> > Modified: cfe/trunk/test/CodeGenCXX/nrvo.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/nrvo.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/nrvo.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/nrvo.cpp Fri Jul 18 10:52:10 2014
> > @@ -169,7 +169,7 @@ X test6() {
> >    return a;
> >    // CHECK:      [[A:%.*]] = alloca [[X:%.*]], align 8
> >    // CHECK-NEXT: call {{.*}} @_ZN1XC1Ev([[X]]* [[A]])
> > -  // CHECK-NEXT: call {{.*}} @_ZN1XC1ERKS_([[X]]* {{%.*}}, [[X]]*
> > nonnull [[A]])
> > +  // CHECK-NEXT: call {{.*}} @_ZN1XC1ERKS_([[X]]* {{%.*}}, [[X]]*
> > dereferenceable({{[0-9]+}}) [[A]])
> >    // CHECK-NEXT: call {{.*}} @_ZN1XD1Ev([[X]]* [[A]])
> >    // CHECK-NEXT: ret void
> >  }
> >
> > Modified: cfe/trunk/test/CodeGenCXX/pod-member-memcpys.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/pod-member-memcpys.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/pod-member-memcpys.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/pod-member-memcpys.cpp Fri Jul 18
> > 10:52:10 2014
> > @@ -108,59 +108,59 @@ CALL_AO(InnerClassMember)
> >  CALL_AO(PackedMembers)
> >  
> >  // Basic copy-assignment:
> > -// CHECK-LABEL: define linkonce_odr nonnull %struct.Basic*
> > @_ZN5BasicaSERKS_(%struct.Basic* %this, %struct.Basic* nonnull)
> > +// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}})
> > %struct.Basic* @_ZN5BasicaSERKS_(%struct.Basic* %this,
> > %struct.Basic* dereferenceable({{[0-9]+}}))
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32
> >  4{{.*}})
> > -// CHECK: call nonnull %struct.NonPOD* @_ZN6NonPODaSERKS_
> > +// CHECK: call dereferenceable({{[0-9]+}}) %struct.NonPOD*
> > @_ZN6NonPODaSERKS_
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32
> >  4{{.*}})
> >  // CHECK: ret %struct.Basic*
> >  
> >  // PODMember copy-assignment:
> > -// CHECK-LABEL: define linkonce_odr nonnull %struct.PODMember*
> > @_ZN9PODMemberaSERKS_(%struct.PODMember* %this, %struct.PODMember*
> > nonnull)
> > +// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}})
> > %struct.PODMember* @_ZN9PODMemberaSERKS_(%struct.PODMember* %this,
> > %struct.PODMember* dereferenceable({{[0-9]+}}))
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 32, i32
> >  4{{.*}})
> > -// CHECK: call nonnull %struct.NonPOD* @_ZN6NonPODaSERKS_
> > +// CHECK: call dereferenceable({{[0-9]+}}) %struct.NonPOD*
> > @_ZN6NonPODaSERKS_
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32
> >  4{{.*}})
> >  // CHECK: ret %struct.PODMember*
> >  
> >  // PODLikeMember copy-assignment:
> > -// CHECK-LABEL: define linkonce_odr nonnull %struct.PODLikeMember*
> > @_ZN13PODLikeMemberaSERKS_(%struct.PODLikeMember* %this,
> > %struct.PODLikeMember* nonnull)
> > +// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}})
> > %struct.PODLikeMember*
> > @_ZN13PODLikeMemberaSERKS_(%struct.PODLikeMember* %this,
> > %struct.PODLikeMember* dereferenceable({{[0-9]+}}))
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 32, i32
> >  4{{.*}})
> > -// CHECK: call nonnull %struct.NonPOD* @_ZN6NonPODaSERKS_
> > +// CHECK: call dereferenceable({{[0-9]+}}) %struct.NonPOD*
> > @_ZN6NonPODaSERKS_
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32
> >  4{{.*}})
> >  // CHECK: ret %struct.PODLikeMember*
> >  
> >  // ArrayMember copy-assignment:
> > -// CHECK-LABEL: define linkonce_odr nonnull %struct.ArrayMember*
> > @_ZN11ArrayMemberaSERKS_(%struct.ArrayMember* %this,
> > %struct.ArrayMember* nonnull)
> > +// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}})
> > %struct.ArrayMember* @_ZN11ArrayMemberaSERKS_(%struct.ArrayMember*
> > %this, %struct.ArrayMember* dereferenceable({{[0-9]+}}))
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 64, i32
> >  4{{.*}})
> > -// CHECK: call nonnull %struct.NonPOD* @_ZN6NonPODaSERKS_
> > +// CHECK: call dereferenceable({{[0-9]+}}) %struct.NonPOD*
> > @_ZN6NonPODaSERKS_
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 64, i32
> >  4{{.*}})
> >  // CHECK: ret %struct.ArrayMember*
> >  
> >  // VolatileMember copy-assignment:
> > -// CHECK-LABEL: define linkonce_odr nonnull
> > %struct.VolatileMember*
> > @_ZN14VolatileMemberaSERKS_(%struct.VolatileMember* %this,
> > %struct.VolatileMember* nonnull)
> > +// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}})
> > %struct.VolatileMember*
> > @_ZN14VolatileMemberaSERKS_(%struct.VolatileMember* %this,
> > %struct.VolatileMember* dereferenceable({{[0-9]+}}))
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32
> >  4{{.*}})
> >  // CHECK: load volatile i32* {{.*}}, align 4
> >  // CHECK: store volatile i32 {{.*}}, align 4
> > -// CHECK: call nonnull %struct.NonPOD* @_ZN6NonPODaSERKS_
> > +// CHECK: call dereferenceable({{[0-9]+}}) %struct.NonPOD*
> > @_ZN6NonPODaSERKS_
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32
> >  4{{.*}})
> >  // CHECK: ret %struct.VolatileMember*
> >  
> >  // BitfieldMember copy-assignment:
> > -// CHECK-LABEL: define linkonce_odr nonnull
> > %struct.BitfieldMember*
> > @_ZN14BitfieldMemberaSERKS_(%struct.BitfieldMember* %this,
> > %struct.BitfieldMember* nonnull)
> > +// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}})
> > %struct.BitfieldMember*
> > @_ZN14BitfieldMemberaSERKS_(%struct.BitfieldMember* %this,
> > %struct.BitfieldMember* dereferenceable({{[0-9]+}}))
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32
> >  4{{.*}})
> > -// CHECK: call nonnull %struct.NonPOD* @_ZN6NonPODaSERKS_
> > +// CHECK: call dereferenceable({{[0-9]+}}) %struct.NonPOD*
> > @_ZN6NonPODaSERKS_
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 3, i32
> >  1{{.*}})
> >  // CHECK: ret %struct.BitfieldMember*
> >  
> >  // InnerClass copy-assignment:
> > -// CHECK-LABEL: define linkonce_odr nonnull
> > %struct.InnerClassMember*
> > @_ZN16InnerClassMemberaSERKS_(%struct.InnerClassMember* %this,
> > %struct.InnerClassMember* nonnull)
> > +// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}})
> > %struct.InnerClassMember*
> > @_ZN16InnerClassMemberaSERKS_(%struct.InnerClassMember* %this,
> > %struct.InnerClassMember* dereferenceable({{[0-9]+}}))
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 32, i32
> >  4{{.*}})
> > -// CHECK: call nonnull %struct.NonPOD* @_ZN6NonPODaSERKS_
> > +// CHECK: call dereferenceable({{[0-9]+}}) %struct.NonPOD*
> > @_ZN6NonPODaSERKS_
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32
> >  4{{.*}})
> >  // CHECK: ret %struct.InnerClassMember*
> >  
> >  // PackedMembers copy-assignment:
> > -// CHECK-LABEL: define linkonce_odr nonnull %struct.PackedMembers*
> > @_ZN13PackedMembersaSERKS_(%struct.PackedMembers* %this,
> > %struct.PackedMembers* nonnull)
> > -// CHECK: call nonnull %struct.NonPOD* @_ZN6NonPODaSERKS_
> > +// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}})
> > %struct.PackedMembers*
> > @_ZN13PackedMembersaSERKS_(%struct.PackedMembers* %this,
> > %struct.PackedMembers* dereferenceable({{[0-9]+}}))
> > +// CHECK: call dereferenceable({{[0-9]+}}) %struct.NonPOD*
> > @_ZN6NonPODaSERKS_
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32
> >  1{{.*}})
> >  // CHECK: ret %struct.PackedMembers*
> >  
> > @@ -184,21 +184,21 @@ CALL_CC(PODMember)
> >  CALL_CC(Basic)
> >  
> >  // Basic copy-constructor:
> > -// CHECK-LABEL: define linkonce_odr void
> > @_ZN5BasicC2ERKS_(%struct.Basic* %this, %struct.Basic* nonnull)
> > +// CHECK-LABEL: define linkonce_odr void
> > @_ZN5BasicC2ERKS_(%struct.Basic* %this, %struct.Basic*
> > dereferenceable({{[0-9]+}}))
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32
> >  4{{.*}})
> >  // CHECK: call void @_ZN6NonPODC1ERKS_
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32
> >  4{{.*}})
> >  // CHECK: ret void
> >  
> >  // PODMember copy-constructor:
> > -// CHECK-LABEL: define linkonce_odr void
> > @_ZN9PODMemberC2ERKS_(%struct.PODMember* %this, %struct.PODMember*
> > nonnull)
> > +// CHECK-LABEL: define linkonce_odr void
> > @_ZN9PODMemberC2ERKS_(%struct.PODMember* %this, %struct.PODMember*
> > dereferenceable({{[0-9]+}}))
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 32, i32
> >  4{{.*}})
> >  // CHECK: call void @_ZN6NonPODC1ERKS_
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32
> >  4{{.*}})
> >  // CHECK: ret void
> >  
> >  // PODLikeMember copy-constructor:
> > -// CHECK-LABEL: define linkonce_odr void
> > @_ZN13PODLikeMemberC2ERKS_(%struct.PODLikeMember* %this,
> > %struct.PODLikeMember* nonnull)
> > +// CHECK-LABEL: define linkonce_odr void
> > @_ZN13PODLikeMemberC2ERKS_(%struct.PODLikeMember* %this,
> > %struct.PODLikeMember* dereferenceable({{[0-9]+}}))
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 32, i32
> >  4{{.*}})
> >  // CHECK: invoke void @_ZN6NonPODC1ERKS_
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32
> >  4{{.*}})
> > @@ -207,14 +207,14 @@ CALL_CC(Basic)
> >  // CHECK: invoke void @_ZN7PODLikeD1Ev
> >  
> >  // ArrayMember copy-constructor:
> > -// CHECK-LABEL: define linkonce_odr void
> > @_ZN11ArrayMemberC2ERKS_(%struct.ArrayMember* %this,
> > %struct.ArrayMember* nonnull)
> > +// CHECK-LABEL: define linkonce_odr void
> > @_ZN11ArrayMemberC2ERKS_(%struct.ArrayMember* %this,
> > %struct.ArrayMember* dereferenceable({{[0-9]+}}))
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 64, i32
> >  4{{.*}})
> >  // CHECK: call void @_ZN6NonPODC1ERKS_
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 64, i32
> >  4{{.*}})
> >  // CHECK: ret void
> >  
> >  // VolatileMember copy-constructor:
> > -// CHECK-LABEL: define linkonce_odr void
> > @_ZN14VolatileMemberC2ERKS_(%struct.VolatileMember* %this,
> > %struct.VolatileMember* nonnull)
> > +// CHECK-LABEL: define linkonce_odr void
> > @_ZN14VolatileMemberC2ERKS_(%struct.VolatileMember* %this,
> > %struct.VolatileMember* dereferenceable({{[0-9]+}}))
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32
> >  4{{.*}})
> >  // CHECK: load volatile i32* {{.*}}, align 4
> >  // CHECK: store volatile i32 {{.*}}, align 4
> > @@ -223,34 +223,34 @@ CALL_CC(Basic)
> >  // CHECK: ret void
> >  
> >  // BitfieldMember copy-constructor:
> > -// CHECK-LABEL: define linkonce_odr void
> > @_ZN14BitfieldMemberC2ERKS_(%struct.BitfieldMember* %this,
> > %struct.BitfieldMember* nonnull)
> > +// CHECK-LABEL: define linkonce_odr void
> > @_ZN14BitfieldMemberC2ERKS_(%struct.BitfieldMember* %this,
> > %struct.BitfieldMember* dereferenceable({{[0-9]+}}))
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32
> >  4{{.*}})
> >  // CHECK: call void @_ZN6NonPODC1ERKS_
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 3, i32
> >  1{{.*}})
> >  // CHECK: ret void
> >  
> >  // InnerClass copy-constructor:
> > -// CHECK-LABEL: define linkonce_odr void
> > @_ZN16InnerClassMemberC2ERKS_(%struct.InnerClassMember* %this,
> > %struct.InnerClassMember* nonnull)
> > +// CHECK-LABEL: define linkonce_odr void
> > @_ZN16InnerClassMemberC2ERKS_(%struct.InnerClassMember* %this,
> > %struct.InnerClassMember* dereferenceable({{[0-9]+}}))
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 32, i32
> >  4{{.*}})
> >  // CHECK: call void @_ZN6NonPODC1ERKS_
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32
> >  4{{.*}})
> >  // CHECK: ret void
> >  
> >  // ReferenceMember copy-constructor:
> > -// CHECK-LABEL: define linkonce_odr void
> > @_ZN15ReferenceMemberC2ERKS_(%struct.ReferenceMember* %this,
> > %struct.ReferenceMember* nonnull)
> > +// CHECK-LABEL: define linkonce_odr void
> > @_ZN15ReferenceMemberC2ERKS_(%struct.ReferenceMember* %this,
> > %struct.ReferenceMember* dereferenceable({{[0-9]+}}))
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32
> >  8{{.*}})
> >  // CHECK: call void @_ZN6NonPODC1ERKS_
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32
> >  8{{.*}})
> >  // CHECK: ret void
> >  
> >  // BitfieldMember2 copy-constructor:
> > -// CHECK-2-LABEL: define linkonce_odr void
> > @_ZN15BitfieldMember2C2ERKS_(%struct.BitfieldMember2* %this,
> > %struct.BitfieldMember2* nonnull)
> > +// CHECK-2-LABEL: define linkonce_odr void
> > @_ZN15BitfieldMember2C2ERKS_(%struct.BitfieldMember2* %this,
> > %struct.BitfieldMember2* dereferenceable({{[0-9]+}}))
> >  // CHECK-2: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32
> >  4, i1 false)
> >  // CHECK-2: call void @_ZN6NonPODC1ERKS_
> >  // CHECK-2: ret void
> >  
> >  // PackedMembers copy-assignment:
> > -// CHECK-LABEL: define linkonce_odr void
> > @_ZN13PackedMembersC2ERKS_(%struct.PackedMembers* %this,
> > %struct.PackedMembers* nonnull)
> > +// CHECK-LABEL: define linkonce_odr void
> > @_ZN13PackedMembersC2ERKS_(%struct.PackedMembers* %this,
> > %struct.PackedMembers* dereferenceable({{[0-9]+}}))
> >  // CHECK: call void @_ZN6NonPODC1ERKS_
> >  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32
> >  1{{.*}})
> >  // CHECK: ret void
> >
> > Modified: cfe/trunk/test/CodeGenCXX/pointers-to-data-members.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/pointers-to-data-members.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/pointers-to-data-members.cpp
> > (original)
> > +++ cfe/trunk/test/CodeGenCXX/pointers-to-data-members.cpp Fri Jul
> > 18 10:52:10 2014
> > @@ -202,7 +202,7 @@ namespace BoolPtrToMember {
> >      bool member;
> >    };
> >  
> > -  // CHECK-LABEL: define nonnull i8*
> > @_ZN15BoolPtrToMember1fERNS_1XEMS0_b
> > +  // CHECK-LABEL: define dereferenceable({{[0-9]+}}) i8*
> > @_ZN15BoolPtrToMember1fERNS_1XEMS0_b
> >    bool &f(X &x, bool X::*member) {
> >      // CHECK: {{bitcast.* to i8\*}}
> >      // CHECK-NEXT: getelementptr inbounds i8*
> >
> > Modified: cfe/trunk/test/CodeGenCXX/reference-cast.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/reference-cast.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/reference-cast.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/reference-cast.cpp Fri Jul 18
> > 10:52:10 2014
> > @@ -3,7 +3,7 @@
> >  // PR6024
> >  extern int i;
> >  
> > -// CHECK: define nonnull i32* @_Z16lvalue_noop_castv()
> > [[NUW:#[0-9]+]]
> > +// CHECK: define dereferenceable({{[0-9]+}}) i32*
> > @_Z16lvalue_noop_castv() [[NUW:#[0-9]+]]
> >  const int &lvalue_noop_cast() {
> >    if (i == 0)
> >      // CHECK: store i32 17, i32*
> > @@ -15,7 +15,7 @@ const int &lvalue_noop_cast() {
> >    return 17;
> >  }
> >  
> > -// CHECK-LABEL: define nonnull i16* @_Z20lvalue_integral_castv()
> > +// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i16*
> > @_Z20lvalue_integral_castv()
> >  const short &lvalue_integral_cast() {
> >    if (i == 0)
> >      // CHECK: store i16 17, i16*
> > @@ -27,7 +27,7 @@ const short &lvalue_integral_cast() {
> >    return 17;
> >  }
> >  
> > -// CHECK-LABEL: define nonnull i16*
> > @_Z29lvalue_floating_integral_castv()
> > +// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i16*
> > @_Z29lvalue_floating_integral_castv()
> >  const short &lvalue_floating_integral_cast() {
> >    if (i == 0)
> >      // CHECK: store i16 17, i16*
> > @@ -39,7 +39,7 @@ const short &lvalue_floating_integral_ca
> >    return 17.5;
> >  }
> >  
> > -// CHECK-LABEL: define nonnull float*
> > @_Z29lvalue_integral_floating_castv()
> > +// CHECK-LABEL: define dereferenceable({{[0-9]+}}) float*
> > @_Z29lvalue_integral_floating_castv()
> >  const float &lvalue_integral_floating_cast() {
> >    if (i == 0)
> >      // CHECK: store float 1.700000e+{{0*}}1, float*
> > @@ -51,7 +51,7 @@ const float &lvalue_integral_floating_ca
> >    return 17;
> >  }
> >  
> > -// CHECK-LABEL: define nonnull float* @_Z20lvalue_floating_castv()
> > +// CHECK-LABEL: define dereferenceable({{[0-9]+}}) float*
> > @_Z20lvalue_floating_castv()
> >  const float &lvalue_floating_cast() {
> >    if (i == 0)
> >      // CHECK: store float 1.700000e+{{0*}}1, float*
> > @@ -65,7 +65,7 @@ const float &lvalue_floating_cast() {
> >  
> >  int get_int();
> >  
> > -// CHECK-LABEL: define nonnull i8*
> > @_Z24lvalue_integer_bool_castv()
> > +// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i8*
> > @_Z24lvalue_integer_bool_castv()
> >  const bool &lvalue_integer_bool_cast() {
> >    if (i == 0)
> >      // CHECK: call i32 @_Z7get_intv()
> > @@ -82,7 +82,7 @@ const bool &lvalue_integer_bool_cast() {
> >  
> >  float get_float();
> >  
> > -// CHECK-LABEL: define nonnull i8*
> > @_Z25lvalue_floating_bool_castv()
> > +// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i8*
> > @_Z25lvalue_floating_bool_castv()
> >  const bool &lvalue_floating_bool_cast() {
> >    if (i == 0)
> >      // CHECK: call float @_Z9get_floatv()
> > @@ -107,7 +107,7 @@ typedef int (X::*pmf)(int);
> >  pm get_pointer_to_member_data();
> >  pmf get_pointer_to_member_function();
> >  
> > -// CHECK-LABEL: define nonnull i8*
> > @_Z26lvalue_ptrmem_to_bool_castv()
> > +// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i8*
> > @_Z26lvalue_ptrmem_to_bool_castv()
> >  const bool &lvalue_ptrmem_to_bool_cast() {
> >    if (i == 0)
> >      // CHECK: call i64 @_Z26get_pointer_to_member_datav()
> > @@ -125,7 +125,7 @@ const bool &lvalue_ptrmem_to_bool_cast()
> >    return get_pointer_to_member_data();
> >  }
> >  
> > -// CHECK-LABEL: define nonnull i8*
> > @_Z27lvalue_ptrmem_to_bool_cast2v
> > +// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i8*
> > @_Z27lvalue_ptrmem_to_bool_cast2v
> >  const bool &lvalue_ptrmem_to_bool_cast2() {
> >    if (i == 0)
> >      // CHECK: {{call.*_Z30get_pointer_to_member_functionv}}
> >
> > Modified: cfe/trunk/test/CodeGenCXX/rvalue-references.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/rvalue-references.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/rvalue-references.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/rvalue-references.cpp Fri Jul 18
> > 10:52:10 2014
> > @@ -7,8 +7,8 @@ struct B : Spacer, A { };
> >  
> >  B &getB();
> >  
> > -// CHECK-LABEL: define nonnull %struct.A* @_Z4getAv()
> > -// CHECK: call nonnull %struct.B* @_Z4getBv()
> > +// CHECK-LABEL: define dereferenceable({{[0-9]+}}) %struct.A*
> > @_Z4getAv()
> > +// CHECK: call dereferenceable({{[0-9]+}}) %struct.B* @_Z4getBv()
> >  // CHECK-NEXT: bitcast %struct.B*
> >  // CHECK-NEXT: getelementptr inbounds i8*
> >  // CHECK-NEXT: bitcast i8* {{.*}} to %struct.A*
> > @@ -19,17 +19,17 @@ int &getIntLValue();
> >  int &&getIntXValue();
> >  int getIntPRValue();
> >  
> > -// CHECK-LABEL: define nonnull i32* @_Z2f0v()
> > -// CHECK: call nonnull i32* @_Z12getIntLValuev()
> > +// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i32* @_Z2f0v()
> > +// CHECK: call dereferenceable({{[0-9]+}}) i32*
> > @_Z12getIntLValuev()
> >  // CHECK-NEXT: ret i32*
> >  int &&f0() { return static_cast<int&&>(getIntLValue()); }
> >  
> > -// CHECK-LABEL: define nonnull i32* @_Z2f1v()
> > -// CHECK: call nonnull i32* @_Z12getIntXValuev()
> > +// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i32* @_Z2f1v()
> > +// CHECK: call dereferenceable({{[0-9]+}}) i32*
> > @_Z12getIntXValuev()
> >  // CHECK-NEXT: ret i32*
> >  int &&f1() { return static_cast<int&&>(getIntXValue()); }
> >  
> > -// CHECK-LABEL: define nonnull i32* @_Z2f2v
> > +// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i32* @_Z2f2v
> >  // CHECK: call i32 @_Z13getIntPRValuev()
> >  // CHECK-NEXT: store i32 {{.*}}, i32*
> >  // CHECK-NEXT: ret i32*
> > @@ -95,7 +95,7 @@ namespace test1 {
> >    };
> >  
> >    // CHECK-LABEL:    define void @_ZN5test11BC2Ei(
> > -  // CHECK:      [[T0:%.*]] = call nonnull i32*
> > @_ZN5test14moveERi(
> > +  // CHECK:      [[T0:%.*]] = call dereferenceable({{[0-9]+}})
> > i32* @_ZN5test14moveERi(
> >    // CHECK-NEXT: [[T1:%.*]] = load i32* [[T0]]
> >    // CHECK-NEXT: call void @_ZN5test11AC1Ei({{.*}}, i32 [[T1]])
> >    // CHECK-NEXT: ret void
> >
> > Modified: cfe/trunk/test/CodeGenCXX/temporaries.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/temporaries.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/temporaries.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/temporaries.cpp Fri Jul 18 10:52:10
> > 2014
> > @@ -325,7 +325,7 @@ int& f(int);
> >  void g() {
> >    // CHECK: call void @_ZN3T121AC1Ev
> >    // CHECK-NEXT: call i32 @_ZN3T121A1fEv(
> > -  // CHECK-NEXT: call nonnull i32* @_ZN3T121fEi(
> > +  // CHECK-NEXT: call dereferenceable({{[0-9]+}}) i32*
> > @_ZN3T121fEi(
> >    // CHECK-NEXT: call void @_ZN3T121AD1Ev(
> >    int& i = f(A().f());
> >  }
> > @@ -427,10 +427,10 @@ namespace Elision {
> >      // CHECK-NEXT: [[J:%.*]] = alloca [[A]], align 8
> >  
> >      // CHECK:      call void @_ZN7Elision1AC1Ev([[A]]* [[I]])
> > -    // CHECK:      call void @_ZN7Elision1AC1ERKS0_([[A]]* [[I]],
> > [[A]]* nonnull [[X:%.*]])
> > +    // CHECK:      call void @_ZN7Elision1AC1ERKS0_([[A]]* [[I]],
> > [[A]]* dereferenceable({{[0-9]+}}) [[X:%.*]])
> >      A i = (c ? A() : x);
> >  
> > -    // CHECK:      call void @_ZN7Elision1AC1ERKS0_([[A]]* [[J]],
> > [[A]]* nonnull [[X]])
> > +    // CHECK:      call void @_ZN7Elision1AC1ERKS0_([[A]]* [[J]],
> > [[A]]* dereferenceable({{[0-9]+}}) [[X]])
> >      // CHECK:      call void @_ZN7Elision1AC1Ev([[A]]* [[J]])
> >      A j = (c ? x : A());
> >  
> > @@ -450,10 +450,10 @@ namespace Elision {
> >    A test3(int v, A x) {
> >      if (v < 5)
> >      // CHECK:      call void @_ZN7Elision1AC1Ev([[A]]*
> >      [[RET:%.*]])
> > -    // CHECK:      call void @_ZN7Elision1AC1ERKS0_([[A]]*
> > [[RET]], [[A]]* nonnull [[X:%.*]])
> > +    // CHECK:      call void @_ZN7Elision1AC1ERKS0_([[A]]*
> > [[RET]], [[A]]* dereferenceable({{[0-9]+}}) [[X:%.*]])
> >        return (v < 0 ? A() : x);
> >      else
> > -    // CHECK:      call void @_ZN7Elision1AC1ERKS0_([[A]]*
> > [[RET]], [[A]]* nonnull [[X]])
> > +    // CHECK:      call void @_ZN7Elision1AC1ERKS0_([[A]]*
> > [[RET]], [[A]]* dereferenceable({{[0-9]+}}) [[X]])
> >      // CHECK:      call void @_ZN7Elision1AC1Ev([[A]]* [[RET]])
> >        return (v > 10 ? x : A());
> >  
> > @@ -471,7 +471,7 @@ namespace Elision {
> >      // CHECK-NEXT: [[XS0:%.*]] = getelementptr inbounds [2 x
> >      [[A]]]* [[XS]], i64 0, i64 0
> >      // CHECK-NEXT: call void @_ZN7Elision1AC1Ev([[A]]* [[XS0]])
> >      // CHECK-NEXT: [[XS1:%.*]] = getelementptr inbounds [[A]]*
> >      [[XS0]], i64 1
> > -    // CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]*
> > [[XS1]], [[A]]* nonnull [[X]])
> > +    // CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]*
> > [[XS1]], [[A]]* dereferenceable({{[0-9]+}}) [[X]])
> >      A xs[] = { A(), x };
> >  
> >      // CHECK-NEXT: [[BEGIN:%.*]] = getelementptr inbounds [2 x
> >      [[A]]]* [[XS]], i32 0, i32 0
> > @@ -498,7 +498,7 @@ namespace Elision {
> >  
> >      // CHECK:      call void @_ZN7Elision1BC1Ev([[B]]* [[BT0]])
> >      // CHECK-NEXT: [[AM:%.*]] = getelementptr inbounds [[B]]*
> >      [[BT0]], i32 0, i32 0
> > -    // CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]*
> > [[AT0]], [[A]]* nonnull [[AM]])
> > +    // CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]*
> > [[AT0]], [[A]]* dereferenceable({{[0-9]+}}) [[AM]])
> >      // CHECK-NEXT: call void @_ZN7Elision5takeAENS_1AE([[A]]*
> >      [[AT0]])
> >      // CHECK-NEXT: call void @_ZN7Elision1AD1Ev([[A]]* [[AT0]])
> >      // CHECK-NEXT: call void @_ZN7Elision1BD1Ev([[B]]* [[BT0]])
> > @@ -506,13 +506,13 @@ namespace Elision {
> >  
> >      // CHECK-NEXT: call void @_ZN7Elision1BC1Ev([[B]]* [[BT1]])
> >      // CHECK-NEXT: [[AM:%.*]] = getelementptr inbounds [[B]]*
> >      [[BT1]], i32 0, i32 0
> > -    // CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[X]],
> > [[A]]* nonnull [[AM]])
> > +    // CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[X]],
> > [[A]]* dereferenceable({{[0-9]+}}) [[AM]])
> >      // CHECK-NEXT: call void @_ZN7Elision1BD1Ev([[B]]* [[BT1]])
> >      A x = B().a;
> >  
> >      // CHECK-NEXT: call void @_ZN7Elision1BC1Ev([[B]]* [[BT2]])
> >      // CHECK-NEXT: [[AM:%.*]] = getelementptr inbounds [[B]]*
> >      [[BT2]], i32 0, i32 0
> > -    // CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]*
> > [[RET:%.*]], [[A]]* nonnull [[AM]])
> > +    // CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]*
> > [[RET:%.*]], [[A]]* dereferenceable({{[0-9]+}}) [[AM]])
> >      // CHECK-NEXT: call void @_ZN7Elision1BD1Ev([[B]]* [[BT2]])
> >      return B().a;
> >  
> >
> > Modified: cfe/trunk/test/CodeGenCXX/throw-expressions.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/throw-expressions.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/throw-expressions.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/throw-expressions.cpp Fri Jul 18
> > 10:52:10 2014
> > @@ -97,7 +97,7 @@ void test7(bool cond) {
> >    cond ? throw test7 : val;
> >  }
> >  
> > -// CHECK-LABEL: define nonnull i32* @_Z5test8b(
> > +// CHECK-LABEL: define dereferenceable(4) i32* @_Z5test8b(
> >  int &test8(bool cond) {
> >    // CHECK: br i1
> >    //
> >
> > Modified: cfe/trunk/test/CodeGenCXX/volatile.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/volatile.cpp?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenCXX/volatile.cpp (original)
> > +++ cfe/trunk/test/CodeGenCXX/volatile.cpp Fri Jul 18 10:52:10 2014
> > @@ -15,7 +15,7 @@ namespace test0 {
> >    void test(A t) {
> >      // CHECK:      [[ARR:%.*]] = load [[A:%.*]]**
> >      @_ZN5test05arrayE, align 8
> >      // CHECK-NEXT: [[IDX:%.*]] = getelementptr inbounds [[A]]*
> >      [[ARR]], i64 0
> > -    // CHECK-NEXT: [[TMP:%.*]] = call nonnull [[A]]*
> > @_ZNV5test01AaSERVKS0_([[A]]* [[IDX]], [[A]]* nonnull [[T:%.*]])
> > +    // CHECK-NEXT: [[TMP:%.*]] = call dereferenceable({{[0-9]+}})
> > [[A]]* @_ZNV5test01AaSERVKS0_([[A]]* [[IDX]], [[A]]*
> > dereferenceable({{[0-9]+}}) [[T:%.*]])
> >      // CHECK-NEXT: ret void
> >      array[0] = t;
> >    }
> >
> > Modified: cfe/trunk/test/CodeGenObjC/return-objc-object.mm
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/return-objc-object.mm?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenObjC/return-objc-object.mm (original)
> > +++ cfe/trunk/test/CodeGenObjC/return-objc-object.mm Fri Jul 18
> > 10:52:10 2014
> > @@ -15,5 +15,5 @@ void call_once() {
> >    f();
> >    f1();
> >  }
> > -// CHECK: call nonnull %0* @_Z1fv()
> > -// CHECK: call nonnull %0* @_Z2f1v()
> > +// CHECK: call dereferenceable({{[0-9]+}}) %0* @_Z1fv()
> > +// CHECK: call dereferenceable({{[0-9]+}}) %0* @_Z2f1v()
> >
> > Modified: cfe/trunk/test/CodeGenObjCXX/arc-blocks.mm
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/arc-blocks.mm?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenObjCXX/arc-blocks.mm (original)
> > +++ cfe/trunk/test/CodeGenObjCXX/arc-blocks.mm Fri Jul 18 10:52:10
> > 2014
> > @@ -38,7 +38,7 @@ namespace test0 {
> >    // CHECK-NEXT: load
> >    // CHECK-NEXT: [[T2:%.*]] = bitcast i8* {{.*}} to [[BYREF_A]]*
> >    // CHECK-NEXT: [[T3:%.*]] = getelementptr inbounds [[BYREF_A]]*
> >    [[T2]], i32 0, i32 7
> > -  // CHECK-NEXT: call void @_ZN5test01AC1ERKS0_([[A]]* [[T1]],
> > [[A]]* nonnull [[T3]])
> > +  // CHECK-NEXT: call void @_ZN5test01AC1ERKS0_([[A]]* [[T1]],
> > [[A]]* dereferenceable({{[0-9]+}}) [[T3]])
> >    // CHECK-NEXT: ret void
> >  
> >    // CHECK:    define internal void [[DISPOSE_HELPER]](
> >
> > Modified: cfe/trunk/test/CodeGenObjCXX/arc-move.mm
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/arc-move.mm?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenObjCXX/arc-move.mm (original)
> > +++ cfe/trunk/test/CodeGenObjCXX/arc-move.mm Fri Jul 18 10:52:10
> > 2014
> > @@ -33,7 +33,7 @@ typename remove_reference<T>::type&& mov
> >  
> >  // CHECK-LABEL: define void
> >  @_Z12library_moveRU8__strongP11objc_objectS2_
> >  void library_move(__strong id &x, __strong id &y) {
> > -  // CHECK: call nonnull i8**
> > @_Z4moveIRU8__strongP11objc_objectEON16remove_referenceIT_E4typeEOS5_
> > +  // CHECK: call dereferenceable({{[0-9]+}}) i8**
> > @_Z4moveIRU8__strongP11objc_objectEON16remove_referenceIT_E4typeEOS5_
> >    // CHECK: load i8**
> >    // CHECK: store i8* null, i8**
> >    // CHECK: load i8***
> > @@ -46,7 +46,7 @@ void library_move(__strong id &x, __stro
> >  
> >  // CHECK-LABEL: define void
> >  @_Z12library_moveRU8__strongP11objc_object
> >  void library_move(__strong id &y) {
> > -  // CHECK: [[Y:%[a-zA-Z0-9]+]] = call nonnull i8**
> > @_Z4moveIRU8__strongP11objc_objectEON16remove_referenceIT_E4typeEOS5_
> > +  // CHECK: [[Y:%[a-zA-Z0-9]+]] = call dereferenceable({{[0-9]+}})
> > i8**
> > @_Z4moveIRU8__strongP11objc_objectEON16remove_referenceIT_E4typeEOS5_
> >    // Load the object
> >    // CHECK-NEXT: [[OBJ:%[a-zA-Z0-9]+]] = load i8** [[Y]]
> >    // Null out y
> > @@ -65,7 +65,7 @@ void library_move(__strong id &y) {
> >  // CHECK-LABEL: define void
> >  @_Z10const_moveRKU8__strongP11objc_object(
> >  void const_move(const __strong id &x) {
> >    // CHECK:      [[Y:%.*]] = alloca i8*,
> > -  // CHECK:      [[X:%.*]] = call nonnull i8**
> > @_Z4moveIRKU8__strongP11objc_objectEON16remove_referenceIT_E4typeEOS5_(
> > +  // CHECK:      [[X:%.*]] = call dereferenceable({{[0-9]+}}) i8**
> > @_Z4moveIRKU8__strongP11objc_objectEON16remove_referenceIT_E4typeEOS5_(
> >    // CHECK-NEXT: [[T0:%.*]] = load i8** [[X]]
> >    // CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retain(i8* [[T0]])
> >    // CHECK-NEXT: store i8* [[T1]], i8** [[Y]]
> >
> > Modified:
> > cfe/trunk/test/CodeGenObjCXX/arc-special-member-functions.mm
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/arc-special-member-functions.mm?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenObjCXX/arc-special-member-functions.mm
> > (original)
> > +++ cfe/trunk/test/CodeGenObjCXX/arc-special-member-functions.mm
> > Fri Jul 18 10:52:10 2014
> > @@ -91,7 +91,7 @@ void test_ObjCBlockMember_copy_assign(Ob
> >  }
> >  
> >  // Implicitly-generated copy assignment operator for
> >  ObjCBlockMember
> > -// CHECK:    define linkonce_odr nonnull {{%.*}}*
> > @_ZN15ObjCBlockMemberaSERKS_(
> > +// CHECK:    define linkonce_odr dereferenceable({{[0-9]+}})
> > {{%.*}}* @_ZN15ObjCBlockMemberaSERKS_(
> >  // CHECK:      [[T0:%.*]] = getelementptr inbounds [[T:%.*]]*
> >  {{%.*}}, i32 0, i32 0
> >  // CHECK-NEXT: [[T1:%.*]] = load i32 (i32)** [[T0]], align 8
> >  // CHECK-NEXT: [[T2:%.*]] = bitcast i32 (i32)* [[T1]] to i8*
> >
> > Modified:
> > cfe/trunk/test/CodeGenObjCXX/implicit-copy-assign-operator.mm
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/implicit-copy-assign-operator.mm?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenObjCXX/implicit-copy-assign-operator.mm
> > (original)
> > +++ cfe/trunk/test/CodeGenObjCXX/implicit-copy-assign-operator.mm
> > Fri Jul 18 10:52:10 2014
> > @@ -43,7 +43,7 @@ void test_D(D d1, D d2) {
> >    d1 = d2;
> >  }
> >  
> > -// CHECK-OBJ-LABEL: define linkonce_odr nonnull %struct.D*
> > @_ZN1DaSERS_
> > +// CHECK-OBJ-LABEL: define linkonce_odr
> > dereferenceable({{[0-9]+}}) %struct.D* @_ZN1DaSERS_
> >  // CHECK-OBJ: {{call.*_ZN1AaSERS_}}
> >  // CHECK-OBJ: {{call.*_ZN1BaSERS_}}
> >  // CHECK-OBJ: {{call.*_ZN1CaSERKS_}}
> >
> > Modified: cfe/trunk/test/CodeGenObjCXX/implicit-copy-constructor.mm
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/implicit-copy-constructor.mm?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenObjCXX/implicit-copy-constructor.mm
> > (original)
> > +++ cfe/trunk/test/CodeGenObjCXX/implicit-copy-constructor.mm Fri
> > Jul 18 10:52:10 2014
> > @@ -41,7 +41,7 @@ void f(D d) {
> >    D d2(d);
> >  }
> >  
> > -// CHECK-LABEL: define linkonce_odr void @_ZN1DC1ERS_(%struct.D*
> > %this, %struct.D* nonnull) unnamed_addr
> > +// CHECK-LABEL: define linkonce_odr void @_ZN1DC1ERS_(%struct.D*
> > %this, %struct.D* dereferenceable({{[0-9]+}})) unnamed_addr
> >  // CHECK: call void @_ZN1AC1Ev
> >  // CHECK: call void @_ZN1CC2ERS_1A
> >  // CHECK: call void @_ZN1AD1Ev
> >
> > Modified: cfe/trunk/test/CodeGenObjCXX/lvalue-reference-getter.mm
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/lvalue-reference-getter.mm?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenObjCXX/lvalue-reference-getter.mm
> > (original)
> > +++ cfe/trunk/test/CodeGenObjCXX/lvalue-reference-getter.mm Fri Jul
> > 18 10:52:10 2014
> > @@ -24,5 +24,5 @@ static SetSection gSetSection;
> >  // CHECK: [[SELF:%.*]] = alloca [[T6:%.*]]*, align
> >  // CHECK: [[T0:%.*]] = load {{.*}}* [[SELF]], align
> >  // CHECK: [[T1:%.*]] = load {{.*}}*
> >  @"\01L_OBJC_SELECTOR_REFERENCES_"
> > -// CHECK: [[C:%.*]] = call nonnull %struct.SetSection* bitcast
> > (i8* (i8*, i8*, ...)* @objc_msgSend
> > -// CHECK: call nonnull i32*
> > @_ZN10SetSection2atEi(%struct.SetSection* [[C]]
> > +// CHECK: [[C:%.*]] = call dereferenceable({{[0-9]+}})
> > %struct.SetSection* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
> > +// CHECK: call dereferenceable({{[0-9]+}}) i32*
> > @_ZN10SetSection2atEi(%struct.SetSection* [[C]]
> >
> > Modified: cfe/trunk/test/CodeGenObjCXX/message-reference.mm
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/message-reference.mm?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenObjCXX/message-reference.mm (original)
> > +++ cfe/trunk/test/CodeGenObjCXX/message-reference.mm Fri Jul 18
> > 10:52:10 2014
> > @@ -15,6 +15,6 @@
> >  }
> >  @end
> >  
> > -// CHECK: [[T:%.*]] = call nonnull i32* bitcast (i8* (i8*, i8*,
> > ...)* @objc_msgSend
> > +// CHECK: [[T:%.*]] = call dereferenceable({{[0-9]+}}) i32*
> > bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
> >  // CHECK: [[U:%.*]] = load i32* [[T]]
> >  // CHECK  [[V:%.*]] = icmp eq i32 [[U]], 0
> >
> > Modified: cfe/trunk/test/CodeGenObjCXX/property-dot-reference.mm
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/property-dot-reference.mm?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenObjCXX/property-dot-reference.mm
> > (original)
> > +++ cfe/trunk/test/CodeGenObjCXX/property-dot-reference.mm Fri Jul
> > 18 10:52:10 2014
> > @@ -11,7 +11,7 @@ void GetURL() const;
> >  
> >  @implementation TNodeIconAndNameCell
> >  - (const TFENode&) node {
> > -// CHECK: call nonnull %struct.TFENode* bitcast (i8* (i8*, i8*,
> > ...)* @objc_msgSend
> > +// CHECK: call dereferenceable({{[0-9]+}}) %struct.TFENode*
> > bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
> >  // CHECK-NEXT: call void @_ZNK7TFENode6GetURLEv(%struct.TFENode*
> >  %{{.*}})
> >  	self.node.GetURL();
> >  }	// expected-warning {{control reaches end of non-void function}}
> > @@ -27,12 +27,12 @@ void f0(const X &parent);
> >  - (const X&) target;
> >  @end
> >  void f1(A *a) {
> > -// CHECK: [[PRP:%.*]] = call nonnull %struct.X* bitcast (i8* (i8*,
> > i8*, ...)* @objc_msgSend
> > -// CHECK-NEXT:call void @_Z2f0RK1X(%struct.X* nonnull [[PRP]])
> > +// CHECK: [[PRP:%.*]] = call dereferenceable({{[0-9]+}})
> > %struct.X* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
> > +// CHECK-NEXT:call void @_Z2f0RK1X(%struct.X*
> > dereferenceable({{[0-9]+}}) [[PRP]])
> >    f0(a.target);
> >  
> > -// CHECK: [[MSG:%.*]] = call nonnull %struct.X* bitcast (i8* (i8*,
> > i8*, ...)* @objc_msgSend
> > -// CHECK-NEXT:call void @_Z2f0RK1X(%struct.X* nonnull [[MSG]])
> > +// CHECK: [[MSG:%.*]] = call dereferenceable({{[0-9]+}})
> > %struct.X* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
> > +// CHECK-NEXT:call void @_Z2f0RK1X(%struct.X*
> > dereferenceable({{[0-9]+}}) [[MSG]])
> >    f0([a target]);
> >  }
> >  
> >
> > Modified: cfe/trunk/test/CodeGenObjCXX/property-lvalue-capture.mm
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/property-lvalue-capture.mm?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenObjCXX/property-lvalue-capture.mm
> > (original)
> > +++ cfe/trunk/test/CodeGenObjCXX/property-lvalue-capture.mm Fri Jul
> > 18 10:52:10 2014
> > @@ -49,5 +49,5 @@ void test(C *c, const A &a) {
> >  // CHECK:   [[ONE1:%.*]] = load %struct.A** [[AADDR:%.*]], align 8
> >  // CHECK:   [[TWO1:%.*]] = load i8**
> >  @"\01L_OBJC_SELECTOR_REFERENCES_5", !invariant.load ![[MD_NUM]]
> >  // CHECK:   [[THREE1:%.*]] = bitcast [[TWOT:%.*]]* [[ZERO1:%.*]]
> >  to i8*
> > -// CHECK:   call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
> > to void (i8*, i8*, %struct.A*)*)(i8* [[THREE1]], i8* [[TWO1]],
> > %struct.A* nonnull [[ONE1]])
> > +// CHECK:   call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
> > to void (i8*, i8*, %struct.A*)*)(i8* [[THREE1]], i8* [[TWO1]],
> > %struct.A* dereferenceable({{[0-9]+}}) [[ONE1]])
> >  // CHECK:   store %struct.A* [[ONE1]], %struct.A** [[RESULT:%.*]],
> >  align 8
> >
> > Modified:
> > cfe/trunk/test/CodeGenObjCXX/property-object-reference-2.mm
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/property-object-reference-2.mm?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenObjCXX/property-object-reference-2.mm
> > (original)
> > +++ cfe/trunk/test/CodeGenObjCXX/property-object-reference-2.mm Fri
> > Jul 18 10:52:10 2014
> > @@ -33,7 +33,7 @@ struct TCPPObject
> >  // CHECK: [[TWO:%.*]] = load %struct.TCPPObject** [[ADDR:%.*]],
> >  align 8
> >  // CHECK: [[THREE:%.*]] = load %struct.TCPPObject** [[ADDR1:%.*]],
> >  align 8
> >  // CHECK: [[CALL:%.*]] = call i32 @_Z7DEFAULTv()
> > -// CHECK:  call void @_ZN10TCPPObjectC1ERKS_i(%struct.TCPPObject*
> > [[TWO]], %struct.TCPPObject* nonnull [[THREE]], i32 [[CALL]])
> > +// CHECK:  call void @_ZN10TCPPObjectC1ERKS_i(%struct.TCPPObject*
> > [[TWO]], %struct.TCPPObject* dereferenceable({{[0-9]+}})
> > [[THREE]], i32 [[CALL]])
> >  // CHECK:  ret void
> >  
> >  // CHECK: define internal void @"\01-[MyDocument MyProperty]"(
> > @@ -46,7 +46,7 @@ struct TCPPObject
> >  // CHECK-LABEL: define internal void
> >  @__assign_helper_atomic_property_(
> >  // CHECK: [[TWO:%.*]] = load %struct.TCPPObject** [[ADDR:%.*]],
> >  align 8
> >  // CHECK: [[THREE:%.*]] = load %struct.TCPPObject** [[ADDR1:%.*]],
> >  align 8
> > -// CHECK: [[CALL:%.*]] = call nonnull %struct.TCPPObject*
> > @_ZN10TCPPObjectaSERKS_(%struct.TCPPObject* [[TWO]],
> > %struct.TCPPObject* nonnull [[THREE]])
> > +// CHECK: [[CALL:%.*]] = call dereferenceable({{[0-9]+}})
> > %struct.TCPPObject* @_ZN10TCPPObjectaSERKS_(%struct.TCPPObject*
> > [[TWO]], %struct.TCPPObject* dereferenceable({{[0-9]+}})
> > [[THREE]])
> >  // CHECK:  ret void
> >  
> >  // CHECK: define internal void @"\01-[MyDocument setMyProperty:]"(
> >
> > Modified: cfe/trunk/test/CodeGenObjCXX/property-objects.mm
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/property-objects.mm?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenObjCXX/property-objects.mm (original)
> > +++ cfe/trunk/test/CodeGenObjCXX/property-objects.mm Fri Jul 18
> > 10:52:10 2014
> > @@ -32,7 +32,7 @@ struct CGRect {
> >  @synthesize frame;
> >  
> >  // CHECK: define internal void @"\01-[I setPosition:]"
> > -// CHECK: call nonnull %class.S* @_ZN1SaSERKS_
> > +// CHECK: call dereferenceable({{[0-9]+}}) %class.S* @_ZN1SaSERKS_
> >  // CHECK-NEXT: ret void
> >  
> >  - (void)setFrame:(CGRect)frameRect {}
> > @@ -55,7 +55,7 @@ struct CGRect {
> >  @end
> >  
> >  // CHECK-LABEL: define i32 @main
> > -// CHECK: call void @_ZN1SC1ERKS_(%class.S*
> > [[AGGTMP:%[a-zA-Z0-9\.]+]], %class.S* nonnull {{%[a-zA-Z0-9\.]+}})
> > +// CHECK: call void @_ZN1SC1ERKS_(%class.S*
> > [[AGGTMP:%[a-zA-Z0-9\.]+]], %class.S* dereferenceable({{[0-9]+}})
> > {{%[a-zA-Z0-9\.]+}})
> >  // CHECK: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to
> >  void (i8*, i8*, %class.S*)*)(i8* {{%[a-zA-Z0-9\.]+}}, i8*
> >  {{%[a-zA-Z0-9\.]+}}, %class.S* [[AGGTMP]])
> >  // CHECK-NEXT: ret i32 0
> >  int main() {
> > @@ -68,7 +68,7 @@ int main() {
> >  // rdar://8379892
> >  // CHECK-LABEL: define void @_Z1fP1A
> >  // CHECK: call void @_ZN1XC1Ev(%struct.X*
> >  [[LVTEMP:%[a-zA-Z0-9\.]+]])
> > -// CHECK: call void @_ZN1XC1ERKS_(%struct.X*
> > [[AGGTMP:%[a-zA-Z0-9\.]+]], %struct.X* nonnull [[LVTEMP]])
> > +// CHECK: call void @_ZN1XC1ERKS_(%struct.X*
> > [[AGGTMP:%[a-zA-Z0-9\.]+]], %struct.X* dereferenceable({{[0-9]+}})
> > [[LVTEMP]])
> >  // CHECK: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to
> >  void (i8*, i8*, %struct.X*)*)({{.*}} %struct.X* [[AGGTMP]])
> >  struct X {
> >    X();
> >
> > Modified: cfe/trunk/test/CodeGenObjCXX/property-reference.mm
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/property-reference.mm?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/CodeGenObjCXX/property-reference.mm (original)
> > +++ cfe/trunk/test/CodeGenObjCXX/property-reference.mm Fri Jul 18
> > 10:52:10 2014
> > @@ -26,7 +26,7 @@ void test0() {
> >    const MyStruct& currentMyStruct = myClass.foo;
> >  }
> >  
> > -// CHECK: [[C:%.*]] = call nonnull %struct.MyStruct* bitcast (i8*
> > (i8*, i8*, ...)* @objc_msgSend
> > +// CHECK: [[C:%.*]] = call dereferenceable({{[0-9]+}})
> > %struct.MyStruct* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
> >  // CHECK:   store %struct.MyStruct* [[C]], %struct.MyStruct**
> >  [[D:%.*]]
> >  
> >  namespace test1 {
> > @@ -40,7 +40,7 @@ namespace test1 {
> >  @implementation Test1
> >  @synthesize prop1 = ivar;
> >  @end
> > -// CHECK:    define internal nonnull [[A:%.*]]* @"\01-[Test1
> > prop1]"(
> > +// CHECK:    define internal dereferenceable({{[0-9]+}})
> > [[A:%.*]]* @"\01-[Test1 prop1]"(
> >  // CHECK:      [[SELF:%.*]] = alloca [[TEST1:%.*]]*, align 8
> >  // CHECK:      [[T0:%.*]] = load [[TEST1]]** [[SELF]]
> >  // CHECK-NEXT: [[T1:%.*]] = bitcast [[TEST1]]* [[T0]] to i8*
> > @@ -49,7 +49,7 @@ namespace test1 {
> >  // CHECK-NEXT: ret [[A]]* [[T3]]
> >  
> >  // CHECK:    define internal void @"\01-[Test1 setProp1:]"(
> > -// CHECK:      call nonnull [[A]]* @_ZN5test11AaSERKS0_(
> > +// CHECK:      call dereferenceable({{[0-9]+}}) [[A]]*
> > @_ZN5test11AaSERKS0_(
> >  // CHECK-NEXT: ret void
> >  
> >  // rdar://problem/10497174
> >
> > Modified: cfe/trunk/test/Modules/templates.mm
> > URL:
> > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/templates.mm?rev=213386&r1=213385&r2=213386&view=diff==============================================================================
> > --- cfe/trunk/test/Modules/templates.mm (original)
> > +++ cfe/trunk/test/Modules/templates.mm Fri Jul 18 10:52:10 2014
> > @@ -80,9 +80,9 @@ unsigned testMixedStruct() {
> >    // CHECK: call {{.*}}memcpy{{.*}}(i8* %{{.*}}, i8* bitcast
> >    ({{.*}}* @_ZZ15testMixedStructvE1r to i8*), i64 16,
> >    ListInt_right r{0, 2};
> >  
> > -  // CHECK: call void @_Z10useListIntR4ListIiE(%[[ListInt]]*
> > nonnull %[[l]])
> > +  // CHECK: call void @_Z10useListIntR4ListIiE(%[[ListInt]]*
> > dereferenceable({{[0-9]+}}) %[[l]])
> >    useListInt(l);
> > -  // CHECK: call void @_Z10useListIntR4ListIiE(%[[ListInt]]*
> > nonnull %[[r]])
> > +  // CHECK: call void @_Z10useListIntR4ListIiE(%[[ListInt]]*
> > dereferenceable({{[0-9]+}}) %[[r]])
> >    useListInt(r);
> >  
> >    // CHECK: load i32* bitcast (i8* getelementptr inbounds (i8*
> >    bitcast ({{.*}}* @list_left to i8*), i64 8) to i32*)
> >
> >
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> 

-- 
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory



More information about the cfe-commits mailing list