diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b7244e811556284ced33f1a27c7131c9d11c8f4c..52b8c75cbe604605253f494a5b744193384f8326 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -18,6 +18,7 @@ debian:10 gcc-7-14--expensive:
     DUNECI_CXXFLAGS: -mavx
     DUNECI_TEST_LABELS: ""
     DUNECI_TOOLCHAIN: gcc-7-14
+    DUNE_TEST_EXPECTED_VC_IMPLEMENTATION: AVX
   # require AVX to properly test Vc
   tags: [duneci, "iset:avx"]
   # allowed to fail to e.g. do no hold up a merge when a runner supporting avx
diff --git a/dune/common/test/CMakeLists.txt b/dune/common/test/CMakeLists.txt
index 91cea6180047b5dbd69bfd1e85dd09b2e039f949..77c63862454b3dd00d58d3a2453a20af0067dfe1 100644
--- a/dune/common/test/CMakeLists.txt
+++ b/dune/common/test/CMakeLists.txt
@@ -412,6 +412,12 @@ dune_add_test(SOURCES varianttest.cc
               LINK_LIBRARIES dunecommon
               LABELS quick)
 
+dune_add_test(SOURCES vcexpectedimpltest.cc
+              LINK_LIBRARIES dunecommon
+              LABELS quick
+              CMAKE_GUARD Vc_FOUND)
+add_dune_vc_flags(vcexpectedimpltest)
+
 install(
   FILES
   arithmetictestsuite.hh
diff --git a/dune/common/test/vcexpectedimpltest.cc b/dune/common/test/vcexpectedimpltest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..4da519c6b06c92a33b4a0350900a63566d6d7771
--- /dev/null
+++ b/dune/common/test/vcexpectedimpltest.cc
@@ -0,0 +1,71 @@
+#include "config.h"
+
+#if !HAVE_VC
+#error Inconsistent buildsystem.  This program should not be built in the \
+  absence of Vc.
+#endif
+
+#include <cstdlib>
+#include <map>
+#include <iostream>
+#include <string>
+
+#include <dune/common/exceptions.hh>
+#include <dune/common/vc.hh>
+
+const std::map<Vc::Implementation, std::string> impl_names = {
+  {Vc::ScalarImpl, "Scalar" },
+  {Vc::SSE2Impl,   "SSE2"   },
+  {Vc::SSE3Impl,   "SSE3"   },
+  {Vc::SSSE3Impl,  "SSSE3"  },
+  {Vc::SSE41Impl,  "SSE41"  },
+  {Vc::SSE42Impl,  "SSE42"  },
+  {Vc::AVXImpl,    "AVX"    },
+  {Vc::AVX2Impl,   "AVX2"   },
+  {Vc::MICImpl,    "MIC"    },
+};
+
+const std::string expected_var = "DUNE_TEST_EXPECTED_VC_IMPLEMENTATION";
+
+int main()
+{
+
+  auto p = impl_names.find(Vc::CurrentImplementation::current());
+  if(p == impl_names.end())
+    DUNE_THROW(Dune::NotImplemented, "Unexpected current implementation value "
+               << Vc::CurrentImplementation::current());
+  auto current_impl = p->second;
+
+  std::cout << "The current Vc implementation is " << current_impl
+            << std::endl;
+
+  std::string expected_impl;
+  if(auto env_impl = std::getenv(expected_var.c_str()))
+    expected_impl = env_impl;
+
+  if(expected_impl.empty())
+  {
+    std::cerr << "No expected vc imlementation provided, skipping test\n"
+              << "Please set " << expected_var
+              << " environment variable to one of the following values:";
+    for(const auto &item : impl_names)
+      std::cerr << ' ' << item.second;
+    std::cerr << std::endl;
+    return 77;
+  }
+
+  std::cout << "The expected Vc implementation is " << expected_impl
+            << std::endl;
+
+  if(current_impl == expected_impl) {
+    std::cout << "OK: Current and expected Vc implementation match"
+              << std::endl;
+    return 0;
+  }
+  else {
+    std::cout << "Error: Current Vc implementation does not match expected"
+              << std::endl;
+    return 1;
+  }
+
+}