[Lldb-commits] [lldb] r349149 - Mark Permissions as a bitmask enum

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Fri Dec 14 05:51:20 PST 2018


Author: labath
Date: Fri Dec 14 05:51:20 2018
New Revision: 349149

URL: http://llvm.org/viewvc/llvm-project?rev=349149&view=rev
Log:
Mark Permissions as a bitmask enum

this allows one to use bitwise operators on the variables of this type
without complicated casting.

The gotcha here is that the combinations of these enums were being used
in some constexpr contexts such as case labels (case
ePermissionsWritable | ePermissionsExecutable:), which is not possible
if the user-defined operator| is not constexpr.

So, this commit also marks these operators as constexpr. I am committing
this as a small standalone patch so it can be easily reverted if some
compiler has an issue with this.

Modified:
    lldb/trunk/include/lldb/lldb-enumerations.h

Modified: lldb/trunk/include/lldb/lldb-enumerations.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/lldb-enumerations.h?rev=349149&r1=349148&r2=349149&view=diff
==============================================================================
--- lldb/trunk/include/lldb/lldb-enumerations.h (original)
+++ lldb/trunk/include/lldb/lldb-enumerations.h Fri Dec 14 05:51:20 2018
@@ -17,17 +17,17 @@
 // you mark Enum with LLDB_MARK_AS_BITMASK_ENUM(Enum), however, you can simply
 // write Enum a = eFoo | eBar.
 #define LLDB_MARK_AS_BITMASK_ENUM(Enum)                                        \
-  inline Enum operator|(Enum a, Enum b) {                                      \
+  constexpr Enum operator|(Enum a, Enum b) {                                   \
     return static_cast<Enum>(                                                  \
         static_cast<std::underlying_type<Enum>::type>(a) |                     \
         static_cast<std::underlying_type<Enum>::type>(b));                     \
   }                                                                            \
-  inline Enum operator&(Enum a, Enum b) {                                      \
+  constexpr Enum operator&(Enum a, Enum b) {                                   \
     return static_cast<Enum>(                                                  \
         static_cast<std::underlying_type<Enum>::type>(a) &                     \
         static_cast<std::underlying_type<Enum>::type>(b));                     \
   }                                                                            \
-  inline Enum operator~(Enum a) {                                              \
+  constexpr Enum operator~(Enum a) {                                           \
     return static_cast<Enum>(                                                  \
         ~static_cast<std::underlying_type<Enum>::type>(a));                    \
   }                                                                            \
@@ -395,6 +395,7 @@ LLDB_MARK_AS_BITMASK_ENUM(SymbolContextI
 FLAGS_ENUM(Permissions){ePermissionsWritable = (1u << 0),
                         ePermissionsReadable = (1u << 1),
                         ePermissionsExecutable = (1u << 2)};
+LLDB_MARK_AS_BITMASK_ENUM(Permissions)
 
 enum InputReaderAction {
   eInputReaderActivate, // reader is newly pushed onto the reader stack




More information about the lldb-commits mailing list