[libcxx-commits] [libcxx] a02f9a7 - Revert "[clang] Enable sized deallocation by default in C++14 onwards"
Aaron Ballman via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Aug 29 06:37:58 PDT 2023
Author: Aaron Ballman
Date: 2023-08-29T09:36:59-04:00
New Revision: a02f9a7756e5e4c76b422f9948d5dc3f56a1d139
URL: https://github.com/llvm/llvm-project/commit/a02f9a7756e5e4c76b422f9948d5dc3f56a1d139
DIFF: https://github.com/llvm/llvm-project/commit/a02f9a7756e5e4c76b422f9948d5dc3f56a1d139.diff
LOG: Revert "[clang] Enable sized deallocation by default in C++14 onwards"
This reverts commit 2916b125f686115deab2ba573dcaff3847566ab9.
Reverting due to failures on:
https://lab.llvm.org/buildbot/#/builders/216/builds/26407
https://lab.llvm.org/staging/#/builders/247/builds/5659
http://45.33.8.238/win/83485/step_7.txt
Added:
Modified:
clang-tools-extra/clangd/unittests/FindTargetTests.cpp
clang-tools-extra/test/clang-tidy/checkers/misc/new-delete-overloads.cpp
clang/docs/ReleaseNotes.rst
clang/include/clang/Driver/Options.td
clang/lib/Driver/ToolChains/Clang.cpp
clang/lib/Driver/ToolChains/Darwin.cpp
clang/lib/Driver/ToolChains/Darwin.h
clang/lib/Driver/ToolChains/ZOS.cpp
clang/test/AST/ast-dump-expr-json.cpp
clang/test/AST/ast-dump-expr.cpp
clang/test/AST/ast-dump-stmt-json.cpp
clang/test/Analysis/cxxnewexpr-callback.cpp
clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p2.cpp
clang/test/CXX/expr/expr.unary/expr.new/p14.cpp
clang/test/CodeGenCXX/cxx1y-sized-deallocation.cpp
clang/test/CodeGenCXX/cxx1z-aligned-allocation.cpp
clang/test/CodeGenCXX/cxx2a-destroying-delete.cpp
clang/test/CodeGenCXX/delete-two-arg.cpp
clang/test/CodeGenCXX/delete.cpp
clang/test/CodeGenCXX/dllimport.cpp
clang/test/CodeGenCXX/new.cpp
clang/test/CodeGenCoroutines/coro-aligned-alloc-2.cpp
clang/test/CodeGenCoroutines/coro-aligned-alloc.cpp
clang/test/CodeGenCoroutines/coro-alloc.cpp
clang/test/CodeGenCoroutines/coro-cleanup.cpp
clang/test/CodeGenCoroutines/coro-dealloc.cpp
clang/test/CodeGenCoroutines/coro-gro.cpp
clang/test/CodeGenCoroutines/pr56919.cpp
clang/test/Lexer/cxx-features.cpp
clang/test/PCH/cxx1z-aligned-alloc.cpp
clang/test/SemaCXX/MicrosoftExtensions.cpp
clang/test/SemaCXX/builtin-operator-new-delete.cpp
clang/test/SemaCXX/cxx1y-sized-deallocation.cpp
clang/test/SemaCXX/unavailable_aligned_allocation.cpp
clang/unittests/StaticAnalyzer/CallEventTest.cpp
clang/www/cxx_status.html
libcxx/test/libcxx/language.support/support.dynamic/libcpp_deallocate.sh.cpp
libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array14.pass.cpp
libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete14.pass.cpp
Removed:
clang/include/clang/Basic/SizedDeallocation.h
################################################################################
diff --git a/clang-tools-extra/clangd/unittests/FindTargetTests.cpp b/clang-tools-extra/clangd/unittests/FindTargetTests.cpp
index 56cf6da70965ba..19e80658de063c 100644
--- a/clang-tools-extra/clangd/unittests/FindTargetTests.cpp
+++ b/clang-tools-extra/clangd/unittests/FindTargetTests.cpp
@@ -812,9 +812,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) {
diff --git a/clang-tools-extra/test/clang-tidy/checkers/misc/new-delete-overloads.cpp b/clang-tools-extra/test/clang-tidy/checkers/misc/new-delete-overloads.cpp
index f86fe8a4c5b14f..78f021144b2e19 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/misc/new-delete-overloads.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/misc/new-delete-overloads.cpp
@@ -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;
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 58a22ec5cce17d..deb53303a21b44 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -59,10 +59,6 @@ sections with improvements to Clang's support for those languages.
C++ Language Changes
--------------------
-C++14 Feature Support
-^^^^^^^^^^^^^^^^^^^^^
-- Sized deallocation is enabled by default in C++14 onwards.
-
C++20 Feature Support
^^^^^^^^^^^^^^^^^^^^^
diff --git a/clang/include/clang/Basic/SizedDeallocation.h b/clang/include/clang/Basic/SizedDeallocation.h
deleted file mode 100644
index e1a353de3bdfba..00000000000000
--- a/clang/include/clang/Basic/SizedDeallocation.h
+++ /dev/null
@@ -1,44 +0,0 @@
-//===------- SizedDellocation.h - Sized Deallocation ------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file
-/// Defines a function that returns the minimum OS versions supporting
-/// C++14's sized deallocation functions.
-///
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_BASIC_SIZEDDEALLOCATION_H
-#define LLVM_CLANG_BASIC_SIZEDDEALLOCATION_H
-
-#include "llvm/Support/ErrorHandling.h"
-#include "llvm/Support/VersionTuple.h"
-#include "llvm/TargetParser/Triple.h"
-
-namespace clang {
-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);
- case llvm::Triple::ZOS:
- return llvm::VersionTuple(); // All z/OS versions have no support.
- }
-
- llvm_unreachable("Unexpected OS");
-}
-
-} // end namespace clang
-
-#endif // LLVM_CLANG_BASIC_SIZEDDEALLOCATION_H
diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td
index 072030a44f01de..a2a6cf0dcad3c0 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -564,7 +564,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">;
@@ -3137,10 +3136,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>,
+ LangOpts<"SizedDeallocation">, DefaultFalse,
PosFlag<SetTrue, [], [ClangOption, CC1Option],
"Enable C++14 sized global deallocation functions">,
- NegFlag<SetFalse>, BothFlags<[], [ClangOption, CC1Option]>>;
+ NegFlag<SetFalse>>;
defm aligned_allocation : BoolFOption<"aligned-allocation",
LangOpts<"AlignedAllocation">, Default<cpp17.KeyPath>,
PosFlag<SetTrue, [], [ClangOption], "Enable C++17 aligned allocation functions">,
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index 6610aabe27b3b7..4371dee538d917 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -6901,8 +6901,8 @@ 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.
+ // -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);
diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp
index b1ed813c929778..e45424a5f712a0 100644
--- a/clang/lib/Driver/ToolChains/Darwin.cpp
+++ b/clang/lib/Driver/ToolChains/Darwin.cpp
@@ -12,7 +12,6 @@
#include "CommonArgs.h"
#include "clang/Basic/AlignedAllocation.h"
#include "clang/Basic/ObjCRuntime.h"
-#include "clang/Basic/SizedDeallocation.h"
#include "clang/Config/config.h"
#include "clang/Driver/Compilation.h"
#include "clang/Driver/Driver.h"
@@ -2847,34 +2846,9 @@ bool Darwin::isAlignedAllocationUnavailable() const {
return TargetVersion < alignedAllocMinVersion(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: // 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,
@@ -2882,13 +2856,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
diff --git a/clang/lib/Driver/ToolChains/Darwin.h b/clang/lib/Driver/ToolChains/Darwin.h
index e3fe50741832a7..815449ae8f3792 100644
--- a/clang/lib/Driver/ToolChains/Darwin.h
+++ b/clang/lib/Driver/ToolChains/Darwin.h
@@ -499,10 +499,6 @@ class LLVM_LIBRARY_VISIBILITY Darwin : public MachO {
/// 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;
diff --git a/clang/lib/Driver/ToolChains/ZOS.cpp b/clang/lib/Driver/ToolChains/ZOS.cpp
index c74b7e9e6261a3..05548fbec68b63 100644
--- a/clang/lib/Driver/ToolChains/ZOS.cpp
+++ b/clang/lib/Driver/ToolChains/ZOS.cpp
@@ -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,
diff --git a/clang/test/AST/ast-dump-expr-json.cpp b/clang/test/AST/ast-dump-expr-json.cpp
index 5fda1d3dab9e23..eac0346d64319a 100644
--- a/clang/test/AST/ast-dump-expr-json.cpp
+++ b/clang/test/AST/ast-dump-expr-json.cpp
@@ -2338,7 +2338,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": [
diff --git a/clang/test/AST/ast-dump-expr.cpp b/clang/test/AST/ast-dump-expr.cpp
index ae9d19c4e04be7..1c07aa066462bb 100644
--- a/clang/test/AST/ast-dump-expr.cpp
+++ b/clang/test/AST/ast-dump-expr.cpp
@@ -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 *'
diff --git a/clang/test/AST/ast-dump-stmt-json.cpp b/clang/test/AST/ast-dump-stmt-json.cpp
index d2db74bf729bd1..8e42a2e276b46b 100644
--- a/clang/test/AST/ast-dump-stmt-json.cpp
+++ b/clang/test/AST/ast-dump-stmt-json.cpp
@@ -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": {
diff --git a/clang/test/Analysis/cxxnewexpr-callback.cpp b/clang/test/Analysis/cxxnewexpr-callback.cpp
index 7df58cfa9ca284..fe7a9fffad93db 100644
--- a/clang/test/Analysis/cxxnewexpr-callback.cpp
+++ b/clang/test/Analysis/cxxnewexpr-callback.cpp
@@ -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)
diff --git a/clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p2.cpp b/clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p2.cpp
index 706549f56c52f4..9e3210c6650f7b 100644
--- a/clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p2.cpp
+++ b/clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p2.cpp
@@ -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));
diff --git a/clang/test/CXX/expr/expr.unary/expr.new/p14.cpp b/clang/test/CXX/expr/expr.unary/expr.new/p14.cpp
index d0b24c8fe47b7c..6537cdcfeafa04 100644
--- a/clang/test/CXX/expr/expr.unary/expr.new/p14.cpp
+++ b/clang/test/CXX/expr/expr.unary/expr.new/p14.cpp
@@ -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 {}; }
diff --git a/clang/test/CodeGenCXX/cxx1y-sized-deallocation.cpp b/clang/test/CodeGenCXX/cxx1y-sized-deallocation.cpp
index 55913aff9c19b9..4e15657251525e 100644
--- a/clang/test/CodeGenCXX/cxx1y-sized-deallocation.cpp
+++ b/clang/test/CodeGenCXX/cxx1y-sized-deallocation.cpp
@@ -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
diff --git a/clang/test/CodeGenCXX/cxx1z-aligned-allocation.cpp b/clang/test/CodeGenCXX/cxx1z-aligned-allocation.cpp
index 8823bc64a4368b..ab2e4b3cdbbf9c 100644
--- a/clang/test/CodeGenCXX/cxx1z-aligned-allocation.cpp
+++ b/clang/test/CodeGenCXX/cxx1z-aligned-allocation.cpp
@@ -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
diff --git a/clang/test/CodeGenCXX/cxx2a-destroying-delete.cpp b/clang/test/CodeGenCXX/cxx2a-destroying-delete.cpp
index f6f4a2ff735cc4..20264b67353a97 100644
--- a/clang/test/CodeGenCXX/cxx2a-destroying-delete.cpp
+++ b/clang/test/CodeGenCXX/cxx2a-destroying-delete.cpp
@@ -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 at YAXP{{E?}}AX{{I|_K}}@Z"(
+ // CHECK-MSABI: call {{.*}}@"??3 at YAXP{{E?}}AX at Z"(
return new J;
// CHECK: }
}
diff --git a/clang/test/CodeGenCXX/delete-two-arg.cpp b/clang/test/CodeGenCXX/delete-two-arg.cpp
index a0dcd03bc5a92d..552634f430a80c 100644
--- a/clang/test/CodeGenCXX/delete-two-arg.cpp
+++ b/clang/test/CodeGenCXX/delete-two-arg.cpp
@@ -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;
}
diff --git a/clang/test/CodeGenCXX/delete.cpp b/clang/test/CodeGenCXX/delete.cpp
index d5b0dc67129102..1a418f48b65980 100644
--- a/clang/test/CodeGenCXX/delete.cpp
+++ b/clang/test/CodeGenCXX/delete.cpp
@@ -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;
}
}
diff --git a/clang/test/CodeGenCXX/dllimport.cpp b/clang/test/CodeGenCXX/dllimport.cpp
index 484866b45389f2..6fec2f2982d407 100644
--- a/clang/test/CodeGenCXX/dllimport.cpp
+++ b/clang/test/CodeGenCXX/dllimport.cpp
@@ -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() {} };
diff --git a/clang/test/CodeGenCXX/new.cpp b/clang/test/CodeGenCXX/new.cpp
index af225529c494e6..e278d9acfe9ee2 100644
--- a/clang/test/CodeGenCXX/new.cpp
+++ b/clang/test/CodeGenCXX/new.cpp
@@ -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]]
diff --git a/clang/test/CodeGenCoroutines/coro-aligned-alloc-2.cpp b/clang/test/CodeGenCoroutines/coro-aligned-alloc-2.cpp
index ecf991a2fb4940..a3ee964a22a10b 100644
--- a/clang/test/CodeGenCoroutines/coro-aligned-alloc-2.cpp
+++ b/clang/test/CodeGenCoroutines/coro-aligned-alloc-2.cpp
@@ -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"
diff --git a/clang/test/CodeGenCoroutines/coro-aligned-alloc.cpp b/clang/test/CodeGenCoroutines/coro-aligned-alloc.cpp
index b50d9f8f7674ac..d14c3d372ddb17 100644
--- a/clang/test/CodeGenCoroutines/coro-aligned-alloc.cpp
+++ b/clang/test/CodeGenCoroutines/coro-aligned-alloc.cpp
@@ -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;
diff --git a/clang/test/CodeGenCoroutines/coro-alloc.cpp b/clang/test/CodeGenCoroutines/coro-alloc.cpp
index 7b3be7e0b7f98d..d026a0d7df2275 100644
--- a/clang/test/CodeGenCoroutines/coro-alloc.cpp
+++ b/clang/test/CodeGenCoroutines/coro-alloc.cpp
@@ -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;
}
diff --git a/clang/test/CodeGenCoroutines/coro-cleanup.cpp b/clang/test/CodeGenCoroutines/coro-cleanup.cpp
index 2e5c7c90b1c309..e07876305dabf6 100644
--- a/clang/test/CodeGenCoroutines/coro-cleanup.cpp
+++ b/clang/test/CodeGenCoroutines/coro-cleanup.cpp
@@ -79,13 +79,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]]:
// 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]])
co_return;
}
diff --git a/clang/test/CodeGenCoroutines/coro-dealloc.cpp b/clang/test/CodeGenCoroutines/coro-dealloc.cpp
index 656c9cbd3ef21d..1f7d04b3689eb5 100644
--- a/clang/test/CodeGenCoroutines/coro-dealloc.cpp
+++ b/clang/test/CodeGenCoroutines/coro-dealloc.cpp
@@ -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
diff --git a/clang/test/CodeGenCoroutines/coro-gro.cpp b/clang/test/CodeGenCoroutines/coro-gro.cpp
index 955f5cebd4eef0..b48b769950ae87 100644
--- a/clang/test/CodeGenCoroutines/coro-gro.cpp
+++ b/clang/test/CodeGenCoroutines/coro-gro.cpp
@@ -50,8 +50,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
diff --git a/clang/test/CodeGenCoroutines/pr56919.cpp b/clang/test/CodeGenCoroutines/pr56919.cpp
index baa8c27ce6649b..c7de08ef72d7f7 100644
--- a/clang/test/CodeGenCoroutines/pr56919.cpp
+++ b/clang/test/CodeGenCoroutines/pr56919.cpp
@@ -111,15 +111,12 @@ Task<void> Bar() { co_await Baz(); }
// CHECK: _Z3Quxv.destroy:{{.*}}
// CHECK-NEXT: #
-// CHECK-NEXT: movl $40, %esi
-// CHECK-NEXT: jmp _ZdlPvm at 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
diff --git a/clang/test/Lexer/cxx-features.cpp b/clang/test/Lexer/cxx-features.cpp
index 56d10c9fab922b..6120b299039e5e 100644
--- a/clang/test/Lexer/cxx-features.cpp
+++ b/clang/test/Lexer/cxx-features.cpp
@@ -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
diff --git a/clang/test/PCH/cxx1z-aligned-alloc.cpp b/clang/test/PCH/cxx1z-aligned-alloc.cpp
index cccd6285978455..c1becbde3bf2ce 100644
--- a/clang/test/PCH/cxx1z-aligned-alloc.cpp
+++ b/clang/test/PCH/cxx1z-aligned-alloc.cpp
@@ -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
diff --git a/clang/test/SemaCXX/MicrosoftExtensions.cpp b/clang/test/SemaCXX/MicrosoftExtensions.cpp
index a99aa0afbf66e5..960030d44f0c15 100644
--- a/clang/test/SemaCXX/MicrosoftExtensions.cpp
+++ b/clang/test/SemaCXX/MicrosoftExtensions.cpp
@@ -571,17 +571,11 @@ class PR34109_class {
virtual ~PR34109_class() {}
};
-#if !defined(__cpp_sized_deallocation)
void operator delete(void *) throw();
// expected-note at -1 {{previous declaration is here}}
__declspec(dllexport) void operator delete(void *) throw();
// expected-error at -1 {{redeclaration of 'operator delete' cannot add 'dllexport' attribute}}
-#else
-void operator delete(void *, unsigned int) throw();
-// expected-note at -1 {{previous declaration is here}}
-__declspec(dllexport) void operator delete(void *, unsigned int) throw();
-// expected-error at -1 {{redeclaration of 'operator delete' cannot add 'dllexport' attribute}}
-#endif
+
void PR34109(int* a) {
delete a;
}
diff --git a/clang/test/SemaCXX/builtin-operator-new-delete.cpp b/clang/test/SemaCXX/builtin-operator-new-delete.cpp
index db15616803e373..6fcff92dc0952a 100644
--- a/clang/test/SemaCXX/builtin-operator-new-delete.cpp
+++ b/clang/test/SemaCXX/builtin-operator-new-delete.cpp
@@ -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
diff --git a/clang/test/SemaCXX/cxx1y-sized-deallocation.cpp b/clang/test/SemaCXX/cxx1y-sized-deallocation.cpp
index 462f1725bb1c26..3ec65a6a64d1cc 100644
--- a/clang/test/SemaCXX/cxx1y-sized-deallocation.cpp
+++ b/clang/test/SemaCXX/cxx1y-sized-deallocation.cpp
@@ -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}}
diff --git a/clang/test/SemaCXX/unavailable_aligned_allocation.cpp b/clang/test/SemaCXX/unavailable_aligned_allocation.cpp
index 45fdec606ad1b3..be593eafe11d6a 100644
--- a/clang/test/SemaCXX/unavailable_aligned_allocation.cpp
+++ b/clang/test/SemaCXX/unavailable_aligned_allocation.cpp
@@ -75,7 +75,7 @@ void testOveraligned() {
// expected-error-re at -22 {{aligned deallocation function of type 'void (void *, enum std::align_val_t) noexcept' is {{only|not}} available on}}
// expected-note at -23 {{if you supply your own aligned allocation functions}}
-// expected-error-re at -24 {{aligned deallocation function of type 'void (void *, std::size_t, std::align_val_t) noexcept' is {{only|not}} available on}}
+// expected-error-re at -24 {{aligned deallocation function of type 'void (void *, enum std::align_val_t) noexcept' is {{only|not}} available on}}
// expected-note at -25 {{if you supply your own aligned allocation functions}}
// expected-error-re at -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 at -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 at -6 {{aligned deallocation function of type 'void (void *, enum std::align_val_t) noexcept' is only available on iOS 11 or newer}}}
// expected-note at -7 {{if you supply your own aligned allocation functions}}
#elif defined(TVOS)
-// expected-error at -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 at -9 {{aligned deallocation function of type 'void (void *, enum std::align_val_t) noexcept' is only available on tvOS 11 or newer}}}
// expected-note at -10 {{if you supply your own aligned allocation functions}}
#elif defined(WATCHOS)
-// expected-error at -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 at -12 {{aligned deallocation function of type 'void (void *, enum std::align_val_t) noexcept' is only available on watchOS 4 or newer}}}
// expected-note at -13 {{if you supply your own aligned allocation functions}}
#elif defined(MACOS)
-// expected-error at -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 at -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 at -16 {{if you supply your own aligned allocation functions}}
#elif defined(ZOS)
-// expected-error at -18 {{aligned deallocation function of type 'void (void *, std::size_t, std::align_val_t) noexcept' is not available on z/OS}}}
+// expected-error at -18 {{aligned deallocation function of type 'void (void *, enum std::align_val_t) noexcept' is not available on z/OS}}}
// expected-note at -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;
diff --git a/clang/unittests/StaticAnalyzer/CallEventTest.cpp b/clang/unittests/StaticAnalyzer/CallEventTest.cpp
index 446377e4f9c774..5be25d2ada6738 100644
--- a/clang/unittests/StaticAnalyzer/CallEventTest.cpp
+++ b/clang/unittests/StaticAnalyzer/CallEventTest.cpp
@@ -81,7 +81,7 @@ TEST(CXXDeallocatorCall, SimpleDestructor) {
}
)",
Diags));
- EXPECT_EQ(Diags, "test.CXXDeallocator: NumArgs: 2\n");
+ EXPECT_EQ(Diags, "test.CXXDeallocator: NumArgs: 1\n");
}
} // namespace
diff --git a/clang/www/cxx_status.html b/clang/www/cxx_status.html
index 911d51c324bd63..da0a1c219c0ecc 100755
--- a/clang/www/cxx_status.html
+++ b/clang/www/cxx_status.html
@@ -1203,11 +1203,12 @@ <h2 id="cxx14">C++14 implementation status</h2>
</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>
diff --git a/libcxx/test/libcxx/language.support/support.dynamic/libcpp_deallocate.sh.cpp b/libcxx/test/libcxx/language.support/support.dynamic/libcpp_deallocate.sh.cpp
index 8a4fd16d5978db..12c73e3e3b32c0 100644
--- a/libcxx/test/libcxx/language.support/support.dynamic/libcpp_deallocate.sh.cpp
+++ b/libcxx/test/libcxx/language.support/support.dynamic/libcpp_deallocate.sh.cpp
@@ -25,9 +25,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
-
// RUN: %{build} -faligned-allocation -fsized-deallocation
// RUN: %{run}
// RUN: %{build} -faligned-allocation -fno-sized-deallocation -DNO_SIZE
diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array14.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array14.pass.cpp
index 03716a92677103..21663cdf956d42 100644
--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array14.pass.cpp
+++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array14.pass.cpp
@@ -8,13 +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
// UNSUPPORTED: sanitizer-new-delete, c++03, c++11
-// XFAIL: apple-clang
-// Sized deallocation was added in macOS 10.12 and aligned OSes.
-// XFAIL: use_system_cxx_lib && target={{.+}}-apple-macosx10.{{9|10|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>
diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete14.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete14.pass.cpp
index 846d0240fc564f..a8701ce7a86cff 100644
--- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete14.pass.cpp
+++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete14.pass.cpp
@@ -8,13 +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
// UNSUPPORTED: sanitizer-new-delete, c++03, c++11
-// XFAIL: apple-clang
-// Sized deallocation was added in macOS 10.12 and aligned OSes.
-// XFAIL: use_system_cxx_lib && target={{.+}}-apple-macosx10.{{9|10|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>
More information about the libcxx-commits
mailing list