mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
In C++, we always expected to invoke the dtor for moved-from objects. This is not the case for swift. Fortunately, @inCxx calling convention is already expressing that the caller supposed to destroy the object. This fixes the missing dtor calls when calling C++ functions taking rvalue references. Fixes #77894. rdar://140786022
22 lines
761 B
C
22 lines
761 B
C
#pragma once
|
|
#include <cstdio>
|
|
|
|
struct MoveOnly {
|
|
int id;
|
|
MoveOnly() : id(0) { printf("MoveOnly %d created\n", id); }
|
|
MoveOnly(const MoveOnly&) = delete;
|
|
MoveOnly(MoveOnly&& other) : id(other.id + 1) { printf("MoveOnly %d move-created\n", id); }
|
|
~MoveOnly() { printf("MoveOnly %d destroyed\n", id); }
|
|
};
|
|
|
|
struct Copyable {
|
|
int id;
|
|
Copyable() : id(0) { printf("Copyable %d created\n", id); }
|
|
Copyable(const Copyable& other) : id(other.id + 1) { printf("Copyable %d copy-created\n", id); }
|
|
Copyable(Copyable&& other) : id(other.id + 1) { printf("Copyable %d move-created\n", id); }
|
|
~Copyable() { printf("Copyable %d destroyed\n", id); }
|
|
};
|
|
|
|
inline void byRValueRef(MoveOnly&& x) {}
|
|
inline void byRValueRef(Copyable&& x) {}
|