[PATCH] D150875: Make dereferencing a void* a hard-error instead of warn-as-error
Erich Keane via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri May 19 06:30:26 PDT 2023
erichkeane updated this revision to Diff 523748.
erichkeane added a comment.
Update release note per @MaskRay , change error message per @rsmith
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D150875/new/
https://reviews.llvm.org/D150875
Files:
clang/docs/ReleaseNotes.rst
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/lib/Sema/SemaExpr.cpp
clang/test/SemaCXX/disallow_void_deref.cpp
Index: clang/test/SemaCXX/disallow_void_deref.cpp
===================================================================
--- clang/test/SemaCXX/disallow_void_deref.cpp
+++ clang/test/SemaCXX/disallow_void_deref.cpp
@@ -1,8 +1,7 @@
-// RUN: %clang_cc1 -fsyntax-only -verify=enabled,sfinae -std=c++20 %s
-// RUN: %clang_cc1 -fsyntax-only -verify=sfinae -std=c++20 -Wno-void-ptr-dereference %s
+// RUN: %clang_cc1 -fsyntax-only -verify -std=c++20 %s
void f(void* p) {
- (void)*p; // enabled-error{{ISO C++ does not allow indirection on operand of type 'void *'}}
+ (void)*p; // expected-error{{ISO C++ does not allow indirection on operand of type 'void *'}}
}
template<class T>
@@ -11,6 +10,6 @@
};
static_assert(deref<void*>);
-// sfinae-error at -1{{static assertion failed}}
-// sfinae-note at -2{{because 'void *' does not satisfy 'deref'}}
-// sfinae-note@#FAILED_REQ{{because '*t' would be invalid: ISO C++ does not allow indirection on operand of type 'void *'}}
+// expected-error at -1{{static assertion failed}}
+// expected-note at -2{{because 'void *' does not satisfy 'deref'}}
+// expected-note@#FAILED_REQ{{because '*t' would be invalid: ISO C++ does not allow indirection on operand of type 'void *'}}
Index: clang/lib/Sema/SemaExpr.cpp
===================================================================
--- clang/lib/Sema/SemaExpr.cpp
+++ clang/lib/Sema/SemaExpr.cpp
@@ -14957,7 +14957,7 @@
// be a pointer to an object type, or a pointer to a function type
LangOptions LO = S.getLangOpts();
if (LO.CPlusPlus)
- S.Diag(OpLoc, diag::ext_typecheck_indirection_through_void_pointer_cpp)
+ S.Diag(OpLoc, diag::err_typecheck_indirection_through_void_pointer_cpp)
<< OpTy << Op->getSourceRange();
else if (!(LO.C99 && IsAfterAmp) && !S.isUnevaluatedContext())
S.Diag(OpLoc, diag::ext_typecheck_indirection_through_void_pointer)
Index: clang/include/clang/Basic/DiagnosticSemaKinds.td
===================================================================
--- clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -6981,9 +6981,8 @@
def ext_typecheck_indirection_through_void_pointer : ExtWarn<
"ISO C does not allow indirection on operand of type %0">,
InGroup<VoidPointerDeref>;
-def ext_typecheck_indirection_through_void_pointer_cpp
- : ExtWarn<"ISO C++ does not allow indirection on operand of type %0">,
- InGroup<VoidPointerDeref>, DefaultError, SFINAEFailure;
+def err_typecheck_indirection_through_void_pointer_cpp
+ : Error<"indirection not permitted on operand of type %0">;
def warn_indirection_through_null : Warning<
"indirection of non-volatile null pointer will be deleted, not trap">,
InGroup<NullDereference>;
Index: clang/docs/ReleaseNotes.rst
===================================================================
--- clang/docs/ReleaseNotes.rst
+++ clang/docs/ReleaseNotes.rst
@@ -55,6 +55,10 @@
-----------------------------------------
- Clang won't search for coroutine_traits in std::experimental namespace any more.
Clang will only search for std::coroutine_traits for coroutines then.
+- Clang no longer allows dereferencing of a ``void*`` as an extension. Clang 16
+ converted this to a default-error as ``-Wvoid-ptr-dereference``, as well as a
+ SFINAE error. This flag is still valid however, as it disables the equivalent
+ warning in C.
ABI Changes in This Version
---------------------------
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D150875.523748.patch
Type: text/x-patch
Size: 3464 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230519/770135dd/attachment-0001.bin>
More information about the cfe-commits
mailing list