Browse Source

Try to fix build after invalid pointer conversion.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@284428 91177308-0d34-0410-b5e6-96231b3b80d8
Zachary Turner 8 years ago
parent
commit
d4bb10c270

+ 2 - 0
include/llvm/Support/NativeFormatting.h

@@ -31,6 +31,8 @@ enum class IntegerStyle {
 };
 };
 enum class HexStyle { Upper, Lower, PrefixUpper, PrefixLower };
 enum class HexStyle { Upper, Lower, PrefixUpper, PrefixLower };
 
 
+IntegerStyle hexStyleToIntHexStyle(HexStyle S);
+
 size_t getDefaultPrecision(FloatStyle Style);
 size_t getDefaultPrecision(FloatStyle Style);
 size_t getDefaultPrecision(IntegerStyle Style);
 size_t getDefaultPrecision(IntegerStyle Style);
 size_t getDefaultPrecision(HexStyle Style);
 size_t getDefaultPrecision(HexStyle Style);

+ 14 - 0
lib/Support/NativeFormatting.cpp

@@ -353,6 +353,20 @@ void llvm::write_double(raw_ostream &S, double N, FloatStyle Style,
     S << '%';
     S << '%';
 }
 }
 
 
+IntegerStyle llvm::hexStyleToIntHexStyle(HexStyle S) {
+  switch (S) {
+  case HexStyle::Upper:
+    return IntegerStyle::HexUpperNoPrefix;
+  case HexStyle::Lower:
+    return IntegerStyle::HexLowerNoPrefix;
+  case HexStyle::PrefixUpper:
+    return IntegerStyle::HexUpperPrefix;
+  case HexStyle::PrefixLower:
+    return IntegerStyle::HexLowerPrefix;
+  }
+  LLVM_BUILTIN_UNREACHABLE;
+}
+
 size_t llvm::getDefaultPrecision(FloatStyle Style) {
 size_t llvm::getDefaultPrecision(FloatStyle Style) {
   switch (Style) {
   switch (Style) {
   case FloatStyle::Exponent:
   case FloatStyle::Exponent:

+ 2 - 2
unittests/Support/NativeFormatTests.cpp

@@ -36,8 +36,8 @@ template <typename T>
 typename std::enable_if<std::is_pointer<T>::value, std::string>::type
 typename std::enable_if<std::is_pointer<T>::value, std::string>::type
 format_number(T N, HexStyle Style, Optional<size_t> Precision = None,
 format_number(T N, HexStyle Style, Optional<size_t> Precision = None,
               Optional<int> Width = None) {
               Optional<int> Width = None) {
-
-  return format_number(reinterpret_cast<uintptr_t>(N), Style, Precision, Width);
+  IntegerStyle IS = hexStyleToIntHexStyle(Style);
+  return format_number(reinterpret_cast<uintptr_t>(N), IS, Precision, Width);
 }
 }
 
 
 std::string format_number(unsigned long N, IntegerStyle Style,
 std::string format_number(unsigned long N, IntegerStyle Style,