2019-08-23 22:26:49 +00:00
|
|
|
// RUN: %clang_cc1 -fsyntax-only -Wno-dangling-gsl -Wreturn-stack-address -verify %s
|
2019-08-23 22:21:33 +00:00
|
|
|
|
|
|
|
struct [[gsl::Owner(int)]] MyIntOwner {
|
|
|
|
MyIntOwner();
|
|
|
|
int &operator*();
|
|
|
|
};
|
|
|
|
|
|
|
|
struct [[gsl::Pointer(int)]] MyIntPointer {
|
|
|
|
MyIntPointer(int *p = nullptr);
|
|
|
|
MyIntPointer(const MyIntOwner &);
|
|
|
|
int &operator*();
|
|
|
|
MyIntOwner toOwner();
|
|
|
|
};
|
|
|
|
|
|
|
|
int &f() {
|
|
|
|
int i;
|
|
|
|
return i; // expected-warning {{reference to stack memory associated with local variable 'i' returned}}
|
|
|
|
}
|
|
|
|
|
|
|
|
MyIntPointer g() {
|
|
|
|
MyIntOwner o;
|
|
|
|
return o; // No warning, it is disabled.
|
|
|
|
}
|
2024-07-18 10:02:35 +02:00
|
|
|
|
|
|
|
void h(MyIntPointer p) {
|
|
|
|
p = MyIntOwner(); // No warning, it is disabled.
|
|
|
|
}
|