diff --git a/driver/plugins.cpp b/driver/plugins.cpp index a96feefaa19..0e4837a02b3 100644 --- a/driver/plugins.cpp +++ b/driver/plugins.cpp @@ -25,6 +25,14 @@ #include "llvm/Support/CommandLine.h" #include "llvm/Support/DynamicLibrary.h" +#if LDC_LLVM_VER >= 1400 +#include "llvm/ADT/SmallVector.h" +#include "llvm/Passes/PassPlugin.h" +#include "llvm/Support/Error.h" + +#include "driver/cl_options.h" +#endif + namespace { namespace cl = llvm::cl; @@ -106,7 +114,7 @@ void loadLLVMPluginNewPM(const std::string &filename) { void loadLLVMPlugin(const std::string &filename) { #if LDC_LLVM_VER >= 1400 - if (opts::isUsingLegacyPassManager()) + if (true /*opts::isUsingLegacyPassManager()*/) loadLLVMPluginLegacyPM(filename); else loadLLVMPluginNewPM(filename); diff --git a/tests/plugins/basic_sema_plugin.d b/tests/plugins/basic_sema_plugin.d index 873c2584df3..26ba60a9095 100644 --- a/tests/plugins/basic_sema_plugin.d +++ b/tests/plugins/basic_sema_plugin.d @@ -10,7 +10,6 @@ //--- plugin.d import dmd.dmodule : Module; import dmd.errors; -import dmd.location; extern(C) void runSemanticAnalysis(Module m) { if (m.md) { diff --git a/tests/plugins/visitor_example.d b/tests/plugins/visitor_example.d index 1b106444e58..066fb12557f 100644 --- a/tests/plugins/visitor_example.d +++ b/tests/plugins/visitor_example.d @@ -11,7 +11,6 @@ //--- plugin.d import dmd.dmodule; import dmd.errors; -import dmd.location; import dmd.visitor; import dmd.declaration; import dmd.dsymbol; @@ -20,13 +19,28 @@ extern(C++) class MyVisitor : SemanticTimeTransitiveVisitor { alias visit = SemanticTimeTransitiveVisitor.visit; override void visit(VarDeclaration vd) { - if (vd.aliasTuple) { - vd.aliasTuple.foreachVar((s) { - auto vardecl = s.isVarDeclaration(); - if (vardecl && vardecl.type.needsDestruction()) { - warning(vardecl.loc, "It works!"); + if (vd.aliassym) { + TupleDeclaration tup = vd.aliassym.isTupleDeclaration(); + visit(tup); + } + } + + override void visit(TupleDeclaration vd) { + import dmd.dtemplate : isDsymbol; + import dmd.root.rootobject; + import dmd.expression; + + for (size_t i = 0; i < vd.objects.dim; i++) { + auto o = (*vd.objects)[i]; + if (o.dyncast() == DYNCAST.expression) { + Expression e = cast(Expression) o; + if (DsymbolExp ve = e.isDsymbolExp()) { + auto vardecl = ve.s.isVarDeclaration(); + if (vardecl && vardecl.type.needsDestruction()) { + warning(vardecl.loc, "It works!"); + } } - }); + } } } }