Changing bitfield enums to unsigned ints.
authorDavid Blaikie <dblaikie@gmail.com>
Mon, 23 Jan 2012 23:27:47 +0000 (23:27 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Mon, 23 Jan 2012 23:27:47 +0000 (23:27 +0000)
This was suggested by Chandler Carruth on the basis of past experience with
esoteric compilers/quirks relating to signed enums.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148746 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/CommandLine.h

index dfa5844fcabbe55f592cd834622a02d12fff1135..65b3497a69c41ddbf321816badae4e435aa06f92 100644 (file)
@@ -163,12 +163,14 @@ class Option {
   virtual void anchor();
 
   int NumOccurrences;     // The number of times specified
-  enum NumOccurrencesFlag Occurrences : 3;
+  // Occurrences, HiddenFlag, and Formatting are all enum types but to avoid
+  // with signed enums in bitfields in MSVC we'll store them as unsigned
+  unsigned Occurrences : 3; // enum NumOccurrencesFlag
   // not using the enum type for 'Value' because zero is an implementation
   // detail representing the non-value
   unsigned Value : 2;
-  enum OptionHidden HiddenFlag : 2;
-  enum FormattingFlags Formatting : 2;
+  unsigned HiddenFlag : 2; // enum OptionHidden
+  unsigned Formatting : 2; // enum FormattingFlags
   unsigned Misc : 3;
   unsigned Position;      // Position of last occurrence of the option
   unsigned AdditionalVals;// Greater than 0 for multi-valued option.
@@ -179,17 +181,17 @@ public:
   const char *ValueStr;   // String describing what the value of this option is
 
   inline enum NumOccurrencesFlag getNumOccurrencesFlag() const {
-    return Occurrences;
+    return (enum NumOccurrencesFlag)Occurrences;
   }
   inline enum ValueExpected getValueExpectedFlag() const {
-    return Value ? static_cast<enum ValueExpected>(Value)
+    return Value ? ((enum ValueExpected)Value)
               : getValueExpectedFlagDefault();
   }
   inline enum OptionHidden getOptionHiddenFlag() const {
-    return HiddenFlag;
+    return (enum OptionHidden)HiddenFlag;
   }
   inline enum FormattingFlags getFormattingFlag() const {
-    return Formatting;
+    return (enum FormattingFlags)Formatting;
   }
   inline unsigned getMiscFlags() const {
     return Misc;