Skip to content

Fixes to build with to clang-15 #110

Description

@mingodad

Here are the fixes to build with clang-15:

diff --git a/src/AST.cpp b/src/AST.cpp
index a87920b..56e3912 100644
--- a/src/AST.cpp
+++ b/src/AST.cpp
@@ -221,7 +221,7 @@ Decl* C2FFIASTConsumer::make_decl(const clang::FunctionDecl* d, bool is_toplevel
     return fd;
 }
 
-static bool convertUTF32ToUTF8String(const llvm::ArrayRef<char> &Source, std::string &Result) {
+static bool convert_UTF32ToUTF8String(const llvm::ArrayRef<char> &Source, std::string &Result) {
     const char*  SourceBegins = Source.data();
     const size_t SourceLength = Source.size();
     const char*  SourceEnding = SourceBegins + SourceLength;
@@ -274,14 +274,14 @@ Decl* C2FFIASTConsumer::make_decl(const clang::VarDecl* d, bool is_toplevel)
                         {
                             is_string = true;
 
-                            if(s->isAscii() || s->isUTF8()) {
+                            if(s->isOrdinary() || s->isUTF8()) {
                                 value = s->getString();
                             } else if(s->getCharByteWidth() == 2) {
                                 llvm::StringRef bytes = s->getBytes();
                                 llvm::convertUTF16ToUTF8String(llvm::ArrayRef<char>(bytes.data(), bytes.size()), value);
                             } else if(s->getCharByteWidth() == 4) {
                                 llvm::StringRef bytes = s->getBytes();
-                                convertUTF32ToUTF8String(llvm::ArrayRef<char>(bytes.data(), bytes.size()), value);
+                                convert_UTF32ToUTF8String(llvm::ArrayRef<char>(bytes.data(), bytes.size()), value);
                             } else {
                             }
                         }
diff --git a/src/Expr.cpp b/src/Expr.cpp
index 38f594f..020a312 100644
--- a/src/Expr.cpp
+++ b/src/Expr.cpp
@@ -109,7 +109,7 @@ static best_guess macro_type(
     if(owns_seen) seen = new StringSet;
     seen->insert(macro_name);
 
-    for(clang::MacroInfo::tokens_iterator j = mi->tokens_begin(); j != mi->tokens_end(); j++) {
+    for(clang::MacroInfo::const_tokens_iterator j = mi->tokens_begin(); j != mi->tokens_end(); j++) {
         const clang::Token& t = (*j);
 
         if(t.isLiteral()) {
@@ -152,7 +152,7 @@ static std::string macro_to_string(const clang::Preprocessor& pp, const clang::M
 {
     std::stringstream ss;
 
-    for(clang::MacroInfo::tokens_iterator j = mi->tokens_begin(); j != mi->tokens_end(); j++) {
+    for(clang::MacroInfo::const_tokens_iterator j = mi->tokens_begin(); j != mi->tokens_end(); j++) {
         const clang::Token& t = (*j);
 
         if(t.getFlags() & clang::Token::LeadingSpace) ss << " ";
diff --git a/src/drivers/JSON.cpp b/src/drivers/JSON.cpp
index a4abcf0..2896098 100644
--- a/src/drivers/JSON.cpp
+++ b/src/drivers/JSON.cpp
@@ -29,7 +29,7 @@ using namespace c2ffi;
 
 namespace c2ffi {
     class JSONOutputDriver : public OutputDriver {
-        void write_object(const char *type, bool open, bool close, ...) {
+        void write_object(const char *type, bool open, int close, ...) {
             va_list ap;
             char *ptr = NULL;
 
diff --git a/src/init.cpp b/src/init.cpp
index 1730d8e..af8014d 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -199,7 +199,7 @@ void c2ffi::init_ci(config &c, clang::CompilerInstance &ci) {
         lo.WCharSize = c.wchar_size;
 
     std::vector<std::string> includes;
-    ci.getInvocation().setLangDefaults(lo, c.kind, pti->getTriple(), includes, c.std);
+    ci.getLangOpts().setLangDefaults(lo, c.kind.getLanguage(), pti->getTriple(), includes, c.std);
     ci.createFileManager();
     ci.createSourceManager(ci.getFileManager());

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions