sbc100 created this revision.
Herald added subscribers: cfe-commits, sunfish, aheejin.

We recently changes `size_t` on wasm from `int` to `long` which
had the effect of making the type of size_t (long) not match either
int32_t or int64_t.

This solution is not very elegant but fixes the build issues that
resulted from this change.


Repository:
  rC Clang

https://reviews.llvm.org/D50477

Files:
  lib/Frontend/InitPreprocessor.cpp


Index: lib/Frontend/InitPreprocessor.cpp
===================================================================
--- lib/Frontend/InitPreprocessor.cpp
+++ lib/Frontend/InitPreprocessor.cpp
@@ -209,6 +209,8 @@
 
 static void DefineType(const Twine &MacroName, TargetInfo::IntType Ty,
                        MacroBuilder &Builder) {
+  printf("macro = %s\n", MacroName.str().c_str());
+  printf("name = %s\n", TargetInfo::getTypeName(Ty));
   Builder.defineMacro(MacroName, TargetInfo::getTypeName(Ty));
 }
 
@@ -228,6 +230,7 @@
                                     MacroBuilder &Builder) {
   int TypeWidth = TI.getTypeWidth(Ty);
   bool IsSigned = TI.isTypeSigned(Ty);
+  printf("DefineExactWidthIntType\n");
 
   // Use the target specified int64 type, when appropriate, so that [u]int64_t
   // ends up being defined in terms of the correct type.
@@ -870,16 +873,18 @@
   if (!TargetInfo::isTypeSigned(TI.getWIntType()))
     Builder.defineMacro("__WINT_UNSIGNED__");
 
+  unsigned SizeTypeWidth = TI.getTypeWidth(TI.getSizeType());
+
   // Define exact-width integer types for stdint.h
   DefineExactWidthIntType(TargetInfo::SignedChar, TI, Builder);
 
   if (TI.getShortWidth() > TI.getCharWidth())
     DefineExactWidthIntType(TargetInfo::SignedShort, TI, Builder);
 
-  if (TI.getIntWidth() > TI.getShortWidth())
+  if (TI.getIntWidth() > TI.getShortWidth() && !(TI.getIntWidth() == 
SizeTypeWidth && TI.getSignedSizeType() != TargetInfo::SignedInt))
     DefineExactWidthIntType(TargetInfo::SignedInt, TI, Builder);
 
-  if (TI.getLongWidth() > TI.getIntWidth())
+  if (TI.getLongWidth() > TI.getIntWidth() || TI.getSignedSizeType() == 
TargetInfo::SignedLong)
     DefineExactWidthIntType(TargetInfo::SignedLong, TI, Builder);
 
   if (TI.getLongLongWidth() > TI.getLongWidth())
@@ -895,13 +900,13 @@
     DefineExactWidthIntTypeSize(TargetInfo::SignedShort, TI, Builder);
   }
 
-  if (TI.getIntWidth() > TI.getShortWidth()) {
+  if (TI.getIntWidth() > TI.getShortWidth() && !(TI.getIntWidth() == 
SizeTypeWidth && TI.getSizeType() != TargetInfo::UnsignedInt)) {
     DefineExactWidthIntType(TargetInfo::UnsignedInt, TI, Builder);
     DefineExactWidthIntTypeSize(TargetInfo::UnsignedInt, TI, Builder);
     DefineExactWidthIntTypeSize(TargetInfo::SignedInt, TI, Builder);
   }
 
-  if (TI.getLongWidth() > TI.getIntWidth()) {
+  if (TI.getLongWidth() > TI.getIntWidth() || TI.getSizeType() == 
TargetInfo::UnsignedLong) {
     DefineExactWidthIntType(TargetInfo::UnsignedLong, TI, Builder);
     DefineExactWidthIntTypeSize(TargetInfo::UnsignedLong, TI, Builder);
     DefineExactWidthIntTypeSize(TargetInfo::SignedLong, TI, Builder);


Index: lib/Frontend/InitPreprocessor.cpp
===================================================================
--- lib/Frontend/InitPreprocessor.cpp
+++ lib/Frontend/InitPreprocessor.cpp
@@ -209,6 +209,8 @@
 
 static void DefineType(const Twine &MacroName, TargetInfo::IntType Ty,
                        MacroBuilder &Builder) {
+  printf("macro = %s\n", MacroName.str().c_str());
+  printf("name = %s\n", TargetInfo::getTypeName(Ty));
   Builder.defineMacro(MacroName, TargetInfo::getTypeName(Ty));
 }
 
@@ -228,6 +230,7 @@
                                     MacroBuilder &Builder) {
   int TypeWidth = TI.getTypeWidth(Ty);
   bool IsSigned = TI.isTypeSigned(Ty);
+  printf("DefineExactWidthIntType\n");
 
   // Use the target specified int64 type, when appropriate, so that [u]int64_t
   // ends up being defined in terms of the correct type.
@@ -870,16 +873,18 @@
   if (!TargetInfo::isTypeSigned(TI.getWIntType()))
     Builder.defineMacro("__WINT_UNSIGNED__");
 
+  unsigned SizeTypeWidth = TI.getTypeWidth(TI.getSizeType());
+
   // Define exact-width integer types for stdint.h
   DefineExactWidthIntType(TargetInfo::SignedChar, TI, Builder);
 
   if (TI.getShortWidth() > TI.getCharWidth())
     DefineExactWidthIntType(TargetInfo::SignedShort, TI, Builder);
 
-  if (TI.getIntWidth() > TI.getShortWidth())
+  if (TI.getIntWidth() > TI.getShortWidth() && !(TI.getIntWidth() == SizeTypeWidth && TI.getSignedSizeType() != TargetInfo::SignedInt))
     DefineExactWidthIntType(TargetInfo::SignedInt, TI, Builder);
 
-  if (TI.getLongWidth() > TI.getIntWidth())
+  if (TI.getLongWidth() > TI.getIntWidth() || TI.getSignedSizeType() == TargetInfo::SignedLong)
     DefineExactWidthIntType(TargetInfo::SignedLong, TI, Builder);
 
   if (TI.getLongLongWidth() > TI.getLongWidth())
@@ -895,13 +900,13 @@
     DefineExactWidthIntTypeSize(TargetInfo::SignedShort, TI, Builder);
   }
 
-  if (TI.getIntWidth() > TI.getShortWidth()) {
+  if (TI.getIntWidth() > TI.getShortWidth() && !(TI.getIntWidth() == SizeTypeWidth && TI.getSizeType() != TargetInfo::UnsignedInt)) {
     DefineExactWidthIntType(TargetInfo::UnsignedInt, TI, Builder);
     DefineExactWidthIntTypeSize(TargetInfo::UnsignedInt, TI, Builder);
     DefineExactWidthIntTypeSize(TargetInfo::SignedInt, TI, Builder);
   }
 
-  if (TI.getLongWidth() > TI.getIntWidth()) {
+  if (TI.getLongWidth() > TI.getIntWidth() || TI.getSizeType() == TargetInfo::UnsignedLong) {
     DefineExactWidthIntType(TargetInfo::UnsignedLong, TI, Builder);
     DefineExactWidthIntTypeSize(TargetInfo::UnsignedLong, TI, Builder);
     DefineExactWidthIntTypeSize(TargetInfo::SignedLong, TI, Builder);
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to