Apply changes to migrate to LLVM Mar 6th 2011.
- API for name mangling. (Changing from non-public APIs to the
public one)
- API changes for clang::Diagnostic::getNumErrors ->
clang::Diagnostic::hasErrorOccurred
- API changes for clang::CharUnits and Quantity type.
- API changes libLLVMSystem -> libLLVMSupport.
- Change clang::Token::eom -> clang::Token::eod.
- Remove SourceRange parameter for DeclRefExpr::Create and
MemberExpr::Create.
- Add const qualifier for several unsafe type cast.
diff --git a/Android.mk b/Android.mk
index 5ad1017..3c2a5b4 100644
--- a/Android.mk
+++ b/Android.mk
@@ -20,15 +20,14 @@
libLLVMipo \
libLLVMBitWriter \
libLLVMBitReader \
- libLLVMARMAsmPrinter \
- libLLVMX86AsmPrinter \
- libLLVMX86InstPrinter \
- libLLVMAsmPrinter \
- libLLVMMCParser \
libLLVMARMCodeGen \
+ libLLVMARMAsmPrinter \
libLLVMARMInfo \
libLLVMX86CodeGen \
+ libLLVMX86AsmPrinter \
libLLVMX86Info \
+ libLLVMX86Utils \
+ libLLVMAsmPrinter \
libLLVMSelectionDAG \
libLLVMCodeGen \
libLLVMScalarOpts \
@@ -39,6 +38,7 @@
libLLVMAnalysis \
libLLVMTarget \
libLLVMMC \
+ libLLVMMCParser \
libLLVMCore \
libclangParse \
libclangSema \
@@ -48,8 +48,7 @@
libclangFrontend \
libclangCodeGen \
libclangBasic \
- libLLVMSupport \
- libLLVMSystem
+ libLLVMSupport
# Static library libslang for host
# ========================================================
diff --git a/llvm-rs-cc.cpp b/llvm-rs-cc.cpp
index f0c24ca..4eadfea 100644
--- a/llvm-rs-cc.cpp
+++ b/llvm-rs-cc.cpp
@@ -31,12 +31,14 @@
#include "clang/Frontend/TextDiagnosticPrinter.h"
#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/IntrusiveRefCntPtr.h"
+#include "llvm/ADT/OwningPtr.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/MemoryBuffer.h"
-
-#include "llvm/System/Path.h"
+#include "llvm/Support/Path.h"
+#include "llvm/Support/system_error.h"
#include "slang.h"
#include "slang_assert.h"
@@ -336,14 +338,18 @@
clang::TextDiagnosticPrinter *DiagClient =
new clang::TextDiagnosticPrinter(llvm::errs(), clang::DiagnosticOptions());
DiagClient->setPrefix(Argv0);
- clang::Diagnostic Diags(DiagClient);
+
+ llvm::IntrusiveRefCntPtr<clang::DiagnosticIDs> DiagIDs(
+ new clang::DiagnosticIDs());
+
+ clang::Diagnostic Diags(DiagIDs, DiagClient, true);
slang::Slang::GlobalInitialization();
ParseArguments(ArgVector, Inputs, Opts, Diags);
// Exits when there's any error occurred during parsing the arguments
- if (Diags.getNumErrors() > 0)
+ if (Diags.hasErrorOccurred())
return 1;
if (Opts.mShowHelp) {
@@ -426,8 +432,9 @@
llvm::SmallVectorImpl<const char*> &ArgVector,
std::set<std::string> &SavedStrings) {
const char *FName = Arg + 1;
- llvm::MemoryBuffer *MemBuf = llvm::MemoryBuffer::getFile(FName);
- if (!MemBuf) {
+ llvm::OwningPtr<llvm::MemoryBuffer> MemBuf;
+ if (llvm::MemoryBuffer::getFile(FName, MemBuf)) {
+ // Unable to open the file
ArgVector.push_back(SaveStringInSet(SavedStrings, Arg));
return;
}
@@ -477,7 +484,6 @@
}
CurArg.push_back(*P);
}
- delete MemBuf;
}
// ExpandArgsFromBuf -
diff --git a/llvm-rs-link.cpp b/llvm-rs-link.cpp
index 7815644..a634518 100644
--- a/llvm-rs-link.cpp
+++ b/llvm-rs-link.cpp
@@ -34,6 +34,7 @@
#include "llvm/Support/StandardPasses.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Support/ToolOutputFile.h"
+#include "llvm/Support/system_error.h"
#include "llvm/Target/TargetData.h"
@@ -102,13 +103,13 @@
}
static inline MemoryBuffer *LoadFileIntoMemory(const std::string &F) {
- std::string Err;
- MemoryBuffer *MB = MemoryBuffer::getFile(F, &Err);
+ llvm::OwningPtr<MemoryBuffer> MB;
- if (MB == NULL)
- errs() << "Failed to load `" << F << "' (" << Err << ")\n";
+ if (llvm::error_code EC = MemoryBuffer::getFile(F, MB)) {
+ errs() << "Failed to load `" << F << "' (" + EC.message() + ")\n";
+ }
- return MB;
+ return MB.take();
}
static inline Module *ParseBitcodeFromMemoryBuffer(MemoryBuffer *MB,
diff --git a/slang.cpp b/slang.cpp
index 0672c06..02e7e45 100644
--- a/slang.cpp
+++ b/slang.cpp
@@ -24,6 +24,7 @@
#include "clang/AST/ASTConsumer.h"
#include "clang/AST/ASTContext.h"
+#include "clang/Basic/DiagnosticIDs.h"
#include "clang/Basic/FileManager.h"
#include "clang/Basic/FileSystemOptions.h"
#include "clang/Basic/LangOptions.h"
@@ -43,6 +44,8 @@
#include "clang/Parse/ParseAST.h"
+#include "llvm/ADT/IntrusiveRefCntPtr.h"
+
#include "llvm/Bitcode/ReaderWriter.h"
// More force linking
@@ -57,8 +60,7 @@
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/ToolOutputFile.h"
-
-#include "llvm/System/Path.h"
+#include "llvm/Support/Path.h"
#include "llvm/Target/TargetSelect.h"
@@ -170,11 +172,9 @@
}
void Slang::createDiagnostic() {
- mDiagnostics =
- llvm::IntrusiveRefCntPtr<clang::Diagnostic>(new clang::Diagnostic());
mDiagClient = new DiagnosticBuffer();
- // This takes the ownership of mDiagClient.
- mDiagnostics->setClient(mDiagClient);
+ mDiagIDs = new clang::DiagnosticIDs();
+ mDiagnostics = new clang::Diagnostic(mDiagIDs, mDiagClient, true);
initDiagnostic();
return;
}
@@ -199,20 +199,18 @@
}
void Slang::createFileManager() {
- mFileMgr.reset(new clang::FileManager());
mFileSysOpt.reset(new clang::FileSystemOptions());
+ mFileMgr.reset(new clang::FileManager(*mFileSysOpt));
}
void Slang::createSourceManager() {
- mSourceMgr.reset(new clang::SourceManager(*mDiagnostics,
- *mFileMgr,
- *mFileSysOpt));
+ mSourceMgr.reset(new clang::SourceManager(*mDiagnostics, *mFileMgr));
return;
}
void Slang::createPreprocessor() {
// Default only search header file in current dir
- clang::HeaderSearch *HS = new clang::HeaderSearch(*mFileMgr, *mFileSysOpt);
+ clang::HeaderSearch *HS = new clang::HeaderSearch(*mFileMgr);
mPP.reset(new clang::Preprocessor(*mDiagnostics,
LangOpts,
@@ -228,7 +226,7 @@
std::vector<clang::DirectoryLookup> SearchList;
for (unsigned i = 0, e = mIncludePaths.size(); i != e; i++) {
if (const clang::DirectoryEntry *DE =
- mFileMgr->getDirectory(mIncludePaths[i], *mFileSysOpt)) {
+ mFileMgr->getDirectory(mIncludePaths[i])) {
SearchList.push_back(clang::DirectoryLookup(DE,
clang::SrcMgr::C_System,
false,
@@ -313,7 +311,7 @@
mSourceMgr->clearIDTables();
- const clang::FileEntry *File = mFileMgr->getFile(InputFile, *mFileSysOpt);
+ const clang::FileEntry *File = mFileMgr->getFile(InputFile);
if (File)
mSourceMgr->createMainFileID(File);
@@ -377,8 +375,8 @@
}
int Slang::generateDepFile() {
- if (mDiagnostics->getNumErrors() > 0)
- return mDiagnostics->getNumErrors();
+ if (mDiagnostics->hasErrorOccurred())
+ return 1;
if (mDOS.get() == NULL)
return 1;
@@ -413,19 +411,19 @@
mPP->EndSourceFile();
// Declare success if no error
- if (mDiagnostics->getNumErrors() == 0)
+ if (!mDiagnostics->hasErrorOccurred())
mDOS->keep();
// Clean up after compilation
mPP.reset();
mDOS.reset();
- return mDiagnostics->getNumErrors();
+ return mDiagnostics->hasErrorOccurred() ? 1 : 0;
}
int Slang::compile() {
- if (mDiagnostics->getNumErrors() > 0)
- return mDiagnostics->getNumErrors();
+ if (mDiagnostics->hasErrorOccurred())
+ return 1;
if (mOS.get() == NULL)
return 1;
@@ -445,7 +443,7 @@
mDiagClient->EndSourceFile();
// Declare success if no error
- if (mDiagnostics->getNumErrors() == 0)
+ if (!mDiagnostics->hasErrorOccurred())
mOS->keep();
// The compilation ended, clear
@@ -454,7 +452,7 @@
mPP.reset();
mOS.reset();
- return mDiagnostics->getNumErrors();
+ return mDiagnostics->hasErrorOccurred() ? 1 : 0;
}
void Slang::reset() {
diff --git a/slang.h b/slang.h
index ced1266..9f7c46a 100644
--- a/slang.h
+++ b/slang.h
@@ -76,6 +76,8 @@
// The diagnostics engine instance (for status reporting during compilation)
llvm::IntrusiveRefCntPtr<clang::Diagnostic> mDiagnostics;
+ // The diagnostics id
+ llvm::IntrusiveRefCntPtr<clang::DiagnosticIDs> mDiagIDs;
// The clients of diagnostics engine. The ownership is taken by the
// mDiagnostics after creation.
DiagnosticBuffer *mDiagClient;
diff --git a/slang_diagnostic_buffer.cpp b/slang_diagnostic_buffer.cpp
index c6a5e43..6b70cfe 100644
--- a/slang_diagnostic_buffer.cpp
+++ b/slang_diagnostic_buffer.cpp
@@ -32,12 +32,12 @@
void DiagnosticBuffer::HandleDiagnostic(clang::Diagnostic::Level DiagLevel,
const clang::DiagnosticInfo &Info) {
- const clang::FullSourceLoc &FSLoc = Info.getLocation();
+ const clang::SourceLocation &SrcLoc = Info.getLocation();
// 100 is enough for storing general diagnosis message
llvm::SmallString<100> Buf;
- if (FSLoc.isValid()) {
- FSLoc.print(*mSOS, FSLoc.getManager());
+ if (SrcLoc.isValid()) {
+ SrcLoc.print(*mSOS, Info.getSourceManager());
(*mSOS) << ": ";
}
diff --git a/slang_rs.cpp b/slang_rs.cpp
index a6a5c50..c5aadff 100644
--- a/slang_rs.cpp
+++ b/slang_rs.cpp
@@ -22,11 +22,13 @@
#include <utility>
#include <vector>
+#include "clang/Basic/SourceLocation.h"
+
#include "clang/Frontend/FrontendDiagnostic.h"
#include "clang/Sema/SemaDiagnostic.h"
-#include "llvm/System/Path.h"
+#include "llvm/Support/Path.h"
#include "os_sep.h"
#include "slang_rs_backend.h"
@@ -164,7 +166,8 @@
Diag.setDiagnosticMapping(
clang::diag::ext_typecheck_convert_discards_qualifiers,
- clang::diag::MAP_ERROR);
+ clang::diag::MAP_ERROR,
+ clang::SourceLocation());
mDiagErrorInvalidOutputDepParameter =
Diag.getCustomDiagID(clang::Diagnostic::Error,
diff --git a/slang_rs_context.cpp b/slang_rs_context.cpp
index 38315ac..1f7d533 100644
--- a/slang_rs_context.cpp
+++ b/slang_rs_context.cpp
@@ -21,6 +21,7 @@
#include "clang/AST/ASTContext.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclBase.h"
+#include "clang/AST/Mangle.h"
#include "clang/AST/Type.h"
#include "clang/Basic/Linkage.h"
@@ -57,8 +58,7 @@
mLLVMContext(llvm::getGlobalContext()),
mLicenseNote(NULL),
version(0),
- mMangleCtx(*(new clang::CodeGen::MangleContext(Ctx,
- *(&PP.getDiagnostics())))) {
+ mMangleCtx(Ctx.createMangleContext()) {
slangAssert(mGeneratedFileNames && "Must supply GeneratedFileNames");
// For #pragma rs export_type
diff --git a/slang_rs_context.h b/slang_rs_context.h
index 251790c..91b1aa1 100644
--- a/slang_rs_context.h
+++ b/slang_rs_context.h
@@ -23,8 +23,9 @@
#include <string>
#include "clang/Lex/Preprocessor.h"
-#include "Mangle.h"
+#include "clang/AST/Mangle.h"
+#include "llvm/ADT/OwningPtr.h"
#include "llvm/ADT/StringSet.h"
#include "llvm/ADT/StringMap.h"
@@ -79,7 +80,7 @@
std::string mReflectJavaPathName;
int version;
- clang::CodeGen::MangleContext &mMangleCtx;
+ llvm::OwningPtr<clang::MangleContext> mMangleCtx;
bool processExportVar(const clang::VarDecl *VD);
bool processExportFunc(const clang::FunctionDecl *FD);
@@ -98,8 +99,8 @@
inline clang::Preprocessor &getPreprocessor() const { return mPP; }
inline clang::ASTContext &getASTContext() const { return mCtx; }
- inline clang::CodeGen::MangleContext &getMangleContext() const {
- return mMangleCtx;
+ inline clang::MangleContext &getMangleContext() const {
+ return *mMangleCtx;
}
inline const llvm::TargetData *getTargetData() const { return mTargetData; }
inline llvm::LLVMContext &getLLVMContext() const { return mLLVMContext; }
diff --git a/slang_rs_export_element.cpp b/slang_rs_export_element.cpp
index 9887f0b..1ebc655 100644
--- a/slang_rs_export_element.cpp
+++ b/slang_rs_export_element.cpp
@@ -94,7 +94,7 @@
"your macro)");
RSExportVectorType *EVT =
RSExportVectorType::Create(Context,
- static_cast<clang::ExtVectorType*>(
+ static_cast<const clang::ExtVectorType*>(
T->getCanonicalTypeInternal()
.getTypePtr()),
TypeName,
diff --git a/slang_rs_export_func.h b/slang_rs_export_func.h
index cff3442..aedd3af 100644
--- a/slang_rs_export_func.h
+++ b/slang_rs_export_func.h
@@ -21,6 +21,9 @@
#include <string>
#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/raw_ostream.h"
+
+#include "clang/AST/Decl.h"
#include "slang_assert.h"
#include "slang_rs_export_type.h"
@@ -58,10 +61,9 @@
mShouldMangle = Context->getMangleContext().shouldMangleDeclName(FD);
if (mShouldMangle) {
- llvm::SmallString<256> Buffer;
- Context->getMangleContext().mangleName(FD, Buffer);
-
- mMangledName = Buffer.str();
+ llvm::raw_string_ostream BufStm(mMangledName);
+ Context->getMangleContext().mangleName(FD, BufStm);
+ BufStm.flush();
}
return;
diff --git a/slang_rs_export_type.cpp b/slang_rs_export_type.cpp
index 962958a..7171e88 100644
--- a/slang_rs_export_type.cpp
+++ b/slang_rs_export_type.cpp
@@ -132,7 +132,8 @@
switch (T->getTypeClass()) {
case clang::Type::Builtin: {
- const clang::BuiltinType *BT = UNSAFE_CAST_TYPE(clang::BuiltinType, T);
+ const clang::BuiltinType *BT =
+ UNSAFE_CAST_TYPE(const clang::BuiltinType, T);
switch (BT->getKind()) {
#define ENUM_SUPPORT_BUILTIN_TYPE(builtin_type, type, cname) \
@@ -222,7 +223,8 @@
return NULL;
}
- const clang::PointerType *PT = UNSAFE_CAST_TYPE(clang::PointerType, T);
+ const clang::PointerType *PT =
+ UNSAFE_CAST_TYPE(const clang::PointerType, T);
const clang::Type *PointeeType = GET_POINTEE_TYPE(PT);
if (PointeeType->getTypeClass() == clang::Type::Pointer)
@@ -238,7 +240,7 @@
}
case clang::Type::ExtVector: {
const clang::ExtVectorType *EVT =
- UNSAFE_CAST_TYPE(clang::ExtVectorType, T);
+ UNSAFE_CAST_TYPE(const clang::ExtVectorType, T);
// Only vector with size 2, 3 and 4 are supported.
if (EVT->getNumElements() < 2 || EVT->getNumElements() > 4)
return NULL;
@@ -255,7 +257,7 @@
}
case clang::Type::ConstantArray: {
const clang::ConstantArrayType *CAT =
- UNSAFE_CAST_TYPE(clang::ConstantArrayType, T);
+ UNSAFE_CAST_TYPE(const clang::ConstantArrayType, T);
return ConstantArrayTypeExportableHelper(CAT, SPS, Diags, SM, VD,
TopLevelRecord);
@@ -339,7 +341,8 @@
switch (T->getTypeClass()) {
case clang::Type::Builtin: {
- const clang::BuiltinType *BT = UNSAFE_CAST_TYPE(clang::BuiltinType, T);
+ const clang::BuiltinType *BT =
+ UNSAFE_CAST_TYPE(const clang::BuiltinType, T);
switch (BT->getKind()) {
#define ENUM_SUPPORT_BUILTIN_TYPE(builtin_type, type, cname) \
@@ -397,7 +400,7 @@
}
case clang::Type::ExtVector: {
const clang::ExtVectorType *EVT =
- UNSAFE_CAST_TYPE(clang::ExtVectorType, T);
+ UNSAFE_CAST_TYPE(const clang::ExtVectorType, T);
return RSExportVectorType::GetTypeName(EVT);
break;
}
@@ -476,7 +479,7 @@
}
case clang::Type::Pointer: {
ET = RSExportPointerType::Create(Context,
- UNSAFE_CAST_TYPE(clang::PointerType, T),
+ UNSAFE_CAST_TYPE(const clang::PointerType, T),
TypeName);
// FIXME: free the name (allocated in RSExportType::GetTypeName)
delete [] TypeName.data();
@@ -484,14 +487,14 @@
}
case clang::Type::ExtVector: {
ET = RSExportVectorType::Create(Context,
- UNSAFE_CAST_TYPE(clang::ExtVectorType, T),
+ UNSAFE_CAST_TYPE(const clang::ExtVectorType, T),
TypeName);
break;
}
case clang::Type::ConstantArray: {
ET = RSExportConstantArrayType::Create(
Context,
- UNSAFE_CAST_TYPE(clang::ConstantArrayType, T));
+ UNSAFE_CAST_TYPE(const clang::ConstantArrayType, T));
break;
}
default: {
@@ -694,7 +697,8 @@
switch (T->getTypeClass()) {
case clang::Type::Builtin: {
- const clang::BuiltinType *BT = UNSAFE_CAST_TYPE(clang::BuiltinType, T);
+ const clang::BuiltinType *BT =
+ UNSAFE_CAST_TYPE(const clang::BuiltinType, T);
switch (BT->getKind()) {
#define ENUM_SUPPORT_BUILTIN_TYPE(builtin_type, type, cname) \
case builtin_type: { \
@@ -897,7 +901,7 @@
if ((ElementType->getTypeClass() != clang::Type::Builtin))
return llvm::StringRef();
- const clang::BuiltinType *BT = UNSAFE_CAST_TYPE(clang::BuiltinType,
+ const clang::BuiltinType *BT = UNSAFE_CAST_TYPE(const clang::BuiltinType,
ElementType);
if ((EVT->getNumElements() < 1) ||
(EVT->getNumElements() > 4))
@@ -1150,7 +1154,7 @@
TypeName,
RD->hasAttr<clang::PackedAttr>(),
mIsArtificial,
- (RL->getSize() >> 3));
+ (RL->getSize() / 8).getQuantity());
unsigned int Index = 0;
for (clang::RecordDecl::field_iterator FI = RD->field_begin(),
diff --git a/slang_rs_object_ref_count.cpp b/slang_rs_object_ref_count.cpp
index 4ae79b9..090f12b 100644
--- a/slang_rs_object_ref_count.cpp
+++ b/slang_rs_object_ref_count.cpp
@@ -20,6 +20,7 @@
#include "clang/AST/DeclGroup.h"
#include "clang/AST/Expr.h"
+#include "clang/AST/NestedNameSpecifier.h"
#include "clang/AST/OperationKinds.h"
#include "clang/AST/Stmt.h"
#include "clang/AST/StmtVisitor.h"
@@ -278,15 +279,18 @@
new(C) clang::UnaryOperator(RefRSVar,
clang::UO_AddrOf,
ClearObjectFDArgType,
+ clang::VK_RValue,
+ clang::OK_Ordinary,
Loc);
clang::Expr *RefRSClearObjectFD =
clang::DeclRefExpr::Create(C,
- NULL,
- ClearObjectFD->getQualifierRange(),
+ clang::NestedNameSpecifierLoc(),
ClearObjectFD,
ClearObjectFD->getLocation(),
- ClearObjectFDType);
+ ClearObjectFDType,
+ clang::VK_RValue,
+ NULL);
clang::Expr *RSClearObjectFP =
clang::ImplicitCastExpr::Create(C,
@@ -302,6 +306,7 @@
&AddrRefRSVar,
1,
ClearObjectFD->getCallResultType(),
+ clang::VK_RValue,
Loc);
return RSClearObjectCall;
@@ -321,14 +326,12 @@
clang::ASTContext &C,
clang::DeclContext *DC,
clang::Expr *RefRSStruct,
- clang::SourceRange Range,
clang::SourceLocation Loc);
static clang::Stmt *ClearArrayRSObject(
clang::ASTContext &C,
clang::DeclContext *DC,
clang::Expr *RefRSArr,
- clang::SourceRange Range,
clang::SourceLocation Loc) {
const clang::Type *BaseType = RefRSArr->getType().getTypePtr();
slangAssert(BaseType->isArrayType());
@@ -390,11 +393,12 @@
// Init -> "rsIntIter = 0"
clang::DeclRefExpr *RefrsIntIter =
clang::DeclRefExpr::Create(C,
- NULL,
- Range,
+ clang::NestedNameSpecifierLoc(),
IIVD,
Loc,
- C.IntTy);
+ C.IntTy,
+ clang::VK_RValue,
+ NULL);
clang::Expr *Int0 = clang::IntegerLiteral::Create(C,
llvm::APInt(C.getTypeSize(C.IntTy), 0), C.IntTy, Loc);
@@ -404,6 +408,8 @@
Int0,
clang::BO_Assign,
C.IntTy,
+ clang::VK_RValue,
+ clang::OK_Ordinary,
Loc);
// Cond -> "rsIntIter < NumArrayElements"
@@ -415,6 +421,8 @@
NumArrayElementsExpr,
clang::BO_LT,
C.IntTy,
+ clang::VK_RValue,
+ clang::OK_Ordinary,
Loc);
// Inc -> "rsIntIter++"
@@ -422,6 +430,8 @@
new(C) clang::UnaryOperator(RefrsIntIter,
clang::UO_PostInc,
C.IntTy,
+ clang::VK_RValue,
+ clang::OK_Ordinary,
Loc);
// Body -> "rsClearObject(&VD[rsIntIter]);"
@@ -439,6 +449,8 @@
new(C) clang::ArraySubscriptExpr(RefRSArrPtr,
RefrsIntIter,
BaseType->getCanonicalTypeInternal(),
+ clang::VK_RValue,
+ clang::OK_Ordinary,
Loc);
RSExportPrimitiveType::DataType DT =
@@ -447,10 +459,10 @@
clang::Stmt *RSClearObjectCall = NULL;
if (BaseType->isArrayType()) {
RSClearObjectCall =
- ClearArrayRSObject(C, DC, RefRSArrPtrSubscript, Range, Loc);
+ ClearArrayRSObject(C, DC, RefRSArrPtrSubscript, Loc);
} else if (DT == RSExportPrimitiveType::DataTypeUnknown) {
RSClearObjectCall =
- ClearStructRSObject(C, DC, RefRSArrPtrSubscript, Range, Loc);
+ ClearStructRSObject(C, DC, RefRSArrPtrSubscript, Loc);
} else {
RSClearObjectCall = ClearSingleRSObject(C, RefRSArrPtrSubscript, Loc);
}
@@ -514,7 +526,6 @@
clang::ASTContext &C,
clang::DeclContext *DC,
clang::Expr *RefRSStruct,
- clang::SourceRange Range,
clang::SourceLocation Loc) {
const clang::Type *BaseType = RefRSStruct->getType().getTypePtr();
@@ -559,13 +570,14 @@
clang::MemberExpr::Create(C,
RefRSStruct,
false,
- NULL,
- Range,
+ clang::NestedNameSpecifierLoc(),
FD,
FoundDecl,
clang::DeclarationNameInfo(),
NULL,
- OrigType->getCanonicalTypeInternal());
+ OrigType->getCanonicalTypeInternal(),
+ clang::VK_RValue,
+ clang::OK_Ordinary);
slangAssert(StmtCount < FieldsToDestroy);
@@ -573,7 +585,6 @@
StmtArray[StmtCount++] = ClearArrayRSObject(C,
DC,
RSObjectMember,
- Range,
Loc);
} else {
StmtArray[StmtCount++] = ClearSingleRSObject(C,
@@ -590,25 +601,24 @@
clang::MemberExpr::Create(C,
RefRSStruct,
false,
- NULL,
- Range,
+ clang::NestedNameSpecifierLoc(),
FD,
FoundDecl,
clang::DeclarationNameInfo(),
NULL,
- OrigType->getCanonicalTypeInternal());
+ OrigType->getCanonicalTypeInternal(),
+ clang::VK_RValue,
+ clang::OK_Ordinary);
if (IsArrayType) {
StmtArray[StmtCount++] = ClearArrayRSObject(C,
DC,
RSObjectMember,
- Range,
Loc);
} else {
StmtArray[StmtCount++] = ClearStructRSObject(C,
DC,
RSObjectMember,
- Range,
Loc);
}
}
@@ -640,11 +650,12 @@
clang::Expr *RefRSSetObjectFD =
clang::DeclRefExpr::Create(C,
- NULL,
- SetObjectFD->getQualifierRange(),
+ clang::NestedNameSpecifierLoc(),
SetObjectFD,
Loc,
- SetObjectFDType);
+ SetObjectFDType,
+ clang::VK_RValue,
+ NULL);
clang::Expr *RSSetObjectFP =
clang::ImplicitCastExpr::Create(C,
@@ -658,6 +669,8 @@
ArgList[0] = new(C) clang::UnaryOperator(DstExpr,
clang::UO_AddrOf,
SetObjectFDArgType[0],
+ clang::VK_RValue,
+ clang::OK_Ordinary,
Loc);
ArgList[1] = SrcExpr;
@@ -667,6 +680,7 @@
ArgList,
2,
SetObjectFD->getCallResultType(),
+ clang::VK_RValue,
Loc);
return RSSetObjectCall;
@@ -684,7 +698,6 @@
clang::Expr *SrcArr,
clang::SourceLocation Loc) {
clang::DeclContext *DC = NULL;
- clang::SourceRange Range;
const clang::Type *BaseType = DstArr->getType().getTypePtr();
slangAssert(BaseType->isArrayType());
@@ -722,11 +735,12 @@
// Init -> "rsIntIter = 0"
clang::DeclRefExpr *RefrsIntIter =
clang::DeclRefExpr::Create(C,
- NULL,
- Range,
+ clang::NestedNameSpecifierLoc(),
IIVD,
Loc,
- C.IntTy);
+ C.IntTy,
+ clang::VK_RValue,
+ NULL);
clang::Expr *Int0 = clang::IntegerLiteral::Create(C,
llvm::APInt(C.getTypeSize(C.IntTy), 0), C.IntTy, Loc);
@@ -736,6 +750,8 @@
Int0,
clang::BO_Assign,
C.IntTy,
+ clang::VK_RValue,
+ clang::OK_Ordinary,
Loc);
// Cond -> "rsIntIter < NumArrayElements"
@@ -747,6 +763,8 @@
NumArrayElementsExpr,
clang::BO_LT,
C.IntTy,
+ clang::VK_RValue,
+ clang::OK_Ordinary,
Loc);
// Inc -> "rsIntIter++"
@@ -754,6 +772,8 @@
new(C) clang::UnaryOperator(RefrsIntIter,
clang::UO_PostInc,
C.IntTy,
+ clang::VK_RValue,
+ clang::OK_Ordinary,
Loc);
// Body -> "rsSetObject(&Dst[rsIntIter], Src[rsIntIter]);"
@@ -771,6 +791,8 @@
new(C) clang::ArraySubscriptExpr(DstArrPtr,
RefrsIntIter,
BaseType->getCanonicalTypeInternal(),
+ clang::VK_RValue,
+ clang::OK_Ordinary,
Loc);
clang::Expr *SrcArrPtr =
@@ -785,6 +807,8 @@
new(C) clang::ArraySubscriptExpr(SrcArrPtr,
RefrsIntIter,
BaseType->getCanonicalTypeInternal(),
+ clang::VK_RValue,
+ clang::OK_Ordinary,
Loc);
RSExportPrimitiveType::DataType DT =
@@ -827,7 +851,6 @@
clang::Expr *LHS,
clang::Expr *RHS,
clang::SourceLocation Loc) {
- clang::SourceRange Range;
clang::QualType QT = LHS->getType();
const clang::Type *T = QT.getTypePtr();
slangAssert(T->isStructureType());
@@ -864,25 +887,27 @@
clang::MemberExpr::Create(C,
LHS,
false,
- NULL,
- Range,
+ clang::NestedNameSpecifierLoc(),
FD,
FoundDecl,
clang::DeclarationNameInfo(),
NULL,
- OrigType->getCanonicalTypeInternal());
+ OrigType->getCanonicalTypeInternal(),
+ clang::VK_RValue,
+ clang::OK_Ordinary);
clang::MemberExpr *SrcMember =
clang::MemberExpr::Create(C,
RHS,
false,
- NULL,
- Range,
+ clang::NestedNameSpecifierLoc(),
FD,
FoundDecl,
clang::DeclarationNameInfo(),
NULL,
- OrigType->getCanonicalTypeInternal());
+ OrigType->getCanonicalTypeInternal(),
+ clang::VK_RValue,
+ clang::OK_Ordinary);
if (FT->isArrayType()) {
FT = FT->getArrayElementTypeNoTypeQual();
@@ -916,7 +941,8 @@
// we just do a straight-up assignment (which will still preserve all
// the proper RS object reference counts).
clang::BinaryOperator *CopyStruct =
- new(C) clang::BinaryOperator(LHS, RHS, clang::BO_Assign, QT, Loc);
+ new(C) clang::BinaryOperator(LHS, RHS, clang::BO_Assign, QT,
+ clang::VK_RValue, clang::OK_Ordinary, Loc);
StmtArray[StmtCount++] = CopyStruct;
clang::CompoundStmt *CS =
@@ -976,11 +1002,12 @@
const clang::Type *T = RSExportType::GetTypeOfDecl(VD);
clang::DeclRefExpr *RefRSVar =
clang::DeclRefExpr::Create(C,
- NULL,
- VD->getQualifierRange(),
+ clang::NestedNameSpecifierLoc(),
VD,
Loc,
- T->getCanonicalTypeInternal());
+ T->getCanonicalTypeInternal(),
+ clang::VK_RValue,
+ NULL);
clang::Stmt *RSSetObjectOps =
CreateStructRSSetObject(C, Diags, RefRSVar, InitExpr, Loc);
@@ -1000,11 +1027,12 @@
clang::Expr *RefRSSetObjectFD =
clang::DeclRefExpr::Create(C,
- NULL,
- SetObjectFD->getQualifierRange(),
+ clang::NestedNameSpecifierLoc(),
SetObjectFD,
Loc,
- SetObjectFDType);
+ SetObjectFDType,
+ clang::VK_RValue,
+ NULL);
clang::Expr *RSSetObjectFP =
clang::ImplicitCastExpr::Create(C,
@@ -1017,16 +1045,19 @@
const clang::Type *T = RSExportType::GetTypeOfDecl(VD);
clang::DeclRefExpr *RefRSVar =
clang::DeclRefExpr::Create(C,
- NULL,
- VD->getQualifierRange(),
+ clang::NestedNameSpecifierLoc(),
VD,
Loc,
- T->getCanonicalTypeInternal());
+ T->getCanonicalTypeInternal(),
+ clang::VK_RValue,
+ NULL);
clang::Expr *ArgList[2];
ArgList[0] = new(C) clang::UnaryOperator(RefRSVar,
clang::UO_AddrOf,
SetObjectFDArgType[0],
+ clang::VK_RValue,
+ clang::OK_Ordinary,
Loc);
ArgList[1] = InitExpr;
@@ -1036,6 +1067,7 @@
ArgList,
2,
SetObjectFD->getCallResultType(),
+ clang::VK_RValue,
Loc);
AppendAfterStmt(C, mCS, DS, RSSetObjectCall);
@@ -1065,21 +1097,21 @@
slangAssert(VD);
clang::ASTContext &C = VD->getASTContext();
clang::DeclContext *DC = VD->getDeclContext();
- clang::SourceRange Range = VD->getQualifierRange();
clang::SourceLocation Loc = VD->getLocation();
const clang::Type *T = RSExportType::GetTypeOfDecl(VD);
// Reference expr to target RS object variable
clang::DeclRefExpr *RefRSVar =
clang::DeclRefExpr::Create(C,
- NULL,
- Range,
+ clang::NestedNameSpecifierLoc(),
VD,
Loc,
- T->getCanonicalTypeInternal());
+ T->getCanonicalTypeInternal(),
+ clang::VK_RValue,
+ NULL);
if (T->isArrayType()) {
- return ClearArrayRSObject(C, DC, RefRSVar, Range, Loc);
+ return ClearArrayRSObject(C, DC, RefRSVar, Loc);
}
RSExportPrimitiveType::DataType DT =
@@ -1087,7 +1119,7 @@
if (DT == RSExportPrimitiveType::DataTypeUnknown ||
DT == RSExportPrimitiveType::DataTypeIsStruct) {
- return ClearStructRSObject(C, DC, RefRSVar, Range, Loc);
+ return ClearStructRSObject(C, DC, RefRSVar, Loc);
}
slangAssert((RSExportPrimitiveType::IsRSObjectType(DT)) &&
diff --git a/slang_rs_pragma_handler.cpp b/slang_rs_pragma_handler.cpp
index 2da2c9d..077ddab 100644
--- a/slang_rs_pragma_handler.cpp
+++ b/slang_rs_pragma_handler.cpp
@@ -90,7 +90,7 @@
if (PragmaToken.isNot(clang::tok::l_paren))
return;
- while (PragmaToken.isNot(clang::tok::eom)) {
+ while (PragmaToken.isNot(clang::tok::eod)) {
// Lex package name
PP.LexUnexpandedToken(PragmaToken);
@@ -100,7 +100,7 @@
PackageName.append(Spelling);
// Pre-mature end (syntax error will be triggered by preprocessor later)
- if (PragmaToken.is(clang::tok::eom) || PragmaToken.is(clang::tok::eof)) {
+ if (PragmaToken.is(clang::tok::eod) || PragmaToken.is(clang::tok::eof)) {
break;
} else {
// Next token is ')' (end of pragma)
@@ -108,10 +108,10 @@
if (NextTok.is(clang::tok::r_paren)) {
mContext->addPragma(this->getName(), PackageName);
mContext->setReflectJavaPackageName(PackageName);
- // Lex until meets clang::tok::eom
+ // Lex until meets clang::tok::eod
do {
PP.LexUnexpandedToken(PragmaToken);
- } while (PragmaToken.isNot(clang::tok::eom));
+ } while (PragmaToken.isNot(clang::tok::eod));
break;
}
}
@@ -191,7 +191,7 @@
if (PragmaToken.isNot(clang::tok::l_paren))
return;
- while (PragmaToken.isNot(clang::tok::eom)) {
+ while (PragmaToken.isNot(clang::tok::eod)) {
// Lex variable name
PP.LexUnexpandedToken(PragmaToken);
if (PragmaToken.is(clang::tok::identifier))
@@ -199,7 +199,7 @@
else
break;
- slangAssert(PragmaToken.isNot(clang::tok::eom));
+ slangAssert(PragmaToken.isNot(clang::tok::eod));
PP.LexUnexpandedToken(PragmaToken);
@@ -217,9 +217,9 @@
PP.LexUnexpandedToken(PragmaToken);
// Should be end immediately
- if (PragmaToken.isNot(clang::tok::eom))
+ if (PragmaToken.isNot(clang::tok::eod))
fprintf(stderr, "RSPragmaHandler::handleNonParamPragma: "
- "expected a clang::tok::eom\n");
+ "expected a clang::tok::eod\n");
return;
}
@@ -293,7 +293,7 @@
do {
PP.LexUnexpandedToken(PragmaToken);
- } while (PragmaToken.isNot(clang::tok::eom));
+ } while (PragmaToken.isNot(clang::tok::eod));
}
} // namespace slang
diff --git a/slang_utils.cpp b/slang_utils.cpp
index a029166..342496f 100644
--- a/slang_utils.cpp
+++ b/slang_utils.cpp
@@ -18,7 +18,7 @@
#include <string>
-#include "llvm/System/Path.h"
+#include "llvm/Support/Path.h"
namespace slang {