From f9a75d221c676d3122c46c496b00b0f84f0c0ebf Mon Sep 17 00:00:00 2001
From: Virgile Prevosto <virgile.prevosto@m4x.org>
Date: Fri, 28 May 2021 20:27:00 +0200
Subject: [PATCH] [clang] add support for builtin __underlying_type

---
 Clang_utils.cpp | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/Clang_utils.cpp b/Clang_utils.cpp
index d1ac0e70..253b5d35 100644
--- a/Clang_utils.cpp
+++ b/Clang_utils.cpp
@@ -24,6 +24,8 @@
 
 #include "Clang_utils.h"
 #include "ClangVisitor.h"
+#include <clang/AST/Type.h>
+#include <llvm/Support/Casting.h>
 
 extern "C" {
 
@@ -1857,7 +1859,12 @@ Clang_utils::makePlainType(
                 exp_node_Constant(compilation_constant_IntCst(
                   IINT,ICLITERAL,arrayType->getNumElements())))));
         return typ_Array(arrayKind);
-      }
+    }
+    case clang::Type::UnaryTransform: {
+      auto utt = llvm::dyn_cast<const clang::UnaryTransformType>(type);
+      auto integer_type = utt->getUnderlyingType();
+      return makePlainType(loc, integer_type, declRegistration, isPOD);
+    }
     case clang::Type::BlockPointer:
         unsupported_kind = "block pointer"; break;
     case clang::Type::Complex:
@@ -2877,7 +2884,7 @@ Clang_utils::logicArithmeticPromotion(
         return elaborated->isSugared()
           ? logicArithmeticPromotion(loc, elaborated->desugar().getTypePtr())
           : NULL;
-      }
+    }
     default: break;
   }
   return NULL;
-- 
GitLab