diff --git a/clang_delta/Makefile.am b/clang_delta/Makefile.am
index 4c94610..48f8f88 100644
--- a/clang_delta/Makefile.am
+++ b/clang_delta/Makefile.am
@@ -48,7 +48,7 @@ clang_delta_CXXFLAGS = \
 clang_delta_LDADD = \
        -lclangFrontendTool -lclangFrontend -lclangDriver -lclangSerialization \
        -lclangCodeGen -lclangParse -lclangSema -lclangAnalysis \
-       -lclangRewriteCore -lclangAST -lclangLex -lclangBasic -lclangEdit \
+       -lclangRewriteCore -lclangAST -lclangBasic -lclangEdit -lclangLex \
        $(LLVMLIBS) \
        $(LLVMLDFLAGS)

diff --git a/clang_delta/RemoveCtorInitializer.cpp b/clang_delta/RemoveCtorInitializer.cpp
index 31a5a23..0bbb51a 100644
--- a/clang_delta/RemoveCtorInitializer.cpp
+++ b/clang_delta/RemoveCtorInitializer.cpp
@@ -124,7 +124,7 @@ bool RemoveCtorInitializer::isValidType(const Type *Ty)
     const CXXRecordDecl *CXXRD = dyn_cast<CXXRecordDecl>(RTy->getDecl());
     if (!CXXRD)
       return true;
-    return CXXRD->hasDeclaredDefaultConstructor();
+    return CXXRD->hasDefaultConstructor() && !CXXRD->needsImplicitDefaultConstructor();
   }
   return true;
 }
diff --git a/clang_delta/RemoveNamespace.cpp b/clang_delta/RemoveNamespace.cpp
index 6b505c1..6324b3c 100644
--- a/clang_delta/RemoveNamespace.cpp
+++ b/clang_delta/RemoveNamespace.cpp
@@ -732,7 +732,7 @@ bool RemoveNamespace::hasNameConflict(const NamedDecl *ND,
 
   DeclarationName Name = ND->getDeclName();
   DeclContextLookupConstResult Result = ParentCtx->lookup(Name);
-  return (Result.first != Result.second);
+  return !Result.empty();
 }
 
 // We always prepend the Prefix string to EnumConstantDecl if ParentCtx
diff --git a/clang_delta/Transformation.cpp b/clang_delta/Transformation.cpp
index 7c712b9..b86cf85 100644
--- a/clang_delta/Transformation.cpp
+++ b/clang_delta/Transformation.cpp
@@ -451,7 +451,7 @@ const FunctionDecl *Transformation::lookupFunctionDeclInGlobal(
         DeclarationName &DName, const DeclContext *Ctx)
 {
   DeclContext::lookup_const_result Result = Ctx->lookup(DName);
-  for (DeclContext::lookup_const_iterator I = Result.first, E = Result.second;
+  for (DeclContext::lookup_const_iterator I = Result.begin(), E = Result.end();
        I != E; ++I) {
     if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
       return FD;
@@ -494,7 +494,7 @@ const FunctionDecl *Transformation::lookupFunctionDecl(
         DeclarationName &DName, const DeclContext *Ctx)
 {
   DeclContext::lookup_const_result Result = Ctx->lookup(DName);
-  for (DeclContext::lookup_const_iterator I = Result.first, E = Result.second;
+  for (DeclContext::lookup_const_iterator I = Result.begin(), E = Result.end();
        I != E; ++I) {
     if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {
       return FD;
diff --git a/clang_delta/TransformationManager.cpp b/clang_delta/TransformationManager.cpp
index aeaee14..9cdc548 100644
--- a/clang_delta/TransformationManager.cpp
+++ b/clang_delta/TransformationManager.cpp
@@ -87,7 +87,7 @@ bool TransformationManager::initializeCompilerInstance(std::string &Erro
   ClangInstance = new CompilerInstance();
   assert(ClangInstance);
   
-  ClangInstance->createDiagnostics(0, NULL);
+  ClangInstance->createDiagnostics();
 
   CompilerInvocation &Invocation = ClangInstance->getInvocation();
   InputKind IK = FrontendOptions::getInputKindForExtension(
@@ -110,7 +110,7 @@ bool TransformationManager::initializeCompilerInstance(std::string &Er
   TargetOpts.Triple = LLVM_DEFAULT_TARGET_TRIPLE;
   TargetInfo *Target = 
     TargetInfo::CreateTargetInfo(ClangInstance->getDiagnostics(),
-                                 TargetOpts);
+                                 &TargetOpts);
   ClangInstance->setTarget(Target);
   ClangInstance->createFileManager();
   ClangInstance->createSourceManager(ClangInstance->getFileManager());
diff --git a/m4/ax_llvm.m4 b/m4/ax_llvm.m4
index 100607f..8340b17 100644
--- a/m4/ax_llvm.m4
+++ b/m4/ax_llvm.m4
@@ -78,8 +78,8 @@ AC_DEFUN([AX_LLVM],
       AC_LANG_PUSH([C++])
       AC_LINK_IFELSE([
         AC_LANG_PROGRAM(
-          [[@%:@include <llvm/LLVMContext.h>
-@%:@include <llvm/Module.h>]],
+          [[@%:@include <llvm/IR/LLVMContext.h>
+@%:@include <llvm/IR/Module.h>]],
           [[llvm::LLVMContext context;
 llvm::Module *M = new llvm::Module("test", context);]])],
         ax_cv_llvm=yes,

