-
Notifications
You must be signed in to change notification settings - Fork 14.8k
[C] Fix issue with -Wimplicit-void-ptr-cast #154351
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
The changes from llvm#136855 missed a change with atomic assignment constraints. This fixes a bug where we'd accidentally drop a non-atomic-to-atomic conversion step. Fixes llvm#154157
Because this is fixing an issue introduced in Clang 21, there's no release note because I plan to backport the fix to the release branch. |
@llvm/pr-subscribers-clang Author: Aaron Ballman (AaronBallman) ChangesThe changes from #136855 missed a change with atomic assignment constraints. This fixes a bug where we'd accidentally drop a non-atomic-to-atomic conversion step. Fixes #154157 co-authored-by: @ahatanak Full diff: https://github.com/llvm/llvm-project/pull/154351.diff 2 Files Affected:
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 237c068f59283..265cd799373a5 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -9317,14 +9317,14 @@ AssignConvertType Sema::CheckAssignmentConstraints(QualType LHSType,
// If we have an atomic type, try a non-atomic assignment, then just add an
// atomic qualification step.
if (const AtomicType *AtomicTy = dyn_cast<AtomicType>(LHSType)) {
- AssignConvertType result =
+ AssignConvertType Result =
CheckAssignmentConstraints(AtomicTy->getValueType(), RHS, Kind);
- if (result != AssignConvertType::Compatible)
- return result;
+ if (!IsAssignConvertCompatible(Result))
+ return Result;
if (Kind != CK_NoOp && ConvertRHS)
RHS = ImpCastExprToType(RHS.get(), AtomicTy->getValueType(), Kind);
Kind = CK_NonAtomicToAtomic;
- return AssignConvertType::Compatible;
+ return Result;
}
// If the left-hand side is a reference type, then we are in a
diff --git a/clang/test/Sema/implicit-void-ptr-cast.c b/clang/test/Sema/implicit-void-ptr-cast.c
index 3c3e153d1dbda..1a8e1574907d4 100644
--- a/clang/test/Sema/implicit-void-ptr-cast.c
+++ b/clang/test/Sema/implicit-void-ptr-cast.c
@@ -82,3 +82,11 @@ void more(void) {
ptr3 = SOMETHING_THAT_IS_NOT_NULL; // c-warning {{implicit conversion when assigning to 'char *' from type 'void *' is not permitted in C++}} \
cxx-error {{assigning to 'char *' from incompatible type 'void *'}}
}
+
+void gh154157(void) {
+ #define ATOMIC_VAR_INIT(value) (value)
+
+ typedef const struct T * T_Ref;
+ static T_Ref _Atomic x = ATOMIC_VAR_INIT((void*)NULL); // c-warning {{implicit conversion when initializing '_Atomic(T_Ref)' with an expression of type 'void *' is not permitted in C++}} \
+ cxx-error {{cannot initialize a variable of type '_Atomic(T_Ref)' with an rvalue of type 'void *'}}
+}
|
I believe the Windows failure is unrelated, but we'll see what precommit CI comes back with this time. I wasn't able to reproduce the crash locally on my Windows machine, though. |
/cherry-pick ae434cd |
/pull-request #154386 |
The changes from llvm#136855 missed a change with atomic assignment constraints. This fixes a bug where we'd accidentally drop a non-atomic-to-atomic conversion step. Fixes llvm#154157 co-authored-by: @ahatanak
The changes from llvm#136855 missed a change with atomic assignment constraints. This fixes a bug where we'd accidentally drop a non-atomic-to-atomic conversion step. Fixes llvm#154157 co-authored-by: @ahatanak
The changes from llvm#136855 missed a change with atomic assignment constraints. This fixes a bug where we'd accidentally drop a non-atomic-to-atomic conversion step. Fixes llvm#154157 co-authored-by: @ahatanak (cherry picked from commit ae434cd)
The changes from llvm#136855 missed a change with atomic assignment constraints. This fixes a bug where we'd accidentally drop a non-atomic-to-atomic conversion step. Fixes llvm#154157 co-authored-by: @ahatanak (cherry picked from commit ae434cd)
The changes from #136855 missed a change with atomic assignment constraints. This fixes a bug where we'd accidentally drop a non-atomic-to-atomic conversion step.
Fixes #154157
co-authored-by: @ahatanak