Skip to content

Commit a02f9a7

Browse files
committed
Revert "[clang] Enable sized deallocation by default in C++14 onwards"
This reverts commit 2916b12. 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
1 parent 4b38310 commit a02f9a7

File tree

40 files changed

+99
-446
lines changed

40 files changed

+99
-446
lines changed

clang-tools-extra/clangd/unittests/FindTargetTests.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -812,9 +812,7 @@ TEST_F(TargetDeclTest, OverloadExpr) {
812812
[[delete]] x;
813813
}
814814
)cpp";
815-
// Sized deallocation is enabled by default in C++14 onwards.
816-
EXPECT_DECLS("CXXDeleteExpr",
817-
"void operator delete(void *, unsigned long) noexcept");
815+
EXPECT_DECLS("CXXDeleteExpr", "void operator delete(void *) noexcept");
818816
}
819817

820818
TEST_F(TargetDeclTest, DependentExprs) {

clang-tools-extra/test/clang-tidy/checkers/misc/new-delete-overloads.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,16 @@ struct S {
1212
// CHECK-MESSAGES: :[[@LINE+1]]:7: warning: declaration of 'operator new' has no matching declaration of 'operator delete' at the same scope
1313
void *operator new(size_t size) noexcept(false);
1414

15+
struct T {
16+
// Sized deallocations are not enabled by default, and so this new/delete pair
17+
// does not match. However, we expect only one warning, for the new, because
18+
// the operator delete is a placement delete and we do not warn on mismatching
19+
// placement operations.
20+
// CHECK-MESSAGES: :[[@LINE+1]]:9: warning: declaration of 'operator new' has no matching declaration of 'operator delete' at the same scope
21+
void *operator new(size_t size) noexcept;
22+
void operator delete(void *ptr, size_t) noexcept; // ok only if sized deallocation is enabled
23+
};
24+
1525
struct U {
1626
void *operator new(size_t size) noexcept;
1727
void operator delete(void *ptr) noexcept;

clang/docs/ReleaseNotes.rst

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,6 @@ sections with improvements to Clang's support for those languages.
5959
C++ Language Changes
6060
--------------------
6161

62-
C++14 Feature Support
63-
^^^^^^^^^^^^^^^^^^^^^
64-
- Sized deallocation is enabled by default in C++14 onwards.
65-
6662
C++20 Feature Support
6763
^^^^^^^^^^^^^^^^^^^^^
6864

clang/include/clang/Basic/SizedDeallocation.h

Lines changed: 0 additions & 44 deletions
This file was deleted.

clang/include/clang/Driver/Options.td

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,6 @@ class MarshallingInfoVisibility<KeyPathAndMacro kpm, code default>
564564
// Key paths that are constant during parsing of options with the same key path prefix.
565565
defvar cplusplus = LangOpts<"CPlusPlus">;
566566
defvar cpp11 = LangOpts<"CPlusPlus11">;
567-
defvar cpp14 = LangOpts<"CPlusPlus14">;
568567
defvar cpp17 = LangOpts<"CPlusPlus17">;
569568
defvar cpp20 = LangOpts<"CPlusPlus20">;
570569
defvar c99 = LangOpts<"C99">;
@@ -3137,10 +3136,10 @@ defm relaxed_template_template_args : BoolFOption<"relaxed-template-template-arg
31373136
"Enable C++17 relaxed template template argument matching">,
31383137
NegFlag<SetFalse>>;
31393138
defm sized_deallocation : BoolFOption<"sized-deallocation",
3140-
LangOpts<"SizedDeallocation">, Default<cpp14.KeyPath>,
3139+
LangOpts<"SizedDeallocation">, DefaultFalse,
31413140
PosFlag<SetTrue, [], [ClangOption, CC1Option],
31423141
"Enable C++14 sized global deallocation functions">,
3143-
NegFlag<SetFalse>, BothFlags<[], [ClangOption, CC1Option]>>;
3142+
NegFlag<SetFalse>>;
31443143
defm aligned_allocation : BoolFOption<"aligned-allocation",
31453144
LangOpts<"AlignedAllocation">, Default<cpp17.KeyPath>,
31463145
PosFlag<SetTrue, [], [ClangOption], "Enable C++17 aligned allocation functions">,

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6901,8 +6901,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
69016901
Args.addOptInFlag(CmdArgs, options::OPT_frelaxed_template_template_args,
69026902
options::OPT_fno_relaxed_template_template_args);
69036903

6904-
// -fsized-deallocation is on by default in C++14 onwards and otherwise off
6905-
// by default.
6904+
// -fsized-deallocation is off by default, as it is an ABI-breaking change for
6905+
// most platforms.
69066906
Args.addOptInFlag(CmdArgs, options::OPT_fsized_deallocation,
69076907
options::OPT_fno_sized_deallocation);
69086908

clang/lib/Driver/ToolChains/Darwin.cpp

Lines changed: 3 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
#include "CommonArgs.h"
1313
#include "clang/Basic/AlignedAllocation.h"
1414
#include "clang/Basic/ObjCRuntime.h"
15-
#include "clang/Basic/SizedDeallocation.h"
1615
#include "clang/Config/config.h"
1716
#include "clang/Driver/Compilation.h"
1817
#include "clang/Driver/Driver.h"
@@ -2847,48 +2846,16 @@ bool Darwin::isAlignedAllocationUnavailable() const {
28472846
return TargetVersion < alignedAllocMinVersion(OS);
28482847
}
28492848

2850-
bool Darwin::isSizedDeallocationUnavailable() const {
2851-
llvm::Triple::OSType OS;
2852-
2853-
if (isTargetMacCatalyst())
2854-
return TargetVersion < sizedDeallocMinVersion(llvm::Triple::MacOSX);
2855-
switch (TargetPlatform) {
2856-
case MacOS: // Earlier than 10.12.
2857-
OS = llvm::Triple::MacOSX;
2858-
break;
2859-
case IPhoneOS:
2860-
OS = llvm::Triple::IOS;
2861-
break;
2862-
case TvOS: // Earlier than 10.0.
2863-
OS = llvm::Triple::TvOS;
2864-
break;
2865-
case WatchOS: // Earlier than 3.0.
2866-
OS = llvm::Triple::WatchOS;
2867-
break;
2868-
case DriverKit: // Always available.
2869-
return false;
2870-
}
2871-
2872-
return TargetVersion < sizedDeallocMinVersion(OS);
2873-
}
2874-
2875-
void Darwin::addClangTargetOptions(
2876-
const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args,
2877-
Action::OffloadKind DeviceOffloadKind) const {
2849+
void Darwin::addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
2850+
llvm::opt::ArgStringList &CC1Args,
2851+
Action::OffloadKind DeviceOffloadKind) const {
28782852
// Pass "-faligned-alloc-unavailable" only when the user hasn't manually
28792853
// enabled or disabled aligned allocations.
28802854
if (!DriverArgs.hasArgNoClaim(options::OPT_faligned_allocation,
28812855
options::OPT_fno_aligned_allocation) &&
28822856
isAlignedAllocationUnavailable())
28832857
CC1Args.push_back("-faligned-alloc-unavailable");
28842858

2885-
// Pass "-fno-sized-deallocation" only when the user hasn't manually enabled
2886-
// or disabled sized deallocations.
2887-
if (!DriverArgs.hasArgNoClaim(options::OPT_fsized_deallocation,
2888-
options::OPT_fno_sized_deallocation) &&
2889-
isSizedDeallocationUnavailable())
2890-
CC1Args.push_back("-fno-sized-deallocation");
2891-
28922859
addClangCC1ASTargetOptions(DriverArgs, CC1Args);
28932860

28942861
// Enable compatibility mode for NSItemProviderCompletionHandler in

clang/lib/Driver/ToolChains/Darwin.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -499,10 +499,6 @@ class LLVM_LIBRARY_VISIBILITY Darwin : public MachO {
499499
/// targeting.
500500
bool isAlignedAllocationUnavailable() const;
501501

502-
/// Return true if c++14 sized deallocation functions are not implemented in
503-
/// the c++ standard library of the deployment target we are targeting.
504-
bool isSizedDeallocationUnavailable() const;
505-
506502
void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
507503
llvm::opt::ArgStringList &CC1Args,
508504
Action::OffloadKind DeviceOffloadKind) const override;

clang/lib/Driver/ToolChains/ZOS.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,6 @@ void ZOS::addClangTargetOptions(const ArgList &DriverArgs,
3636
if (!DriverArgs.hasArgNoClaim(options::OPT_faligned_allocation,
3737
options::OPT_fno_aligned_allocation))
3838
CC1Args.push_back("-faligned-alloc-unavailable");
39-
40-
// Pass "-fno-sized-deallocation" only when the user hasn't manually enabled
41-
// or disabled sized deallocations.
42-
if (!DriverArgs.hasArgNoClaim(options::OPT_fsized_deallocation,
43-
options::OPT_fno_sized_deallocation))
44-
CC1Args.push_back("-fno-sized-deallocation");
4539
}
4640

4741
void zos::Assembler::ConstructJob(Compilation &C, const JobAction &JA,

clang/test/AST/ast-dump-expr-json.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2338,7 +2338,7 @@ void TestNonADLCall3() {
23382338
// CHECK-NEXT: "kind": "FunctionDecl",
23392339
// CHECK-NEXT: "name": "operator delete",
23402340
// CHECK-NEXT: "type": {
2341-
// CHECK-NEXT: "qualType": "void (void *, unsigned long) noexcept"
2341+
// CHECK-NEXT: "qualType": "void (void *) noexcept"
23422342
// CHECK-NEXT: }
23432343
// CHECK-NEXT: },
23442344
// CHECK-NEXT: "inner": [

clang/test/AST/ast-dump-expr.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ void UnaryExpressions(int *p) {
164164
// CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> 'int *' lvalue ParmVar 0x{{[^ ]*}} 'p' 'int *'
165165

166166
::delete p;
167-
// CHECK: CXXDeleteExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:12> 'void' global Function 0x{{[^ ]*}} 'operator delete' 'void (void *, unsigned long) noexcept'
167+
// CHECK: CXXDeleteExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:12> 'void' global Function 0x{{[^ ]*}} 'operator delete' 'void (void *) noexcept'
168168
// CHECK-NEXT: ImplicitCastExpr
169169
// CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:12> 'int *' lvalue ParmVar 0x{{[^ ]*}} 'p' 'int *'
170170

0 commit comments

Comments
 (0)