|
1 | 1 | #pragma once
|
| 2 | +#include "visibility.h" |
2 | 3 | #include <functional>
|
3 | 4 |
|
4 | 5 | // FRT or SWIFT_SHARED_REFERENCE type
|
@@ -326,3 +327,157 @@ struct Derived : Base {
|
326 | 327 | FRTStruct *_Nonnull VirtualMethodReturningFRTUnowned() override
|
327 | 328 | __attribute__((swift_attr("returns_unretained")));
|
328 | 329 | };
|
| 330 | + |
| 331 | +SWIFT_BEGIN_NULLABILITY_ANNOTATIONS |
| 332 | + |
| 333 | +namespace DefaultOwnershipConventionOnCXXForeignRefType { |
| 334 | +struct __attribute__((swift_attr("import_reference"))) |
| 335 | +__attribute__((swift_attr("retain:defRetain1"))) |
| 336 | +__attribute__((swift_attr("release:defRelease1"))) |
| 337 | +__attribute__((swift_attr("returned_as_retained_by_default"))) RefTyDefRetained {}; |
| 338 | + |
| 339 | +RefTyDefRetained *returnRefTyDefRetained() { return new RefTyDefRetained(); } |
| 340 | + |
| 341 | +struct __attribute__((swift_attr("import_reference"))) |
| 342 | +__attribute__((swift_attr("retain:defRetain2"))) |
| 343 | +__attribute__((swift_attr("release:defRelease2"))) |
| 344 | +__attribute__((swift_attr("returned_as_unretained_by_default"))) RefTyDefUnretained {}; |
| 345 | + |
| 346 | +RefTyDefUnretained *returnRefTyDefUnretained() { |
| 347 | + return new RefTyDefUnretained(); |
| 348 | +} |
| 349 | +} // namespace DefaultOwnershipConventionOnCXXForeignRefType |
| 350 | + |
| 351 | +void defRetain1( |
| 352 | + DefaultOwnershipConventionOnCXXForeignRefType::RefTyDefRetained *v) {}; |
| 353 | +void defRelease1( |
| 354 | + DefaultOwnershipConventionOnCXXForeignRefType::RefTyDefRetained *v) {}; |
| 355 | + |
| 356 | +void defRetain2( |
| 357 | + DefaultOwnershipConventionOnCXXForeignRefType::RefTyDefUnretained *v) {}; |
| 358 | +void defRelease2( |
| 359 | + DefaultOwnershipConventionOnCXXForeignRefType::RefTyDefUnretained *v) {}; |
| 360 | + |
| 361 | +namespace FunctionAnnotationHasPrecedence { |
| 362 | +struct __attribute__((swift_attr("import_reference"))) |
| 363 | +__attribute__((swift_attr("retain:defaultRetain1"))) |
| 364 | +__attribute__((swift_attr("release:defaultRelease1"))) |
| 365 | +__attribute__((swift_attr("returned_as_unretained_by_default"))) RefTyDefUnretained {}; |
| 366 | + |
| 367 | +RefTyDefUnretained *returnRefTyDefUnretained() { |
| 368 | + return new RefTyDefUnretained(); |
| 369 | +} |
| 370 | +RefTyDefUnretained *returnRefTyDefUnretainedAnnotatedRetained() |
| 371 | + __attribute__((swift_attr("returns_retained"))) { |
| 372 | + return new RefTyDefUnretained(); |
| 373 | +} |
| 374 | + |
| 375 | +struct __attribute__((swift_attr("import_reference"))) |
| 376 | +__attribute__((swift_attr("retain:defaultRetain2"))) |
| 377 | +__attribute__((swift_attr("release:defaultRelease2"))) |
| 378 | +__attribute__((swift_attr("returned_as_retained_by_default"))) RefTyDefRetained {}; |
| 379 | + |
| 380 | +RefTyDefRetained *returnRefTyDefRetained() { return new RefTyDefRetained(); } |
| 381 | +RefTyDefRetained *returnRefTyDefRetainedAnnotatedUnRetained() |
| 382 | +__attribute__((swift_attr("returns_unretained"))) { |
| 383 | + return new RefTyDefRetained(); |
| 384 | +} |
| 385 | + |
| 386 | +} // namespace FunctionAnnotationHasPrecedence |
| 387 | + |
| 388 | +void defaultRetain1(FunctionAnnotationHasPrecedence::RefTyDefUnretained *v) {}; |
| 389 | +void defaultRelease1(FunctionAnnotationHasPrecedence::RefTyDefUnretained *v) {}; |
| 390 | + |
| 391 | +void defaultRetain2(FunctionAnnotationHasPrecedence::RefTyDefRetained *v) {}; |
| 392 | +void defaultRelease2(FunctionAnnotationHasPrecedence::RefTyDefRetained *v) {}; |
| 393 | + |
| 394 | +namespace DefaultOwnershipSuppressUnannotatedAPIWarning { |
| 395 | + |
| 396 | +struct __attribute__((swift_attr("import_reference"))) |
| 397 | +__attribute__((swift_attr("retain:rretain"))) |
| 398 | +__attribute__((swift_attr("release:rrelease"))) RefType {}; |
| 399 | + |
| 400 | +RefType *returnRefType() { return new RefType(); } // expected-warning {{'returnRefType' should be annotated with either SWIFT_RETURNS_RETAINED or SWIFT_RETURNS_UNRETAINED as it is returning a SWIFT_SHARED_REFERENCE}} |
| 401 | + |
| 402 | +struct __attribute__((swift_attr("import_reference"))) |
| 403 | +__attribute__((swift_attr("retain:dretain"))) |
| 404 | +__attribute__((swift_attr("release:drelease"))) |
| 405 | +__attribute__((swift_attr("returned_as_retained_by_default"))) RefTyDefRetained {}; |
| 406 | + |
| 407 | +RefTyDefRetained *returnRefTyDefRetained() { return new RefTyDefRetained(); } |
| 408 | + |
| 409 | +} // namespace DefaultOwnershipSuppressUnannotatedAPIWarning |
| 410 | + |
| 411 | +void rretain(DefaultOwnershipSuppressUnannotatedAPIWarning::RefType *v) {}; |
| 412 | +void rrelease(DefaultOwnershipSuppressUnannotatedAPIWarning::RefType *v) {}; |
| 413 | + |
| 414 | +void dretain( |
| 415 | + DefaultOwnershipSuppressUnannotatedAPIWarning::RefTyDefRetained *v) {}; |
| 416 | +void drelease( |
| 417 | + DefaultOwnershipSuppressUnannotatedAPIWarning::RefTyDefRetained *v) {}; |
| 418 | + |
| 419 | +namespace DefaultOwnershipInheritance { |
| 420 | + |
| 421 | +struct __attribute__((swift_attr("import_reference"))) |
| 422 | +__attribute__((swift_attr("retain:baseRetain"))) |
| 423 | +__attribute__((swift_attr("release:baseRelease"))) |
| 424 | +__attribute__((swift_attr("returned_as_retained_by_default"))) BaseType {}; |
| 425 | + |
| 426 | +struct __attribute__((swift_attr("import_reference"))) |
| 427 | +__attribute__((swift_attr("retain:derivedRetain"))) |
| 428 | +__attribute__((swift_attr("release:derivedRelease"))) DerivedType |
| 429 | + : public BaseType {}; |
| 430 | + |
| 431 | +struct __attribute__((swift_attr("import_reference"))) |
| 432 | +__attribute__((swift_attr("retain:derivedRetain2"))) |
| 433 | +__attribute__((swift_attr("release:derivedRelease2"))) DerivedType2 |
| 434 | + : public DerivedType {}; |
| 435 | + |
| 436 | +struct __attribute__((swift_attr("import_reference"))) |
| 437 | +__attribute__((swift_attr("retain:derivedRetain3"))) |
| 438 | +__attribute__((swift_attr("release:derivedRelease3"))) |
| 439 | +__attribute__((swift_attr("returned_as_unretained_by_default"))) DerivedOverride |
| 440 | + : public DerivedType {}; |
| 441 | + |
| 442 | +BaseType *returnBaseType() { return new BaseType(); } |
| 443 | +DerivedType *returnDerivedType() { return new DerivedType(); } |
| 444 | +DerivedType2 *returnDerivedType2() { return new DerivedType2(); } |
| 445 | +DerivedOverride *returnDerivedOverride() { return new DerivedOverride(); } |
| 446 | + |
| 447 | +struct __attribute__((swift_attr("import_reference"))) |
| 448 | +__attribute__((swift_attr("retain:bRetain"))) |
| 449 | +__attribute__((swift_attr("release:bRelease"))) BaseTypeNonDefault {}; |
| 450 | + |
| 451 | +struct __attribute__((swift_attr("import_reference"))) |
| 452 | +__attribute__((swift_attr("retain:dRetain"))) |
| 453 | +__attribute__((swift_attr("release:dRelease"))) DerivedTypeNonDefault |
| 454 | + : public BaseTypeNonDefault {}; |
| 455 | + |
| 456 | +BaseTypeNonDefault *returnBaseTypeNonDefault() { // expected-warning {{'returnBaseTypeNonDefault' should be annotated with either SWIFT_RETURNS_RETAINED or SWIFT_RETURNS_UNRETAINED as it is returning a SWIFT_SHARED_REFERENCE}} |
| 457 | + return new BaseTypeNonDefault(); |
| 458 | +} |
| 459 | +DerivedTypeNonDefault *returnDerivedTypeNonDefault() { // expected-warning {{'returnDerivedTypeNonDefault' should be annotated with either SWIFT_RETURNS_RETAINED or SWIFT_RETURNS_UNRETAINED as it is returning a SWIFT_SHARED_REFERENCE}} |
| 460 | + return new DerivedTypeNonDefault(); |
| 461 | +} |
| 462 | + |
| 463 | +} // namespace DefaultOwnershipInheritance |
| 464 | + |
| 465 | +void baseRetain(DefaultOwnershipInheritance::BaseType *v) {}; |
| 466 | +void baseRelease(DefaultOwnershipInheritance::BaseType *v) {}; |
| 467 | + |
| 468 | +void derivedRetain(DefaultOwnershipInheritance::DerivedType *v) {}; |
| 469 | +void derivedRelease(DefaultOwnershipInheritance::DerivedType *v) {}; |
| 470 | + |
| 471 | +void derivedRetain2(DefaultOwnershipInheritance::DerivedType2 *v) {}; |
| 472 | +void derivedRelease2(DefaultOwnershipInheritance::DerivedType2 *v) {}; |
| 473 | + |
| 474 | +void derivedRetain3(DefaultOwnershipInheritance::DerivedOverride *v) {}; |
| 475 | +void derivedRelease3(DefaultOwnershipInheritance::DerivedOverride *v) {}; |
| 476 | + |
| 477 | +void bRetain(DefaultOwnershipInheritance::BaseTypeNonDefault *v) {}; |
| 478 | +void bRelease(DefaultOwnershipInheritance::BaseTypeNonDefault *v) {}; |
| 479 | + |
| 480 | +void dRetain(DefaultOwnershipInheritance::DerivedTypeNonDefault *v) {}; |
| 481 | +void dRelease(DefaultOwnershipInheritance::DerivedTypeNonDefault *v) {}; |
| 482 | + |
| 483 | +SWIFT_END_NULLABILITY_ANNOTATIONS |
0 commit comments