Mirror of roytam1's Pale Moon fork just in case Moonchild and Tobin decide to go after him
https://github.com/roytam1/palemoon27
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.5 KiB
94 lines
2.5 KiB
#define MOZ_STRONG_REF __attribute__((annotate("moz_strong_ref"))) |
|
|
|
struct RefCountedBase { |
|
void AddRef(); |
|
void Release(); |
|
}; |
|
|
|
template <class T> |
|
struct SmartPtr { |
|
T* MOZ_STRONG_REF t; |
|
T* operator->() const; |
|
}; |
|
|
|
struct R : RefCountedBase { |
|
void method(); |
|
}; |
|
|
|
void take(...); |
|
void foo() { |
|
R* ptr; |
|
SmartPtr<R> sp; |
|
take([&](R* argptr) { |
|
R* localptr; |
|
ptr->method(); // expected-error{{Refcounted variable 'ptr' of type 'R' cannot be captured by a lambda}} expected-note{{Please consider using a smart pointer}} |
|
argptr->method(); |
|
localptr->method(); |
|
}); |
|
take([&](SmartPtr<R> argsp) { |
|
SmartPtr<R> localsp; |
|
sp->method(); |
|
argsp->method(); |
|
localsp->method(); |
|
}); |
|
take([&](R* argptr) { |
|
R* localptr; |
|
take(ptr); // expected-error{{Refcounted variable 'ptr' of type 'R' cannot be captured by a lambda}} expected-note{{Please consider using a smart pointer}} |
|
take(argptr); |
|
take(localptr); |
|
}); |
|
take([&](SmartPtr<R> argsp) { |
|
SmartPtr<R> localsp; |
|
take(sp); |
|
take(argsp); |
|
take(localsp); |
|
}); |
|
take([=](R* argptr) { |
|
R* localptr; |
|
ptr->method(); // expected-error{{Refcounted variable 'ptr' of type 'R' cannot be captured by a lambda}} expected-note{{Please consider using a smart pointer}} |
|
argptr->method(); |
|
localptr->method(); |
|
}); |
|
take([=](SmartPtr<R> argsp) { |
|
SmartPtr<R> localsp; |
|
sp->method(); |
|
argsp->method(); |
|
localsp->method(); |
|
}); |
|
take([=](R* argptr) { |
|
R* localptr; |
|
take(ptr); // expected-error{{Refcounted variable 'ptr' of type 'R' cannot be captured by a lambda}} expected-note{{Please consider using a smart pointer}} |
|
take(argptr); |
|
take(localptr); |
|
}); |
|
take([=](SmartPtr<R> argsp) { |
|
SmartPtr<R> localsp; |
|
take(sp); |
|
take(argsp); |
|
take(localsp); |
|
}); |
|
take([ptr](R* argptr) { // expected-error{{Refcounted variable 'ptr' of type 'R' cannot be captured by a lambda}} expected-note{{Please consider using a smart pointer}} |
|
R* localptr; |
|
ptr->method(); |
|
argptr->method(); |
|
localptr->method(); |
|
}); |
|
take([sp](SmartPtr<R> argsp) { |
|
SmartPtr<R> localsp; |
|
sp->method(); |
|
argsp->method(); |
|
localsp->method(); |
|
}); |
|
take([ptr](R* argptr) { // expected-error{{Refcounted variable 'ptr' of type 'R' cannot be captured by a lambda}} expected-note{{Please consider using a smart pointer}} |
|
R* localptr; |
|
take(ptr); |
|
take(argptr); |
|
take(localptr); |
|
}); |
|
take([sp](SmartPtr<R> argsp) { |
|
SmartPtr<R> localsp; |
|
take(sp); |
|
take(argsp); |
|
take(localsp); |
|
}); |
|
}
|
|
|