https://lab.llvm.org/buildbot/#/builders/168/builds/20063 (should be
fixed with #90292)
More details in #83774
This reverts commit cf5a8b4894.
This commit is contained in:
@@ -839,9 +839,7 @@ TEST_F(TargetDeclTest, OverloadExpr) {
|
||||
[[delete]] x;
|
||||
}
|
||||
)cpp";
|
||||
// Sized deallocation is enabled by default in C++14 onwards.
|
||||
EXPECT_DECLS("CXXDeleteExpr",
|
||||
"void operator delete(void *, unsigned long) noexcept");
|
||||
EXPECT_DECLS("CXXDeleteExpr", "void operator delete(void *) noexcept");
|
||||
}
|
||||
|
||||
TEST_F(TargetDeclTest, DependentExprs) {
|
||||
|
||||
@@ -12,6 +12,16 @@ struct S {
|
||||
// CHECK-MESSAGES: :[[@LINE+1]]:7: warning: declaration of 'operator new' has no matching declaration of 'operator delete' at the same scope
|
||||
void *operator new(size_t size) noexcept(false);
|
||||
|
||||
struct T {
|
||||
// Sized deallocations are not enabled by default, and so this new/delete pair
|
||||
// does not match. However, we expect only one warning, for the new, because
|
||||
// the operator delete is a placement delete and we do not warn on mismatching
|
||||
// placement operations.
|
||||
// CHECK-MESSAGES: :[[@LINE+1]]:9: warning: declaration of 'operator new' has no matching declaration of 'operator delete' at the same scope
|
||||
void *operator new(size_t size) noexcept;
|
||||
void operator delete(void *ptr, size_t) noexcept; // ok only if sized deallocation is enabled
|
||||
};
|
||||
|
||||
struct U {
|
||||
void *operator new(size_t size) noexcept;
|
||||
void operator delete(void *ptr) noexcept;
|
||||
|
||||
@@ -90,11 +90,6 @@ C++ Language Changes
|
||||
--------------------
|
||||
- Implemented ``_BitInt`` literal suffixes ``__wb`` or ``__WB`` as a Clang extension with ``unsigned`` modifiers also allowed. (#GH85223).
|
||||
|
||||
C++14 Feature Support
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
- Sized deallocation is enabled by default in C++14 onwards. The user may specify
|
||||
``-fno-sized-deallocation`` to disable it if there are some regressions.
|
||||
|
||||
C++17 Feature Support
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
- Clang now exposes ``__GCC_DESTRUCTIVE_SIZE`` and ``__GCC_CONSTRUCTIVE_SIZE``
|
||||
|
||||
@@ -603,7 +603,6 @@ class MarshallingInfoVisibility<KeyPathAndMacro kpm, code default>
|
||||
// Key paths that are constant during parsing of options with the same key path prefix.
|
||||
defvar cplusplus = LangOpts<"CPlusPlus">;
|
||||
defvar cpp11 = LangOpts<"CPlusPlus11">;
|
||||
defvar cpp14 = LangOpts<"CPlusPlus14">;
|
||||
defvar cpp17 = LangOpts<"CPlusPlus17">;
|
||||
defvar cpp20 = LangOpts<"CPlusPlus20">;
|
||||
defvar c99 = LangOpts<"C99">;
|
||||
@@ -3371,9 +3370,10 @@ defm relaxed_template_template_args : BoolFOption<"relaxed-template-template-arg
|
||||
"Enable C++17 relaxed template template argument matching">,
|
||||
NegFlag<SetFalse>>;
|
||||
defm sized_deallocation : BoolFOption<"sized-deallocation",
|
||||
LangOpts<"SizedDeallocation">, Default<cpp14.KeyPath>,
|
||||
PosFlag<SetTrue, [], [], "Enable C++14 sized global deallocation functions">,
|
||||
NegFlag<SetFalse>, BothFlags<[], [ClangOption, CC1Option]>>;
|
||||
LangOpts<"SizedDeallocation">, DefaultFalse,
|
||||
PosFlag<SetTrue, [], [ClangOption, CC1Option],
|
||||
"Enable C++14 sized global deallocation functions">,
|
||||
NegFlag<SetFalse>>;
|
||||
defm aligned_allocation : BoolFOption<"aligned-allocation",
|
||||
LangOpts<"AlignedAllocation">, Default<cpp17.KeyPath>,
|
||||
PosFlag<SetTrue, [], [ClangOption], "Enable C++17 aligned allocation functions">,
|
||||
|
||||
@@ -7262,15 +7262,10 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
||||
Args.addOptInFlag(CmdArgs, options::OPT_frelaxed_template_template_args,
|
||||
options::OPT_fno_relaxed_template_template_args);
|
||||
|
||||
// -fsized-deallocation is on by default in C++14 onwards and otherwise off
|
||||
// by default.
|
||||
if (Arg *A = Args.getLastArg(options::OPT_fsized_deallocation,
|
||||
options::OPT_fno_sized_deallocation)) {
|
||||
if (A->getOption().matches(options::OPT_fno_sized_deallocation))
|
||||
CmdArgs.push_back("-fno-sized-deallocation");
|
||||
else
|
||||
CmdArgs.push_back("-fsized-deallocation");
|
||||
}
|
||||
// -fsized-deallocation is off by default, as it is an ABI-breaking change for
|
||||
// most platforms.
|
||||
Args.addOptInFlag(CmdArgs, options::OPT_fsized_deallocation,
|
||||
options::OPT_fno_sized_deallocation);
|
||||
|
||||
// -faligned-allocation is on by default in C++17 onwards and otherwise off
|
||||
// by default.
|
||||
|
||||
@@ -2912,54 +2912,9 @@ static bool sdkSupportsBuiltinModules(const Darwin::DarwinPlatformKind &TargetPl
|
||||
}
|
||||
}
|
||||
|
||||
static inline llvm::VersionTuple
|
||||
sizedDeallocMinVersion(llvm::Triple::OSType OS) {
|
||||
switch (OS) {
|
||||
default:
|
||||
break;
|
||||
case llvm::Triple::Darwin:
|
||||
case llvm::Triple::MacOSX: // Earliest supporting version is 10.12.
|
||||
return llvm::VersionTuple(10U, 12U);
|
||||
case llvm::Triple::IOS:
|
||||
case llvm::Triple::TvOS: // Earliest supporting version is 10.0.0.
|
||||
return llvm::VersionTuple(10U);
|
||||
case llvm::Triple::WatchOS: // Earliest supporting version is 3.0.0.
|
||||
return llvm::VersionTuple(3U);
|
||||
}
|
||||
|
||||
llvm_unreachable("Unexpected OS");
|
||||
}
|
||||
|
||||
bool Darwin::isSizedDeallocationUnavailable() const {
|
||||
llvm::Triple::OSType OS;
|
||||
|
||||
if (isTargetMacCatalyst())
|
||||
return TargetVersion < sizedDeallocMinVersion(llvm::Triple::MacOSX);
|
||||
switch (TargetPlatform) {
|
||||
case MacOS: // Earlier than 10.12.
|
||||
OS = llvm::Triple::MacOSX;
|
||||
break;
|
||||
case IPhoneOS:
|
||||
OS = llvm::Triple::IOS;
|
||||
break;
|
||||
case TvOS: // Earlier than 10.0.
|
||||
OS = llvm::Triple::TvOS;
|
||||
break;
|
||||
case WatchOS: // Earlier than 3.0.
|
||||
OS = llvm::Triple::WatchOS;
|
||||
break;
|
||||
case DriverKit:
|
||||
case XROS:
|
||||
// Always available.
|
||||
return false;
|
||||
}
|
||||
|
||||
return TargetVersion < sizedDeallocMinVersion(OS);
|
||||
}
|
||||
|
||||
void Darwin::addClangTargetOptions(
|
||||
const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args,
|
||||
Action::OffloadKind DeviceOffloadKind) const {
|
||||
void Darwin::addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
|
||||
llvm::opt::ArgStringList &CC1Args,
|
||||
Action::OffloadKind DeviceOffloadKind) const {
|
||||
// Pass "-faligned-alloc-unavailable" only when the user hasn't manually
|
||||
// enabled or disabled aligned allocations.
|
||||
if (!DriverArgs.hasArgNoClaim(options::OPT_faligned_allocation,
|
||||
@@ -2967,13 +2922,6 @@ void Darwin::addClangTargetOptions(
|
||||
isAlignedAllocationUnavailable())
|
||||
CC1Args.push_back("-faligned-alloc-unavailable");
|
||||
|
||||
// Pass "-fno-sized-deallocation" only when the user hasn't manually enabled
|
||||
// or disabled sized deallocations.
|
||||
if (!DriverArgs.hasArgNoClaim(options::OPT_fsized_deallocation,
|
||||
options::OPT_fno_sized_deallocation) &&
|
||||
isSizedDeallocationUnavailable())
|
||||
CC1Args.push_back("-fno-sized-deallocation");
|
||||
|
||||
addClangCC1ASTargetOptions(DriverArgs, CC1Args);
|
||||
|
||||
// Enable compatibility mode for NSItemProviderCompletionHandler in
|
||||
|
||||
@@ -511,10 +511,6 @@ protected:
|
||||
/// targeting.
|
||||
bool isAlignedAllocationUnavailable() const;
|
||||
|
||||
/// Return true if c++14 sized deallocation functions are not implemented in
|
||||
/// the c++ standard library of the deployment target we are targeting.
|
||||
bool isSizedDeallocationUnavailable() const;
|
||||
|
||||
void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
|
||||
llvm::opt::ArgStringList &CC1Args,
|
||||
Action::OffloadKind DeviceOffloadKind) const override;
|
||||
|
||||
@@ -36,12 +36,6 @@ void ZOS::addClangTargetOptions(const ArgList &DriverArgs,
|
||||
if (!DriverArgs.hasArgNoClaim(options::OPT_faligned_allocation,
|
||||
options::OPT_fno_aligned_allocation))
|
||||
CC1Args.push_back("-faligned-alloc-unavailable");
|
||||
|
||||
// Pass "-fno-sized-deallocation" only when the user hasn't manually enabled
|
||||
// or disabled sized deallocations.
|
||||
if (!DriverArgs.hasArgNoClaim(options::OPT_fsized_deallocation,
|
||||
options::OPT_fno_sized_deallocation))
|
||||
CC1Args.push_back("-fno-sized-deallocation");
|
||||
}
|
||||
|
||||
void zos::Assembler::ConstructJob(Compilation &C, const JobAction &JA,
|
||||
|
||||
@@ -2333,7 +2333,7 @@ void TestNonADLCall3() {
|
||||
// CHECK-NEXT: "kind": "FunctionDecl",
|
||||
// CHECK-NEXT: "name": "operator delete",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "void (void *, unsigned long) noexcept"
|
||||
// CHECK-NEXT: "qualType": "void (void *) noexcept"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "inner": [
|
||||
|
||||
@@ -164,7 +164,7 @@ void UnaryExpressions(int *p) {
|
||||
// CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> 'int *' lvalue ParmVar 0x{{[^ ]*}} 'p' 'int *'
|
||||
|
||||
::delete p;
|
||||
// CHECK: CXXDeleteExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:12> 'void' global Function 0x{{[^ ]*}} 'operator delete' 'void (void *, unsigned long) noexcept'
|
||||
// CHECK: CXXDeleteExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:12> 'void' global Function 0x{{[^ ]*}} 'operator delete' 'void (void *) noexcept'
|
||||
// CHECK-NEXT: ImplicitCastExpr
|
||||
// CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:12> 'int *' lvalue ParmVar 0x{{[^ ]*}} 'p' 'int *'
|
||||
|
||||
|
||||
@@ -994,7 +994,7 @@ void TestDependentGenericSelectionExpr(Ty T) {
|
||||
// CHECK-NEXT: "kind": "FunctionDecl",
|
||||
// CHECK-NEXT: "name": "operator delete",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "void (void *, unsigned long) noexcept"
|
||||
// CHECK-NEXT: "qualType": "void (void *) noexcept"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "inner": [
|
||||
@@ -1369,7 +1369,7 @@ void TestDependentGenericSelectionExpr(Ty T) {
|
||||
// CHECK-NEXT: "kind": "FunctionDecl",
|
||||
// CHECK-NEXT: "name": "operator delete",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "void (void *, unsigned long) noexcept"
|
||||
// CHECK-NEXT: "qualType": "void (void *) noexcept"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "inner": [
|
||||
@@ -1722,6 +1722,7 @@ void TestDependentGenericSelectionExpr(Ty T) {
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "isUsed": true,
|
||||
// CHECK-NEXT: "name": "operator delete",
|
||||
// CHECK-NEXT: "mangledName": "_ZdlPv",
|
||||
// CHECK-NEXT: "type": {
|
||||
@@ -1809,126 +1810,6 @@ void TestDependentGenericSelectionExpr(Ty T) {
|
||||
// CHECK-NEXT: }
|
||||
|
||||
|
||||
// CHECK-NOT: {{^}}Dumping
|
||||
// CHECK: "kind": "FunctionDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "isUsed": true,
|
||||
// CHECK-NEXT: "name": "operator delete",
|
||||
// CHECK-NEXT: "mangledName": "_ZdlPvm",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "void (void *, unsigned long) noexcept"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "ParmVarDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "void *"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "ParmVarDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "unsigned long"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "VisibilityAttr",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "implicit": true,
|
||||
// CHECK-NEXT: "visibility": "default"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
|
||||
// CHECK-NOT: {{^}}Dumping
|
||||
// CHECK: "kind": "FunctionDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "name": "operator delete",
|
||||
// CHECK-NEXT: "mangledName": "_ZdlPvmSt11align_val_t",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "void (void *, unsigned long, std::align_val_t) noexcept"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "ParmVarDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "void *"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "ParmVarDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "unsigned long"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "ParmVarDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "std::align_val_t"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "VisibilityAttr",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "implicit": true,
|
||||
// CHECK-NEXT: "visibility": "default"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
|
||||
// CHECK-NOT: {{^}}Dumping
|
||||
// CHECK: "kind": "FunctionDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
@@ -2025,125 +1906,6 @@ void TestDependentGenericSelectionExpr(Ty T) {
|
||||
// CHECK-NEXT: }
|
||||
|
||||
|
||||
// CHECK-NOT: {{^}}Dumping
|
||||
// CHECK: "kind": "FunctionDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "name": "operator delete[]",
|
||||
// CHECK-NEXT: "mangledName": "_ZdaPvm",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "void (void *, unsigned long) noexcept"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "ParmVarDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "void *"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "ParmVarDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "unsigned long"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "VisibilityAttr",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "implicit": true,
|
||||
// CHECK-NEXT: "visibility": "default"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
|
||||
// CHECK-NOT: {{^}}Dumping
|
||||
// CHECK: "kind": "FunctionDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "name": "operator delete[]",
|
||||
// CHECK-NEXT: "mangledName": "_ZdaPvmSt11align_val_t",
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "void (void *, unsigned long, std::align_val_t) noexcept"
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "inner": [
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "ParmVarDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "void *"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "ParmVarDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "unsigned long"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "ParmVarDecl",
|
||||
// CHECK-NEXT: "loc": {},
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "isImplicit": true,
|
||||
// CHECK-NEXT: "type": {
|
||||
// CHECK-NEXT: "qualType": "std::align_val_t"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: {
|
||||
// CHECK-NEXT: "id": "0x{{.*}}",
|
||||
// CHECK-NEXT: "kind": "VisibilityAttr",
|
||||
// CHECK-NEXT: "range": {
|
||||
// CHECK-NEXT: "begin": {},
|
||||
// CHECK-NEXT: "end": {}
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "implicit": true,
|
||||
// CHECK-NEXT: "visibility": "default"
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
// CHECK-NEXT: }
|
||||
|
||||
// CHECK-NOT: {{^}}Dumping
|
||||
// CHECK: "kind": "FunctionTemplateDecl",
|
||||
// CHECK-NEXT: "loc": {
|
||||
|
||||
@@ -9,7 +9,7 @@ void free(void *);
|
||||
} // namespace std
|
||||
|
||||
void *operator new(size_t size) { return std::malloc(size); }
|
||||
void operator delete(void *ptr, size_t size) { std::free(ptr); }
|
||||
void operator delete(void *ptr) { std::free(ptr); }
|
||||
|
||||
struct S {
|
||||
S() {}
|
||||
@@ -49,7 +49,7 @@ void test() {
|
||||
// CHECK-NEXT: PostCall (operator delete)
|
||||
}
|
||||
|
||||
void operator delete(void *ptr, size_t size) {
|
||||
void operator delete(void *ptr) {
|
||||
std::free(ptr);
|
||||
// CHECK-NO-INLINE-NEXT: PreCall (std::free)
|
||||
// CHECK-NO-INLINE-NEXT: PostCall (std::free)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %clang_cc1 -std=c++1z -fexceptions -verify %s
|
||||
// RUN: %clang_cc1 -std=c++1z -fsized-deallocation -fexceptions -verify %s
|
||||
|
||||
using size_t = decltype(sizeof(0));
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
// RUN: %clang_cc1 -std=c++98 %s -triple x86_64-linux-gnu -emit-llvm -disable-llvm-passes -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK,CXX98-11
|
||||
// RUN: %clang_cc1 -std=c++11 %s -triple x86_64-linux-gnu -emit-llvm -disable-llvm-passes -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK,CXX98-11
|
||||
// RUN: %clang_cc1 -std=c++14 %s -triple x86_64-linux-gnu -emit-llvm -disable-llvm-passes -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK,SINCE-CXX14
|
||||
// RUN: %clang_cc1 -std=c++17 %s -triple x86_64-linux-gnu -emit-llvm -disable-llvm-passes -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK,SINCE-CXX14
|
||||
// RUN: %clang_cc1 -std=c++20 %s -triple x86_64-linux-gnu -emit-llvm -disable-llvm-passes -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK,SINCE-CXX14
|
||||
// RUN: %clang_cc1 -std=c++23 %s -triple x86_64-linux-gnu -emit-llvm -disable-llvm-passes -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK,SINCE-CXX14
|
||||
// RUN: %clang_cc1 -std=c++2c %s -triple x86_64-linux-gnu -emit-llvm -disable-llvm-passes -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK,SINCE-CXX14
|
||||
// RUN: %clang_cc1 -std=c++98 %s -triple x86_64-linux-gnu -emit-llvm -disable-llvm-passes -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
|
||||
// RUN: %clang_cc1 -std=c++11 %s -triple x86_64-linux-gnu -emit-llvm -disable-llvm-passes -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
|
||||
// RUN: %clang_cc1 -std=c++14 %s -triple x86_64-linux-gnu -emit-llvm -disable-llvm-passes -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
|
||||
// RUN: %clang_cc1 -std=c++17 %s -triple x86_64-linux-gnu -emit-llvm -disable-llvm-passes -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
|
||||
// RUN: %clang_cc1 -std=c++20 %s -triple x86_64-linux-gnu -emit-llvm -disable-llvm-passes -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
|
||||
// RUN: %clang_cc1 -std=c++23 %s -triple x86_64-linux-gnu -emit-llvm -disable-llvm-passes -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
|
||||
// RUN: %clang_cc1 -std=c++2c %s -triple x86_64-linux-gnu -emit-llvm -disable-llvm-passes -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
|
||||
|
||||
namespace cwg292 { // cwg292: 2.9
|
||||
|
||||
@@ -23,8 +23,7 @@ void f() {
|
||||
// CHECK: invoke {{.*}} i32 @cwg292::g()()
|
||||
// CHECK-NEXT: to {{.*}} unwind label %lpad
|
||||
// CHECK-LABEL: lpad:
|
||||
// CXX98-11: call void @operator delete(void*)(ptr {{.*}} %[[CALL]])
|
||||
// SINCE-CXX14: call void @operator delete(void*, unsigned long)(ptr {{.*}} %[[CALL]], i64 noundef 1)
|
||||
// CHECK: call void @operator delete(void*)(ptr {{.*}} %[[CALL]])
|
||||
// CHECK-LABEL: eh.resume:
|
||||
// CHECK-LABEL: }
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %clang_cc1 -std=c++1z -fexceptions %s -verify
|
||||
// RUN: %clang_cc1 -std=c++1z -fsized-deallocation -fexceptions %s -verify
|
||||
|
||||
using size_t = decltype(sizeof(0));
|
||||
namespace std { enum class align_val_t : size_t {}; }
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
// Check that delete exprs call the sized deallocation function if
|
||||
// -fsized-deallocation is passed in C++11 or std >= C++14.
|
||||
// -fsized-deallocation is passed in both C++11 and C++14.
|
||||
// RUN: %clang_cc1 -std=c++11 -fsized-deallocation %s -emit-llvm -triple x86_64-linux-gnu -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 -std=c++14 %s -emit-llvm -triple x86_64-linux-gnu -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 -std=c++14 -fsized-deallocation %s -emit-llvm -triple x86_64-linux-gnu -o - | FileCheck %s
|
||||
|
||||
// Check that we don't used sized deallocation with -fno-sized-deallocation or without C++14.
|
||||
// Check that we don't used sized deallocation without -fsized-deallocation and
|
||||
// C++14.
|
||||
// RUN: %clang_cc1 -std=c++11 %s -emit-llvm -triple x86_64-linux-gnu -o - | FileCheck %s --check-prefix=CHECK-UNSIZED
|
||||
// RUN: %clang_cc1 -std=c++14 %s -emit-llvm -triple x86_64-linux-gnu -fno-sized-deallocation -o - \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-UNSIZED
|
||||
// RUN: %clang_cc1 -std=c++14 %s -emit-llvm -triple x86_64-linux-gnu -o - | FileCheck %s --check-prefix=CHECK-UNSIZED
|
||||
|
||||
// CHECK-UNSIZED-NOT: _ZdlPvm
|
||||
// CHECK-UNSIZED-NOT: _ZdaPvm
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
// Check that delete exprs call aligned (de)allocation functions if
|
||||
// -faligned-allocation is passed in both C++11 and C++14.
|
||||
// RUN: %clang_cc1 -std=c++11 -fexceptions -fsized-deallocation -faligned-allocation %s -emit-llvm -triple x86_64-linux-gnu -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 -std=c++14 -fexceptions -faligned-allocation %s -emit-llvm -triple x86_64-linux-gnu -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 -std=c++1z -fexceptions %s -emit-llvm -triple x86_64-linux-gnu -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 -std=c++14 -fexceptions -fsized-deallocation -faligned-allocation %s -emit-llvm -triple x86_64-linux-gnu -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 -std=c++1z -fexceptions -fsized-deallocation %s -emit-llvm -triple x86_64-linux-gnu -o - | FileCheck %s
|
||||
|
||||
// RUN: %clang_cc1 -std=c++1z -fexceptions %s -emit-llvm -triple x86_64-windows-msvc -o - | FileCheck %s --check-prefix=CHECK-MS
|
||||
// RUN: %clang_cc1 -std=c++1z -fexceptions -fsized-deallocation %s -emit-llvm -triple x86_64-windows-msvc -o - | FileCheck %s --check-prefix=CHECK-MS
|
||||
|
||||
// Check that we don't used aligned (de)allocation without -faligned-allocation or C++1z.
|
||||
// RUN: %clang_cc1 -std=c++14 -DUNALIGNED -fexceptions %s -emit-llvm -triple x86_64-linux-gnu -o - | FileCheck %s --check-prefix=CHECK-UNALIGNED
|
||||
|
||||
@@ -108,10 +108,10 @@ struct J {
|
||||
// CHECK-MSABI-LABEL: define {{.*}}@"?j@@
|
||||
J *j() {
|
||||
// CHECK-ITANIUM: invoke {{.*}}@_ZN1JC1Ev(
|
||||
// CHECK-ITANIUM: call {{.*}}@_ZdlPvm(
|
||||
// CHECK-ITANIUM: call {{.*}}@_ZdlPv(
|
||||
// CHECK-NOT: }
|
||||
// CHECK-MSABI: invoke {{.*}}@"??0J@@Q{{AE|EAA}}@XZ"(
|
||||
// CHECK-MSABI: call {{.*}}@"??3@YAXP{{E?}}AX{{I|_K}}@Z"(
|
||||
// CHECK-MSABI: call {{.*}}@"??3@YAXP{{E?}}AX@Z"(
|
||||
return new J;
|
||||
// CHECK: }
|
||||
}
|
||||
|
||||
@@ -43,9 +43,7 @@ namespace test2 {
|
||||
// CHECK-NEXT: br i1 [[T1]],
|
||||
// CHECK: [[T3:%.*]] = getelementptr inbounds i8, ptr [[T0]], i32 -4
|
||||
// CHECK-NEXT: [[T5:%.*]] = load i32, ptr [[T3]]
|
||||
// CHECK-NEXT: [[T6:%.*]] = mul i32 4, [[T5]]
|
||||
// CHECK-NEXT: [[T7:%.*]] = add i32 [[T6]], 4
|
||||
// CHECK-NEXT: call void @_ZdaPvj(ptr noundef [[T3]], i32 noundef [[T7]])
|
||||
// CHECK-NEXT: call void @_ZdaPv(ptr noundef [[T3]])
|
||||
// CHECK-NEXT: br label
|
||||
::delete[] p;
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ void t3(S *s) {
|
||||
// CHECK: icmp {{.*}} null
|
||||
// CHECK: br i1
|
||||
|
||||
// CHECK: call void @_ZdlPvm
|
||||
// CHECK: call void @_ZdlPv
|
||||
|
||||
// Check the delete is inside the 'if !null' check unless we're optimizing
|
||||
// for size. FIXME: We could omit the branch entirely in this case.
|
||||
@@ -35,7 +35,7 @@ struct T {
|
||||
void t4(T *t) {
|
||||
// CHECK: call void @_ZN1TD1Ev
|
||||
// CHECK-SIZE-NEXT: br
|
||||
// CHECK: call void @_ZdlPvm
|
||||
// CHECK: call void @_ZdlPv
|
||||
delete t;
|
||||
}
|
||||
|
||||
@@ -93,16 +93,14 @@ namespace test1 {
|
||||
// CHECK-NEXT: call void @_ZN5test11AD1Ev(ptr {{[^,]*}} [[CUR]])
|
||||
// CHECK-NEXT: [[ISDONE:%.*]] = icmp eq ptr [[CUR]], [[BEGIN]]
|
||||
// CHECK-NEXT: br i1 [[ISDONE]]
|
||||
// CHECK: [[MUL:%.*]] = mul i64 4, [[COUNT]]
|
||||
// CHECK-NEXT: [[SIZE:%.*]] = add i64 [[MUL]], 8
|
||||
// CHECK-NEXT: call void @_ZdaPvm(ptr noundef [[ALLOC]], i64 noundef [[SIZE]])
|
||||
// CHECK: call void @_ZdaPv(ptr noundef [[ALLOC]])
|
||||
}
|
||||
}
|
||||
|
||||
namespace test2 {
|
||||
// CHECK-LABEL: define{{.*}} void @_ZN5test21fEPb
|
||||
void f(bool *b) {
|
||||
// CHECK: call void @_ZdlPvm(ptr{{.*}}i64
|
||||
// CHECK: call void @_ZdlPv(ptr
|
||||
delete b;
|
||||
// CHECK: call void @_ZdaPv(ptr
|
||||
delete [] b;
|
||||
@@ -139,7 +137,7 @@ namespace test4 {
|
||||
// CHECK-NEXT: [[DTOR:%.*]] = load ptr, ptr [[T0]]
|
||||
// CHECK-NEXT: call void [[DTOR]](ptr {{[^,]*}} [[OBJ:%.*]])
|
||||
// Call the global operator delete.
|
||||
// CHECK-NEXT: call void @_ZdlPvm(ptr noundef [[ALLOCATED]], i64 noundef 8) [[NUW:#[0-9]+]]
|
||||
// CHECK-NEXT: call void @_ZdlPv(ptr noundef [[ALLOCATED]]) [[NUW:#[0-9]+]]
|
||||
::delete xp;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -205,7 +205,7 @@ USEVAR(VarTmpl<ExplicitSpec_Imported>)
|
||||
// Functions
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// GNU-DAG: declare dso_local void @_ZdlPv{{j|y}}(ptr, i{{32|64}})
|
||||
// GNU-DAG: declare dso_local void @_ZdlPv(ptr)
|
||||
|
||||
// Import function declaration.
|
||||
// MSC-DAG: declare dllimport void @"?decl@@YAXXZ"()
|
||||
@@ -358,7 +358,7 @@ __declspec(dllimport) void operator delete(void*);
|
||||
__declspec(dllimport) inline int *ReferencingImportedNew() { return new int[2]; }
|
||||
// MO1-DAG: define available_externally dllimport ptr @"?ReferencingImportedNew@@YAPAHXZ"
|
||||
__declspec(dllimport) inline int *ReferencingImportedDelete() { delete (int*)nullptr; }
|
||||
// MO1-DAG: declare dllimport ptr @"?ReferencingImportedDelete@@YAPAHXZ"
|
||||
// MO1-DAG: define available_externally dllimport ptr @"?ReferencingImportedDelete@@YAPAHXZ"
|
||||
USE(ReferencingImportedNew)
|
||||
USE(ReferencingImportedDelete)
|
||||
struct ClassWithDtor { ~ClassWithDtor() {} };
|
||||
|
||||
@@ -15,7 +15,7 @@ void t1() {
|
||||
}
|
||||
|
||||
// CHECK: declare noundef nonnull ptr @_Znwm(i64 noundef) [[ATTR_NOBUILTIN:#[^ ]*]]
|
||||
// CHECK: declare void @_ZdlPvm(ptr noundef, i64 noundef) [[ATTR_NOBUILTIN_NOUNWIND:#[^ ]*]]
|
||||
// CHECK: declare void @_ZdlPv(ptr noundef) [[ATTR_NOBUILTIN_NOUNWIND:#[^ ]*]]
|
||||
// CHECK: declare noundef nonnull ptr @_Znam(i64 noundef) [[ATTR_NOBUILTIN]]
|
||||
// CHECK: declare void @_ZdaPv(ptr noundef) [[ATTR_NOBUILTIN_NOUNWIND]]
|
||||
|
||||
@@ -192,7 +192,7 @@ void f() {
|
||||
// CHECK: store i64 200
|
||||
delete[] new (nothrow) Alloc[10][20];
|
||||
// CHECK: call noalias noundef nonnull ptr @_Znwm
|
||||
// CHECK: call void @_ZdlPvm(ptr noundef {{%.*}}, i64 noundef 1)
|
||||
// CHECK: call void @_ZdlPv(ptr
|
||||
delete new bool;
|
||||
// CHECK: ret void
|
||||
}
|
||||
@@ -317,7 +317,7 @@ namespace N3664 {
|
||||
void f() {
|
||||
// CHECK: call noalias noundef nonnull ptr @_Znwm(i64 noundef 4) [[ATTR_BUILTIN_NEW:#[^ ]*]]
|
||||
int *p = new int; // expected-note {{allocated with 'new' here}}
|
||||
// CHECK: call void @_ZdlPvm({{.*}}) [[ATTR_BUILTIN_DELETE:#[^ ]*]]
|
||||
// CHECK: call void @_ZdlPv({{.*}}) [[ATTR_BUILTIN_DELETE:#[^ ]*]]
|
||||
delete p;
|
||||
|
||||
// CHECK: call noalias noundef nonnull ptr @_Znam(i64 noundef 12) [[ATTR_BUILTIN_NEW]]
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
// Tests that the combination of -fcoro-aligned-allocation and -fsized-deallocation works well.
|
||||
// Test the compiler will chose sized deallocation correctly.
|
||||
// This is only enabled with `-fsized-deallocation` which is off by default.
|
||||
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -std=c++20 \
|
||||
// RUN: -fcoro-aligned-allocation -S -emit-llvm %s -o - -disable-llvm-passes \
|
||||
// RUN: -fsized-deallocation \
|
||||
// RUN: | FileCheck %s
|
||||
|
||||
#include "Inputs/coroutine.h"
|
||||
|
||||
@@ -26,9 +26,8 @@ struct task {
|
||||
// CHECK: %[[aligned_new:.+]] = call{{.*}}@_ZnwmSt11align_val_t({{.*}}%[[coro_size]],{{.*}}%[[coro_align]])
|
||||
|
||||
// CHECK: coro.free:
|
||||
// CHECK: %[[coro_size_for_free:.+]] = call{{.*}}@llvm.coro.size
|
||||
// CHECK: %[[coro_align_for_free:.+]] = call{{.*}}@llvm.coro.align
|
||||
// CHECK: call void @_ZdlPvmSt11align_val_t({{.*}}%[[coro_size_for_free]],{{.*}}%[[coro_align_for_free]])
|
||||
// CHECK: call void @_ZdlPvSt11align_val_t({{.*}}[[coro_align_for_free]]
|
||||
|
||||
task f() {
|
||||
co_return 43;
|
||||
@@ -59,9 +58,8 @@ void *operator new(std::size_t, std::align_val_t, std::nothrow_t) noexcept;
|
||||
// CHECK: %[[aligned_new:.+]] = call{{.*}}@_ZnwmSt11align_val_tSt9nothrow_t({{.*}}%[[coro_size]],{{.*}}%[[coro_align]])
|
||||
|
||||
// CHECK: coro.free:
|
||||
// CHECK: %[[coro_size_for_free:.+]] = call{{.*}}@llvm.coro.size
|
||||
// CHECK: %[[coro_align_for_free:.+]] = call{{.*}}@llvm.coro.align
|
||||
// CHECK: call void @_ZdlPvmSt11align_val_t({{.*}}%[[coro_size_for_free]],{{.*}}%[[coro_align_for_free]])
|
||||
// CHECK: call void @_ZdlPvSt11align_val_t({{.*}}[[coro_align_for_free]]
|
||||
|
||||
task2 f2() {
|
||||
co_return 43;
|
||||
|
||||
@@ -70,8 +70,7 @@ extern "C" void f0(global_new_delete_tag) {
|
||||
// CHECK: br i1 %[[NeedDealloc]], label %[[FreeBB:.+]], label %[[Afterwards:.+]]
|
||||
|
||||
// CHECK: [[FreeBB]]:
|
||||
// CHECK: %[[SIZE:.+]] = call i64 @llvm.coro.size.i64()
|
||||
// CHECK: call void @_ZdlPvm(ptr noundef %[[MEM]], i64 noundef %[[SIZE]])
|
||||
// CHECK: call void @_ZdlPv(ptr noundef %[[MEM]])
|
||||
// CHECK: br label %[[Afterwards]]
|
||||
|
||||
// CHECK: [[Afterwards]]:
|
||||
@@ -100,8 +99,7 @@ extern "C" void f1(promise_new_tag ) {
|
||||
|
||||
// CHECK: %[[FRAME:.+]] = call ptr @llvm.coro.begin(
|
||||
// CHECK: %[[MEM:.+]] = call ptr @llvm.coro.free(token %[[ID]], ptr %[[FRAME]])
|
||||
// CHECK: %[[SIZE:.+]] = call i64 @llvm.coro.size.i64()
|
||||
// CHECK: call void @_ZdlPvm(ptr noundef %[[MEM]], i64 noundef %[[SIZE]])
|
||||
// CHECK: call void @_ZdlPv(ptr noundef %[[MEM]])
|
||||
co_return;
|
||||
}
|
||||
|
||||
|
||||
@@ -84,13 +84,11 @@ void f() {
|
||||
// CHECK: [[Cleanup]]:
|
||||
// CHECK: call void @_ZNSt16coroutine_traitsIJvEE12promise_typeD1Ev(
|
||||
// CHECK: %[[Mem0:.+]] = call ptr @llvm.coro.free(
|
||||
// CHECK: %[[SIZE:.+]] = call i64 @llvm.coro.size.i64()
|
||||
// CHECK: call void @_ZdlPvm(ptr noundef %[[Mem0]], i64 noundef %[[SIZE]])
|
||||
// CHECK: call void @_ZdlPv(ptr noundef %[[Mem0]]
|
||||
|
||||
// CHECK: [[Dealloc]]:
|
||||
// THROWEND: %[[Mem:.+]] = call ptr @llvm.coro.free(
|
||||
// THROWEND: %[[SIZE:.+]] = call i64 @llvm.coro.size.i64()
|
||||
// THROWEND: call void @_ZdlPvm(ptr noundef %[[Mem]], i64 noundef %[[SIZE]])
|
||||
// THROWEND: call void @_ZdlPv(ptr noundef %[[Mem]])
|
||||
|
||||
co_return;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -std=c++20 \
|
||||
// RUN: -S -emit-llvm %s -o - -disable-llvm-passes \
|
||||
// RUN: -fsized-deallocation \
|
||||
// RUN: | FileCheck %s
|
||||
|
||||
#include "Inputs/coroutine.h"
|
||||
@@ -20,6 +21,7 @@ struct task {
|
||||
};
|
||||
|
||||
// Test the compiler will chose sized deallocation correctly.
|
||||
// This is only enabled with `-fsized-deallocation` which is off by default.
|
||||
void operator delete(void *ptr, std::size_t size) noexcept;
|
||||
|
||||
// CHECK: define{{.*}}@_Z1fv
|
||||
|
||||
@@ -51,8 +51,7 @@ int f() {
|
||||
|
||||
// CHECK: call void @_ZNSt16coroutine_traitsIiJEE12promise_typeD1Ev(
|
||||
// CHECK: %[[Mem:.+]] = call ptr @llvm.coro.free(
|
||||
// CHECK: %[[SIZE:.+]] = call i64 @llvm.coro.size.i64()
|
||||
// CHECK: call void @_ZdlPvm(ptr noundef %[[Mem]], i64 noundef %[[SIZE]])
|
||||
// CHECK: call void @_ZdlPv(ptr noundef %[[Mem]])
|
||||
|
||||
// Initialize retval from Gro and destroy Gro
|
||||
// Note this also tests delaying initialization when Gro and function return
|
||||
|
||||
@@ -111,15 +111,12 @@ Task<void> Bar() { co_await Baz(); }
|
||||
|
||||
// CHECK: _Z3Quxv.destroy:{{.*}}
|
||||
// CHECK-NEXT: #
|
||||
// CHECK-NEXT: movl $40, %esi
|
||||
// CHECK-NEXT: jmp _ZdlPvm@PLT
|
||||
// CHECK-NEXT: jmp _ZdlPv
|
||||
|
||||
// CHECK: _Z3Bazv.destroy:{{.*}}
|
||||
// CHECK-NEXT: #
|
||||
// CHECK-NEXT: movl $80, %esi
|
||||
// CHECK-NEXT: jmp _ZdlPvm
|
||||
// CHECK-NEXT: jmp _ZdlPv
|
||||
|
||||
// CHECK: _Z3Barv.destroy:{{.*}}
|
||||
// CHECK-NEXT: #
|
||||
// CHECK-NEXT: movl $120, %esi
|
||||
// CHECK-NEXT: jmp _ZdlPvm
|
||||
// CHECK-NEXT: jmp _ZdlPv
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
// RUN: %clang_cc1 -std=c++98 -fcxx-exceptions -verify %s
|
||||
// RUN: %clang_cc1 -std=c++11 -fcxx-exceptions -verify %s
|
||||
// RUN: %clang_cc1 -std=c++14 -fcxx-exceptions -verify %s
|
||||
// RUN: %clang_cc1 -std=c++17 -fcxx-exceptions -verify %s
|
||||
// RUN: %clang_cc1 -std=c++20 -fcxx-exceptions -verify %s
|
||||
// RUN: %clang_cc1 -std=c++23 -fcxx-exceptions -verify %s
|
||||
// RUN: %clang_cc1 -std=c++2c -fcxx-exceptions -verify %s
|
||||
// RUN: %clang_cc1 -std=c++14 -fcxx-exceptions -fsized-deallocation -verify %s
|
||||
// RUN: %clang_cc1 -std=c++17 -fcxx-exceptions -fsized-deallocation -verify %s
|
||||
// RUN: %clang_cc1 -std=c++20 -fcxx-exceptions -fsized-deallocation -verify %s
|
||||
// RUN: %clang_cc1 -std=c++23 -fcxx-exceptions -fsized-deallocation -verify %s
|
||||
// RUN: %clang_cc1 -std=c++2c -fcxx-exceptions -fsized-deallocation -verify %s
|
||||
|
||||
//
|
||||
// RUN: %clang_cc1 -std=c++17 -fcxx-exceptions -frelaxed-template-template-args -DRELAXED_TEMPLATE_TEMPLATE_ARGS=1 -verify %s
|
||||
// RUN: %clang_cc1 -std=c++17 -fcxx-exceptions -DCONCEPTS_TS=1 -verify %s
|
||||
// RUN: %clang_cc1 -std=c++14 -fno-rtti -fno-threadsafe-statics -verify %s -DNO_EXCEPTIONS -DNO_RTTI -DNO_THREADSAFE_STATICS
|
||||
// RUN: %clang_cc1 -std=c++14 -fchar8_t -DNO_EXCEPTIONS -DCHAR8_T -verify %s
|
||||
// RUN: %clang_cc1 -std=c++2a -fno-char8_t -DNO_EXCEPTIONS -DNO_CHAR8_T -verify %s
|
||||
// RUN: %clang_cc1 -std=c++17 -fcxx-exceptions -fsized-deallocation -frelaxed-template-template-args -DRELAXED_TEMPLATE_TEMPLATE_ARGS=1 -verify %s
|
||||
// RUN: %clang_cc1 -std=c++17 -fcxx-exceptions -fsized-deallocation -DCONCEPTS_TS=1 -verify %s
|
||||
// RUN: %clang_cc1 -std=c++14 -fno-rtti -fno-threadsafe-statics -verify %s -DNO_EXCEPTIONS -DNO_RTTI -DNO_THREADSAFE_STATICS -fsized-deallocation
|
||||
// RUN: %clang_cc1 -std=c++14 -fchar8_t -DNO_EXCEPTIONS -DCHAR8_T -verify -fsized-deallocation %s
|
||||
// RUN: %clang_cc1 -std=c++2a -fno-char8_t -DNO_EXCEPTIONS -DNO_CHAR8_T -verify -fsized-deallocation %s
|
||||
|
||||
// expected-no-diagnostics
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
// No PCH:
|
||||
// RUN: %clang_cc1 -pedantic -std=c++1z -include %s -verify %s
|
||||
// RUN: %clang_cc1 -pedantic -fsized-deallocation -std=c++1z -include %s -verify %s
|
||||
//
|
||||
// With PCH:
|
||||
// RUN: %clang_cc1 -pedantic -std=c++1z -emit-pch %s -o %t
|
||||
// RUN: %clang_cc1 -pedantic -std=c++1z -include-pch %t -verify %s
|
||||
// RUN: %clang_cc1 -pedantic -fsized-deallocation -std=c++1z -emit-pch %s -o %t
|
||||
// RUN: %clang_cc1 -pedantic -fsized-deallocation -std=c++1z -include-pch %t -verify %s
|
||||
|
||||
// RUN: %clang_cc1 -pedantic -std=c++1z -emit-pch -fpch-instantiate-templates %s -o %t
|
||||
// RUN: %clang_cc1 -pedantic -std=c++1z -include-pch %t -verify %s
|
||||
// RUN: %clang_cc1 -pedantic -fsized-deallocation -std=c++1z -emit-pch -fpch-instantiate-templates %s -o %t
|
||||
// RUN: %clang_cc1 -pedantic -fsized-deallocation -std=c++1z -include-pch %t -verify %s
|
||||
|
||||
// expected-no-diagnostics
|
||||
|
||||
|
||||
@@ -571,17 +571,11 @@ class PR34109_class {
|
||||
virtual ~PR34109_class() {}
|
||||
};
|
||||
|
||||
#if !defined(__cpp_sized_deallocation)
|
||||
void operator delete(void *) throw();
|
||||
// expected-note@-1 {{previous declaration is here}}
|
||||
__declspec(dllexport) void operator delete(void *) throw();
|
||||
// expected-error@-1 {{redeclaration of 'operator delete' cannot add 'dllexport' attribute}}
|
||||
#else
|
||||
void operator delete(void *, unsigned int) throw();
|
||||
// expected-note@-1 {{previous declaration is here}}
|
||||
__declspec(dllexport) void operator delete(void *, unsigned int) throw();
|
||||
// expected-error@-1 {{redeclaration of 'operator delete' cannot add 'dllexport' attribute}}
|
||||
#endif
|
||||
|
||||
void PR34109(int* a) {
|
||||
delete a;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %clang_cc1 -std=c++1z -fno-sized-deallocation -fsyntax-only -verify %s
|
||||
// RUN: %clang_cc1 -std=c++1z -fsyntax-only -verify %s
|
||||
// RUN: %clang_cc1 -std=c++03 -fsyntax-only -verify %s
|
||||
// RUN: %clang_cc1 -std=c++03 -faligned-allocation -fsyntax-only -verify %s
|
||||
// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %clang_cc1 -std=c++1y -verify %s -fexceptions -fcxx-exceptions
|
||||
// RUN: %clang_cc1 -std=c++1y -verify %s -fsized-deallocation -fexceptions -fcxx-exceptions
|
||||
|
||||
using size_t = decltype(sizeof(0));
|
||||
void operator delete(void *, size_t) noexcept; // expected-note {{'operator delete' declared here}}
|
||||
|
||||
@@ -75,7 +75,7 @@ void testOveraligned() {
|
||||
// expected-error-re@-22 {{aligned deallocation function of type 'void (void *, enum std::align_val_t) noexcept' is {{only|not}} available on}}
|
||||
// expected-note@-23 {{if you supply your own aligned allocation functions}}
|
||||
|
||||
// expected-error-re@-24 {{aligned deallocation function of type 'void (void *, std::size_t, std::align_val_t) noexcept' is {{only|not}} available on}}
|
||||
// expected-error-re@-24 {{aligned deallocation function of type 'void (void *, enum std::align_val_t) noexcept' is {{only|not}} available on}}
|
||||
// expected-note@-25 {{if you supply your own aligned allocation functions}}
|
||||
|
||||
// expected-error-re@-26 {{aligned allocation function of type 'void *(std::size_t, std::align_val_t, const std::nothrow_t &) noexcept' is {{only|not}} available on}}
|
||||
@@ -143,19 +143,19 @@ OveralignedS2::~OveralignedS2() {}
|
||||
// expected-no-diagnostics
|
||||
#else
|
||||
#if defined(IOS)
|
||||
// expected-error@-6 {{aligned deallocation function of type 'void (void *, std::size_t, std::align_val_t) noexcept' is only available on iOS 11 or newer}}}
|
||||
// expected-error@-6 {{aligned deallocation function of type 'void (void *, enum std::align_val_t) noexcept' is only available on iOS 11 or newer}}}
|
||||
// expected-note@-7 {{if you supply your own aligned allocation functions}}
|
||||
#elif defined(TVOS)
|
||||
// expected-error@-9 {{aligned deallocation function of type 'void (void *, std::size_t, std::align_val_t) noexcept' is only available on tvOS 11 or newer}}}
|
||||
// expected-error@-9 {{aligned deallocation function of type 'void (void *, enum std::align_val_t) noexcept' is only available on tvOS 11 or newer}}}
|
||||
// expected-note@-10 {{if you supply your own aligned allocation functions}}
|
||||
#elif defined(WATCHOS)
|
||||
// expected-error@-12 {{aligned deallocation function of type 'void (void *, std::size_t, std::align_val_t) noexcept' is only available on watchOS 4 or newer}}}
|
||||
// expected-error@-12 {{aligned deallocation function of type 'void (void *, enum std::align_val_t) noexcept' is only available on watchOS 4 or newer}}}
|
||||
// expected-note@-13 {{if you supply your own aligned allocation functions}}
|
||||
#elif defined(MACOS)
|
||||
// expected-error@-15 {{aligned deallocation function of type 'void (void *, std::size_t, std::align_val_t) noexcept' is only available on macOS 10.13 or newer}}}
|
||||
// expected-error@-15 {{aligned deallocation function of type 'void (void *, enum std::align_val_t) noexcept' is only available on macOS 10.13 or newer}}}
|
||||
// expected-note@-16 {{if you supply your own aligned allocation functions}}
|
||||
#elif defined(ZOS)
|
||||
// expected-error@-18 {{aligned deallocation function of type 'void (void *, std::size_t, std::align_val_t) noexcept' is not available on z/OS}}}
|
||||
// expected-error@-18 {{aligned deallocation function of type 'void (void *, enum std::align_val_t) noexcept' is not available on z/OS}}}
|
||||
// expected-note@-19 {{if you supply your own aligned allocation functions}}
|
||||
#endif
|
||||
#endif
|
||||
@@ -209,9 +209,6 @@ void *operator new(std::size_t __sz, std::align_val_t) {
|
||||
void operator delete(void *p, std::align_val_t) {
|
||||
}
|
||||
|
||||
void operator delete(void *p, std::size_t __sz, std::align_val_t) {
|
||||
}
|
||||
|
||||
void testOveraligned2() {
|
||||
auto p = new ((std::align_val_t)8) OveralignedS;
|
||||
delete p;
|
||||
|
||||
@@ -11,65 +11,6 @@ add_clang_tool(clang-repl
|
||||
ClangRepl.cpp
|
||||
)
|
||||
|
||||
if(MSVC)
|
||||
set_target_properties(clang-repl PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS 1)
|
||||
|
||||
# RTTI/C++ symbols
|
||||
set(clang_repl_exports ${clang_repl_exports} ??_7type_info@@6B@
|
||||
?__type_info_root_node@@3U__type_info_node@@A
|
||||
?nothrow@std@@3Unothrow_t@1@B
|
||||
)
|
||||
|
||||
# Compiler added symbols for static variables. NOT for VStudio < 2015
|
||||
set(clang_repl_exports ${clang_repl_exports} _Init_thread_abort _Init_thread_epoch
|
||||
_Init_thread_footer _Init_thread_header _tls_index
|
||||
)
|
||||
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
# new/delete variants needed when linking to static msvc runtime (esp. Debug)
|
||||
set(clang_repl_exports ${clang_repl_exports}
|
||||
??2@YAPEAX_K@Z
|
||||
??3@YAXPEAX@Z
|
||||
??_U@YAPEAX_K@Z
|
||||
??_V@YAXPEAX@Z
|
||||
??3@YAXPEAX_K@Z
|
||||
??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@H@Z
|
||||
??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@M@Z
|
||||
??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z
|
||||
??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEBX@Z
|
||||
??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z
|
||||
??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z
|
||||
??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z
|
||||
?_Facet_Register@std@@YAXPEAV_Facet_base@1@@Z
|
||||
)
|
||||
else()
|
||||
set(clang_repl_exports ${clang_repl_exports}
|
||||
??2@YAPAXI@Z
|
||||
??3@YAXPAX@Z
|
||||
??3@YAXPAXI@Z
|
||||
??_U@YAPAXI@Z
|
||||
??_V@YAXPAX@Z
|
||||
??_V@YAXPAXI@Z
|
||||
??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z
|
||||
??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@M@Z
|
||||
??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@N@Z
|
||||
??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@PBX@Z
|
||||
??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z
|
||||
??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@D@Z
|
||||
??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z
|
||||
?_Facet_Register@std@@YAXPAV_Facet_base@1@@Z
|
||||
)
|
||||
endif()
|
||||
|
||||
# List to '/EXPORT:sym0 /EXPORT:sym1 /EXPORT:sym2 ...'
|
||||
foreach(sym ${clang_repl_exports})
|
||||
set(clang_repl_link_str "${clang_repl_link_str} /EXPORT:${sym}")
|
||||
endforeach(sym ${clang_repl_exports})
|
||||
|
||||
set_property(TARGET clang-repl APPEND_STRING PROPERTY LINK_FLAGS ${clang_repl_link_str})
|
||||
|
||||
endif(MSVC)
|
||||
|
||||
clang_target_link_libraries(clang-repl PRIVATE
|
||||
clangAST
|
||||
clangBasic
|
||||
|
||||
@@ -29,62 +29,3 @@ if(NOT WIN32)
|
||||
endif()
|
||||
|
||||
export_executable_symbols(ClangReplInterpreterTests)
|
||||
|
||||
if(MSVC)
|
||||
set_target_properties(ClangReplInterpreterTests PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS 1)
|
||||
|
||||
# RTTI/C++ symbols
|
||||
set(ClangReplInterpreterTests_exports ${ClangReplInterpreterTests_exports} ??_7type_info@@6B@
|
||||
?__type_info_root_node@@3U__type_info_node@@A
|
||||
?nothrow@std@@3Unothrow_t@1@B
|
||||
)
|
||||
|
||||
# Compiler added symbols for static variables. NOT for VStudio < 2015
|
||||
set(ClangReplInterpreterTests_exports ${ClangReplInterpreterTests_exports} _Init_thread_abort _Init_thread_epoch
|
||||
_Init_thread_footer _Init_thread_header _tls_index
|
||||
)
|
||||
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
# new/delete variants needed when linking to static msvc runtime (esp. Debug)
|
||||
set(ClangReplInterpreterTests_exports ${ClangReplInterpreterTests_exports}
|
||||
??2@YAPEAX_K@Z
|
||||
??3@YAXPEAX@Z
|
||||
??_U@YAPEAX_K@Z
|
||||
??_V@YAXPEAX@Z
|
||||
??3@YAXPEAX_K@Z
|
||||
??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@H@Z
|
||||
??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@M@Z
|
||||
??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z
|
||||
??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEBX@Z
|
||||
??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z
|
||||
??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z
|
||||
??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z
|
||||
?_Facet_Register@std@@YAXPEAV_Facet_base@1@@Z
|
||||
)
|
||||
else()
|
||||
set(ClangReplInterpreterTests_exports ${ClangReplInterpreterTests_exports}
|
||||
??2@YAPAXI@Z
|
||||
??3@YAXPAX@Z
|
||||
??3@YAXPAXI@Z
|
||||
??_U@YAPAXI@Z
|
||||
??_V@YAXPAX@Z
|
||||
??_V@YAXPAXI@Z
|
||||
??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z
|
||||
??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@M@Z
|
||||
??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@N@Z
|
||||
??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@PBX@Z
|
||||
??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z
|
||||
??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@D@Z
|
||||
??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z
|
||||
?_Facet_Register@std@@YAXPAV_Facet_base@1@@Z
|
||||
)
|
||||
endif()
|
||||
|
||||
# List to '/EXPORT:sym0 /EXPORT:sym1 /EXPORT:sym2 ...'
|
||||
foreach(sym ${ClangReplInterpreterTests_exports})
|
||||
set(ClangReplInterpreterTests_link_str "${ClangReplInterpreterTests_link_str} /EXPORT:${sym}")
|
||||
endforeach(sym ${ClangReplInterpreterTests_exports})
|
||||
|
||||
set_property(TARGET ClangReplInterpreterTests APPEND_STRING PROPERTY LINK_FLAGS ${ClangReplInterpreterTests_link_str})
|
||||
|
||||
endif(MSVC)
|
||||
|
||||
@@ -76,7 +76,7 @@ TEST(CXXDeallocatorCall, SimpleDestructor) {
|
||||
}
|
||||
)",
|
||||
Diags));
|
||||
EXPECT_EQ(Diags, "test.CXXDeallocator: NumArgs: 2\n");
|
||||
EXPECT_EQ(Diags, "test.CXXDeallocator: NumArgs: 1\n");
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -1258,11 +1258,12 @@ code. This issue is expected to be rectified soon.
|
||||
</table>
|
||||
|
||||
<p>
|
||||
<span id="n3778">(7): The user must supply definitions of the sized deallocation
|
||||
functions, either by providing them explicitly or by using a C++ standard library
|
||||
that does. <code>libstdc++</code> added these functions in version 5.0, and
|
||||
<code>libc++</code> added them in version 3.7. The user can also use the
|
||||
<code>-fno-sized-deallocation</code> option to disable sized deallocation.
|
||||
<span id="n3778">(7): In Clang 3.7 and later, sized deallocation is only enabled
|
||||
if the user passes the <code>-fsized-deallocation</code> flag. The user must
|
||||
supply definitions of the sized deallocation functions, either by providing them
|
||||
explicitly or by using a C++ standard library that does. <code>libstdc++</code>
|
||||
added these functions in version 5.0, and <code>libc++</code> added them in
|
||||
version 3.7.
|
||||
</span>
|
||||
</p>
|
||||
</details>
|
||||
|
||||
@@ -21,9 +21,6 @@
|
||||
// GCC doesn't support the aligned-allocation flags.
|
||||
// XFAIL: gcc
|
||||
|
||||
// TODO(mordante) fix this test after updating clang in Docker
|
||||
// UNSUPPORTED: clang-15, clang-16, clang-17, clang-18, clang-19
|
||||
|
||||
// RUN: %{build} -faligned-allocation -fsized-deallocation
|
||||
// RUN: %{run}
|
||||
// RUN: %{build} -faligned-allocation -fno-sized-deallocation -DNO_SIZE
|
||||
|
||||
@@ -8,11 +8,11 @@
|
||||
|
||||
// test sized operator delete[] replacement.
|
||||
|
||||
// TODO(mordante) fix this test after updating clang in Docker
|
||||
// UNSUPPORTED: clang-15, clang-16, clang-17, clang-18, clang-19
|
||||
// UNSUPPORTED: sanitizer-new-delete, c++03, c++11
|
||||
// XFAIL: apple-clang
|
||||
// XFAIL: using-built-library-before-llvm-11
|
||||
|
||||
// NOTE: Clang does not enable sized-deallocation in C++14 and beyond by
|
||||
// default. It is only enabled when -fsized-deallocation is given.
|
||||
// XFAIL: clang, apple-clang
|
||||
|
||||
#include <new>
|
||||
#include <cstddef>
|
||||
|
||||
@@ -8,11 +8,11 @@
|
||||
|
||||
// test sized operator delete replacement.
|
||||
|
||||
// TODO(mordante) fix this test after updating clang in Docker
|
||||
// UNSUPPORTED: clang-15, clang-16, clang-17, clang-18, clang-19
|
||||
// UNSUPPORTED: sanitizer-new-delete, c++03, c++11
|
||||
// XFAIL: apple-clang
|
||||
// XFAIL: using-built-library-before-llvm-11
|
||||
|
||||
// NOTE: Clang does not enable sized-deallocation in C++14 and beyond by
|
||||
// default. It is only enabled when -fsized-deallocation is given.
|
||||
// XFAIL: clang, apple-clang
|
||||
|
||||
#include <new>
|
||||
#include <cstddef>
|
||||
|
||||
Reference in New Issue
Block a user