[clang] [clang] Fix `remove{CVR|Fast}Qualifiers` with 64-bit `Qualifiers::Mask` (PR #90329)

2024-04-29 Thread Daniil Kovalev via cfe-commits

https://github.com/kovdan01 closed 
https://github.com/llvm/llvm-project/pull/90329
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Fix `remove{CVR|Fast}Qualifiers` with 64-bit `Qualifiers::Mask` (PR #90329)

2024-04-29 Thread Daniil Kovalev via cfe-commits

kovdan01 wrote:

@cor3ntin Thanks for feedback! I'll merge it myself

https://github.com/llvm/llvm-project/pull/90329
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Fix `remove{CVR|Fast}Qualifiers` with 64-bit `Qualifiers::Mask` (PR #90329)

2024-04-29 Thread via cfe-commits

cor3ntin wrote:

@kovdan01 Aaron is not available this week. This looks sensible. Do you need me 
to merge it for you?

https://github.com/llvm/llvm-project/pull/90329
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Fix `remove{CVR|Fast}Qualifiers` with 64-bit `Qualifiers::Mask` (PR #90329)

2024-04-29 Thread Daniil Kovalev via cfe-commits

kovdan01 wrote:

@AaronBallman Please let me know if you have some comments on this or if can be 
merged

https://github.com/llvm/llvm-project/pull/90329
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Fix `remove{CVR|Fast}Qualifiers` with 64-bit `Qualifiers::Mask` (PR #90329)

2024-04-28 Thread John McCall via cfe-commits

https://github.com/rjmccall approved this pull request.

LGTM

https://github.com/llvm/llvm-project/pull/90329
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Fix `remove{CVR|Fast}Qualifiers` with 64-bit `Qualifiers::Mask` (PR #90329)

2024-04-27 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang

Author: Daniil Kovalev (kovdan01)


Changes

After #84384, `Qualifiers::Mask` becomes 64-bit. So, operations like 
`Mask &= ~U32` where `U32` is `unsigned` produce undesirable results since 
higher 32 bits of `Mask` become zeroed while they should be preserved. Fix that 
by explicitly casting `unsigned` values to `uint64_t` in such operations. 
Signatures of fixed functions are intentionally left intact instead of changing 
the argument itself to `uint64_t` to keep things consistent with other 
functions working with the same qualifiers and to emphasize that 64-bit masks 
should not be used for these types of qualifiers.

---
Full diff: https://github.com/llvm/llvm-project/pull/90329.diff


1 Files Affected:

- (modified) clang/include/clang/AST/Type.h (+2-2) 


``diff
diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h
index dff02d4861b3db..5c7d5396658b57 100644
--- a/clang/include/clang/AST/Type.h
+++ b/clang/include/clang/AST/Type.h
@@ -480,7 +480,7 @@ class Qualifiers {
   }
   void removeCVRQualifiers(unsigned mask) {
 assert(!(mask & ~CVRMask) && "bitmask contains non-CVR bits");
-Mask &= ~mask;
+Mask &= ~static_cast(mask);
   }
   void removeCVRQualifiers() {
 removeCVRQualifiers(CVRMask);
@@ -609,7 +609,7 @@ class Qualifiers {
   }
   void removeFastQualifiers(unsigned mask) {
 assert(!(mask & ~FastMask) && "bitmask contains non-fast qualifier bits");
-Mask &= ~mask;
+Mask &= ~static_cast(mask);
   }
   void removeFastQualifiers() {
 removeFastQualifiers(FastMask);

``




https://github.com/llvm/llvm-project/pull/90329
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Fix `remove{CVR|Fast}Qualifiers` with 64-bit `Qualifiers::Mask` (PR #90329)

2024-04-27 Thread Daniil Kovalev via cfe-commits

https://github.com/kovdan01 ready_for_review 
https://github.com/llvm/llvm-project/pull/90329
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Fix `remove{CVR|Fast}Qualifiers` with 64-bit `Qualifiers::Mask` (PR #90329)

2024-04-27 Thread Daniil Kovalev via cfe-commits

https://github.com/kovdan01 created 
https://github.com/llvm/llvm-project/pull/90329

After #84384, `Qualifiers::Mask` becomes 64-bit. So, operations like `Mask &= 
~U32` where `U32` is `unsigned` produce undesirable results since higher 32 
bits of `Mask` become zeroed while they should be preserved. Fix that by 
explicitly casting `unsigned` values to `uint64_t` in such operations. 
Signatures of fixed functions are intentionally left intact instead of changing 
the argument itself to `uint64_t` to keep things consistent with other 
functions working with the same qualifiers and to emphasize that 64-bit masks 
should not be used for these types of qualifiers.

>From dd3ace8376caec6bd2488a730990cf2e691a21e6 Mon Sep 17 00:00:00 2001
From: Daniil Kovalev 
Date: Sat, 27 Apr 2024 10:52:43 +0300
Subject: [PATCH] [clang] Fix `remove{CVR|Fast}Qualifiers` with 64-bit
 `Qualifiers::Mask`

After #84384, `Qualifiers::Mask` becomes 64-bit. So, operations like
`Mask &= ~U32` where `U32` is `unsigned` produce undesirable results
since higher 32 bits of `Mask` become zeroed while they should be
preserved. Fix that by explicitly casting `unsigned` values to `uint64_t`
in such operations. Signatures of fixed functions are intentionally left
intact instead of changing the argument itself to `uint64_t` to keep things
consistent with other functions working with the same qualifiers and to
emphasize that 64-bit masks should not be used for these types of
qualifiers.
---
 clang/include/clang/AST/Type.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h
index dff02d4861b3db..5c7d5396658b57 100644
--- a/clang/include/clang/AST/Type.h
+++ b/clang/include/clang/AST/Type.h
@@ -480,7 +480,7 @@ class Qualifiers {
   }
   void removeCVRQualifiers(unsigned mask) {
 assert(!(mask & ~CVRMask) && "bitmask contains non-CVR bits");
-Mask &= ~mask;
+Mask &= ~static_cast(mask);
   }
   void removeCVRQualifiers() {
 removeCVRQualifiers(CVRMask);
@@ -609,7 +609,7 @@ class Qualifiers {
   }
   void removeFastQualifiers(unsigned mask) {
 assert(!(mask & ~FastMask) && "bitmask contains non-fast qualifier bits");
-Mask &= ~mask;
+Mask &= ~static_cast(mask);
   }
   void removeFastQualifiers() {
 removeFastQualifiers(FastMask);

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits