Index: polly/unittests/DeLICM/DeLICMTest.cpp
===================================================================
--- polly/unittests/DeLICM/DeLICMTest.cpp
+++ polly/unittests/DeLICM/DeLICMTest.cpp
@@ -80,13 +80,13 @@
 
 isl::union_set parseSetOrNull(isl_ctx *Ctx, const char *Str) {
   if (!Str)
-    return nullptr;
+    return {};
   return isl::union_set(Ctx, Str);
 }
 
 isl::union_map parseMapOrNull(isl_ctx *Ctx, const char *Str) {
   if (!Str)
-    return nullptr;
+    return {};
   return isl::union_map(Ctx, Str);
 }
 
Index: polly/lib/Transform/ZoneAlgo.cpp
===================================================================
--- polly/lib/Transform/ZoneAlgo.cpp
+++ polly/lib/Transform/ZoneAlgo.cpp
@@ -546,7 +546,7 @@
   // flow.
   isl::set DefinedContext = S->getDefinedBehaviorContext();
   if (!DefinedContext)
-    return nullptr;
+    return {};
 
   assert(SAI->isPHIKind());
 
@@ -729,7 +729,7 @@
 
 isl::id ZoneAlgorithm::makeValueId(Value *V) {
   if (!V)
-    return nullptr;
+    return {};
 
   auto &Id = ValueIds[V];
   if (Id.is_null()) {
Index: polly/lib/Transform/ScheduleOptimizer.cpp
===================================================================
--- polly/lib/Transform/ScheduleOptimizer.cpp
+++ polly/lib/Transform/ScheduleOptimizer.cpp
@@ -547,8 +547,6 @@
 
   explicit IslScheduleOptimizerWrapperPass() : ScopPass(ID) {}
 
-  ~IslScheduleOptimizerWrapperPass() override { releaseMemory(); }
-
   /// Optimize the schedule of the SCoP @p S.
   bool runOnScop(Scop &S) override;
 
@@ -560,7 +558,7 @@
 
   /// Release the internal memory.
   void releaseMemory() override {
-    LastSchedule = nullptr;
+    LastSchedule = {};
     IslCtx.reset();
   }
 
Index: polly/lib/Transform/ForwardOpTree.cpp
===================================================================
--- polly/lib/Transform/ForwardOpTree.cpp
+++ polly/lib/Transform/ForwardOpTree.cpp
@@ -365,9 +365,9 @@
 
     if (!Known || !Translator || !NormalizeMap) {
       assert(isl_ctx_last_error(IslCtx.get()) == isl_error_quota);
-      Known = nullptr;
-      Translator = nullptr;
-      NormalizeMap = nullptr;
+      Known = {};
+      Translator = {};
+      NormalizeMap = {};
       LLVM_DEBUG(dbgs() << "Known analysis exceeded max_operations\n");
       return false;
     }
Index: polly/lib/Transform/FlattenSchedule.cpp
===================================================================
--- polly/lib/Transform/FlattenSchedule.cpp
+++ polly/lib/Transform/FlattenSchedule.cpp
@@ -90,7 +90,7 @@
   }
 
   virtual void releaseMemory() override {
-    OldSchedule = nullptr;
+    OldSchedule = {};
     IslCtx.reset();
   }
 };
Index: polly/lib/Transform/FlattenAlgo.cpp
===================================================================
--- polly/lib/Transform/FlattenAlgo.cpp
+++ polly/lib/Transform/FlattenAlgo.cpp
@@ -185,7 +185,7 @@
   // Would cause an infinite loop.
   if (!isDimBoundedByConstant(ScatterSet, 0)) {
     LLVM_DEBUG(dbgs() << "Abort; dimension is not of fixed size\n");
-    return nullptr;
+    return {};
   }
 
   auto AllDomains = Schedule.domain();
@@ -216,7 +216,7 @@
 
     if (!isDimBoundedByParameter(FirstSubScatter, 0)) {
       LLVM_DEBUG(dbgs() << "Abort; sequence step is not bounded\n");
-      return nullptr;
+      return {};
     }
 
     auto FirstSubScatterMap = isl::map::from_range(FirstSubScatter);
@@ -275,7 +275,7 @@
 
   if (!isDimBoundedByConstant(SubExtent, 0)) {
     LLVM_DEBUG(dbgs() << "Abort; dimension not bounded by constant\n");
-    return nullptr;
+    return {};
   }
 
   auto Min = SubExtent.dim_min(0);
@@ -287,7 +287,7 @@
 
   if (!MinVal || !MaxVal || MinVal.is_nan() || MaxVal.is_nan()) {
     LLVM_DEBUG(dbgs() << "Abort; dimension bounds could not be determined\n");
-    return nullptr;
+    return {};
   }
 
   auto FirstSubScheduleAff = scheduleExtractDimAff(SubSchedule, 0);
Index: polly/lib/Transform/DeLICM.cpp
===================================================================
--- polly/lib/Transform/DeLICM.cpp
+++ polly/lib/Transform/DeLICM.cpp
@@ -730,8 +730,7 @@
     auto DefEltSched = ValInst.apply_domain(WrittenTranslator);
     simplify(DefEltSched);
 
-    Knowledge Proposed(EltZone, nullptr, filterKnownValInst(EltKnown),
-                       DefEltSched);
+    Knowledge Proposed(EltZone, {}, filterKnownValInst(EltKnown), DefEltSched);
     if (isConflicting(Proposed))
       return false;
 
@@ -942,7 +941,7 @@
     auto Occupied = LifetimeTranslator.range();
     simplify(Occupied);
 
-    Knowledge Proposed(Occupied, nullptr, EltLifetimeInst, Written);
+    Knowledge Proposed(Occupied, {}, EltLifetimeInst, Written);
     if (isConflicting(Proposed))
       return false;
 
@@ -1219,7 +1218,7 @@
       return false;
     }
 
-    Zone = OriginalZone = Knowledge(nullptr, EltUnused, EltKnown, EltWritten);
+    Zone = OriginalZone = Knowledge({}, EltUnused, EltKnown, EltWritten);
     LLVM_DEBUG(dbgs() << "Computed Zone:\n"; OriginalZone.print(dbgs(), 4));
 
     assert(Zone.isUsable() && OriginalZone.isUsable());
Index: polly/lib/Support/ISLTools.cpp
===================================================================
--- polly/lib/Support/ISLTools.cpp
+++ polly/lib/Support/ISLTools.cpp
@@ -133,7 +133,7 @@
 
 isl::map polly::singleton(isl::union_map UMap, isl::space ExpectedSpace) {
   if (!UMap)
-    return nullptr;
+    return {};
 
   if (isl_union_map_n_map(UMap.get()) == 0)
     return isl::map::empty(ExpectedSpace);
@@ -146,7 +146,7 @@
 
 isl::set polly::singleton(isl::union_set USet, isl::space ExpectedSpace) {
   if (!USet)
-    return nullptr;
+    return {};
 
   if (isl_union_set_n_set(USet.get()) == 0)
     return isl::set::empty(ExpectedSpace);
@@ -170,7 +170,7 @@
 
 isl::space polly::getScatterSpace(const isl::union_map &Schedule) {
   if (!Schedule)
-    return nullptr;
+    return {};
   unsigned Dims = getNumScatterDims(Schedule);
   isl::space ScatterSpace = Schedule.get_space().set_from_params();
   return ScatterSpace.add_dims(isl::dim::set, Dims);
Index: polly/lib/External/isl/include/isl/isl-noexceptions.h
===================================================================
--- polly/lib/External/isl/include/isl/isl-noexceptions.h
+++ polly/lib/External/isl/include/isl/isl-noexceptions.h
@@ -236,7 +236,6 @@
 public:
   inline /* implicit */ aff();
   inline /* implicit */ aff(const aff &obj);
-  inline /* implicit */ aff(std::nullptr_t);
   inline explicit aff(ctx ctx, const std::string &str);
   inline explicit aff(local_space ls, val val);
   inline explicit aff(local_space ls);
@@ -343,7 +342,6 @@
 public:
   inline /* implicit */ aff_list();
   inline /* implicit */ aff_list(const aff_list &obj);
-  inline /* implicit */ aff_list(std::nullptr_t);
   inline aff_list &operator=(aff_list obj);
   inline ~aff_list();
   inline __isl_give isl_aff_list *copy() const &;
@@ -388,7 +386,6 @@
 public:
   inline /* implicit */ ast_build();
   inline /* implicit */ ast_build(const ast_build &obj);
-  inline /* implicit */ ast_build(std::nullptr_t);
   inline explicit ast_build(ctx ctx);
   inline ast_build &operator=(ast_build obj);
   inline ~ast_build();
@@ -430,7 +427,6 @@
 public:
   inline /* implicit */ ast_expr();
   inline /* implicit */ ast_expr(const ast_expr &obj);
-  inline /* implicit */ ast_expr(std::nullptr_t);
   inline ast_expr &operator=(ast_expr obj);
   inline ~ast_expr();
   inline __isl_give isl_ast_expr *copy() const &;
@@ -489,7 +485,6 @@
 public:
   inline /* implicit */ ast_expr_list();
   inline /* implicit */ ast_expr_list(const ast_expr_list &obj);
-  inline /* implicit */ ast_expr_list(std::nullptr_t);
   inline ast_expr_list &operator=(ast_expr_list obj);
   inline ~ast_expr_list();
   inline __isl_give isl_ast_expr_list *copy() const &;
@@ -534,7 +529,6 @@
 public:
   inline /* implicit */ ast_node();
   inline /* implicit */ ast_node(const ast_node &obj);
-  inline /* implicit */ ast_node(std::nullptr_t);
   inline ast_node &operator=(ast_node obj);
   inline ~ast_node();
   inline __isl_give isl_ast_node *copy() const &;
@@ -585,7 +579,6 @@
 public:
   inline /* implicit */ ast_node_list();
   inline /* implicit */ ast_node_list(const ast_node_list &obj);
-  inline /* implicit */ ast_node_list(std::nullptr_t);
   inline ast_node_list &operator=(ast_node_list obj);
   inline ~ast_node_list();
   inline __isl_give isl_ast_node_list *copy() const &;
@@ -630,7 +623,6 @@
 public:
   inline /* implicit */ basic_map();
   inline /* implicit */ basic_map(const basic_map &obj);
-  inline /* implicit */ basic_map(std::nullptr_t);
   inline explicit basic_map(ctx ctx, const std::string &str);
   inline basic_map &operator=(basic_map obj);
   inline ~basic_map();
@@ -765,7 +757,6 @@
 public:
   inline /* implicit */ basic_map_list();
   inline /* implicit */ basic_map_list(const basic_map_list &obj);
-  inline /* implicit */ basic_map_list(std::nullptr_t);
   inline basic_map_list &operator=(basic_map_list obj);
   inline ~basic_map_list();
   inline __isl_give isl_basic_map_list *copy() const &;
@@ -810,7 +801,6 @@
 public:
   inline /* implicit */ basic_set();
   inline /* implicit */ basic_set(const basic_set &obj);
-  inline /* implicit */ basic_set(std::nullptr_t);
   inline /* implicit */ basic_set(point pnt);
   inline explicit basic_set(ctx ctx, const std::string &str);
   inline basic_set &operator=(basic_set obj);
@@ -917,7 +907,6 @@
 public:
   inline /* implicit */ basic_set_list();
   inline /* implicit */ basic_set_list(const basic_set_list &obj);
-  inline /* implicit */ basic_set_list(std::nullptr_t);
   inline basic_set_list &operator=(basic_set_list obj);
   inline ~basic_set_list();
   inline __isl_give isl_basic_set_list *copy() const &;
@@ -963,7 +952,6 @@
 public:
   inline /* implicit */ constraint();
   inline /* implicit */ constraint(const constraint &obj);
-  inline /* implicit */ constraint(std::nullptr_t);
   inline constraint &operator=(constraint obj);
   inline ~constraint();
   inline __isl_give isl_constraint *copy() const &;
@@ -1012,7 +1000,6 @@
 public:
   inline /* implicit */ constraint_list();
   inline /* implicit */ constraint_list(const constraint_list &obj);
-  inline /* implicit */ constraint_list(std::nullptr_t);
   inline constraint_list &operator=(constraint_list obj);
   inline ~constraint_list();
   inline __isl_give isl_constraint_list *copy() const &;
@@ -1057,7 +1044,6 @@
 public:
   inline /* implicit */ fixed_box();
   inline /* implicit */ fixed_box(const fixed_box &obj);
-  inline /* implicit */ fixed_box(std::nullptr_t);
   inline fixed_box &operator=(fixed_box obj);
   inline ~fixed_box();
   inline __isl_give isl_fixed_box *copy() const &;
@@ -1091,7 +1077,6 @@
 public:
   inline /* implicit */ id();
   inline /* implicit */ id(const id &obj);
-  inline /* implicit */ id(std::nullptr_t);
   inline explicit id(ctx ctx, const std::string &str);
   inline id &operator=(id obj);
   inline ~id();
@@ -1126,7 +1111,6 @@
 public:
   inline /* implicit */ id_list();
   inline /* implicit */ id_list(const id_list &obj);
-  inline /* implicit */ id_list(std::nullptr_t);
   inline id_list &operator=(id_list obj);
   inline ~id_list();
   inline __isl_give isl_id_list *copy() const &;
@@ -1171,7 +1155,6 @@
 public:
   inline /* implicit */ id_to_ast_expr();
   inline /* implicit */ id_to_ast_expr(const id_to_ast_expr &obj);
-  inline /* implicit */ id_to_ast_expr(std::nullptr_t);
   inline id_to_ast_expr &operator=(id_to_ast_expr obj);
   inline ~id_to_ast_expr();
   inline __isl_give isl_id_to_ast_expr *copy() const &;
@@ -1206,7 +1189,6 @@
 public:
   inline /* implicit */ local_space();
   inline /* implicit */ local_space(const local_space &obj);
-  inline /* implicit */ local_space(std::nullptr_t);
   inline explicit local_space(space space);
   inline local_space &operator=(local_space obj);
   inline ~local_space();
@@ -1260,7 +1242,6 @@
 public:
   inline /* implicit */ map();
   inline /* implicit */ map(const map &obj);
-  inline /* implicit */ map(std::nullptr_t);
   inline /* implicit */ map(basic_map bmap);
   inline explicit map(ctx ctx, const std::string &str);
   inline map &operator=(map obj);
@@ -1477,7 +1458,6 @@
 public:
   inline /* implicit */ map_list();
   inline /* implicit */ map_list(const map_list &obj);
-  inline /* implicit */ map_list(std::nullptr_t);
   inline map_list &operator=(map_list obj);
   inline ~map_list();
   inline __isl_give isl_map_list *copy() const &;
@@ -1522,7 +1502,6 @@
 public:
   inline /* implicit */ mat();
   inline /* implicit */ mat(const mat &obj);
-  inline /* implicit */ mat(std::nullptr_t);
   inline mat &operator=(mat obj);
   inline ~mat();
   inline __isl_give isl_mat *copy() const &;
@@ -1591,7 +1570,6 @@
 public:
   inline /* implicit */ multi_aff();
   inline /* implicit */ multi_aff(const multi_aff &obj);
-  inline /* implicit */ multi_aff(std::nullptr_t);
   inline /* implicit */ multi_aff(aff aff);
   inline explicit multi_aff(space space, aff_list list);
   inline explicit multi_aff(ctx ctx, const std::string &str);
@@ -1699,7 +1677,6 @@
 public:
   inline /* implicit */ multi_id();
   inline /* implicit */ multi_id(const multi_id &obj);
-  inline /* implicit */ multi_id(std::nullptr_t);
   inline explicit multi_id(space space, id_list list);
   inline explicit multi_id(ctx ctx, const std::string &str);
   inline multi_id &operator=(multi_id obj);
@@ -1751,7 +1728,6 @@
 public:
   inline /* implicit */ multi_pw_aff();
   inline /* implicit */ multi_pw_aff(const multi_pw_aff &obj);
-  inline /* implicit */ multi_pw_aff(std::nullptr_t);
   inline /* implicit */ multi_pw_aff(aff aff);
   inline /* implicit */ multi_pw_aff(multi_aff ma);
   inline /* implicit */ multi_pw_aff(pw_aff pa);
@@ -1870,7 +1846,6 @@
 public:
   inline /* implicit */ multi_union_pw_aff();
   inline /* implicit */ multi_union_pw_aff(const multi_union_pw_aff &obj);
-  inline /* implicit */ multi_union_pw_aff(std::nullptr_t);
   inline /* implicit */ multi_union_pw_aff(multi_pw_aff mpa);
   inline /* implicit */ multi_union_pw_aff(union_pw_aff upa);
   inline explicit multi_union_pw_aff(space space, union_pw_aff_list list);
@@ -1970,7 +1945,6 @@
 public:
   inline /* implicit */ multi_val();
   inline /* implicit */ multi_val(const multi_val &obj);
-  inline /* implicit */ multi_val(std::nullptr_t);
   inline explicit multi_val(space space, val_list list);
   inline explicit multi_val(ctx ctx, const std::string &str);
   inline multi_val &operator=(multi_val obj);
@@ -2055,7 +2029,6 @@
 public:
   inline /* implicit */ point();
   inline /* implicit */ point(const point &obj);
-  inline /* implicit */ point(std::nullptr_t);
   inline explicit point(space dim);
   inline point &operator=(point obj);
   inline ~point();
@@ -2092,7 +2065,6 @@
 public:
   inline /* implicit */ pw_aff();
   inline /* implicit */ pw_aff(const pw_aff &obj);
-  inline /* implicit */ pw_aff(std::nullptr_t);
   inline /* implicit */ pw_aff(aff aff);
   inline explicit pw_aff(ctx ctx, const std::string &str);
   inline explicit pw_aff(set domain, val v);
@@ -2218,7 +2190,6 @@
 public:
   inline /* implicit */ pw_aff_list();
   inline /* implicit */ pw_aff_list(const pw_aff_list &obj);
-  inline /* implicit */ pw_aff_list(std::nullptr_t);
   inline pw_aff_list &operator=(pw_aff_list obj);
   inline ~pw_aff_list();
   inline __isl_give isl_pw_aff_list *copy() const &;
@@ -2271,7 +2242,6 @@
 public:
   inline /* implicit */ pw_multi_aff();
   inline /* implicit */ pw_multi_aff(const pw_multi_aff &obj);
-  inline /* implicit */ pw_multi_aff(std::nullptr_t);
   inline /* implicit */ pw_multi_aff(multi_aff ma);
   inline /* implicit */ pw_multi_aff(pw_aff pa);
   inline explicit pw_multi_aff(ctx ctx, const std::string &str);
@@ -2381,7 +2351,6 @@
 public:
   inline /* implicit */ pw_multi_aff_list();
   inline /* implicit */ pw_multi_aff_list(const pw_multi_aff_list &obj);
-  inline /* implicit */ pw_multi_aff_list(std::nullptr_t);
   inline pw_multi_aff_list &operator=(pw_multi_aff_list obj);
   inline ~pw_multi_aff_list();
   inline __isl_give isl_pw_multi_aff_list *copy() const &;
@@ -2426,7 +2395,6 @@
 public:
   inline /* implicit */ pw_qpolynomial();
   inline /* implicit */ pw_qpolynomial(const pw_qpolynomial &obj);
-  inline /* implicit */ pw_qpolynomial(std::nullptr_t);
   inline explicit pw_qpolynomial(ctx ctx, const std::string &str);
   inline pw_qpolynomial &operator=(pw_qpolynomial obj);
   inline ~pw_qpolynomial();
@@ -2507,7 +2475,6 @@
 public:
   inline /* implicit */ pw_qpolynomial_fold_list();
   inline /* implicit */ pw_qpolynomial_fold_list(const pw_qpolynomial_fold_list &obj);
-  inline /* implicit */ pw_qpolynomial_fold_list(std::nullptr_t);
   inline pw_qpolynomial_fold_list &operator=(pw_qpolynomial_fold_list obj);
   inline ~pw_qpolynomial_fold_list();
   inline __isl_give isl_pw_qpolynomial_fold_list *copy() const &;
@@ -2537,7 +2504,6 @@
 public:
   inline /* implicit */ pw_qpolynomial_list();
   inline /* implicit */ pw_qpolynomial_list(const pw_qpolynomial_list &obj);
-  inline /* implicit */ pw_qpolynomial_list(std::nullptr_t);
   inline pw_qpolynomial_list &operator=(pw_qpolynomial_list obj);
   inline ~pw_qpolynomial_list();
   inline __isl_give isl_pw_qpolynomial_list *copy() const &;
@@ -2582,7 +2548,6 @@
 public:
   inline /* implicit */ qpolynomial();
   inline /* implicit */ qpolynomial(const qpolynomial &obj);
-  inline /* implicit */ qpolynomial(std::nullptr_t);
   inline qpolynomial &operator=(qpolynomial obj);
   inline ~qpolynomial();
   inline __isl_give isl_qpolynomial *copy() const &;
@@ -2651,7 +2616,6 @@
 public:
   inline /* implicit */ qpolynomial_list();
   inline /* implicit */ qpolynomial_list(const qpolynomial_list &obj);
-  inline /* implicit */ qpolynomial_list(std::nullptr_t);
   inline qpolynomial_list &operator=(qpolynomial_list obj);
   inline ~qpolynomial_list();
   inline __isl_give isl_qpolynomial_list *copy() const &;
@@ -2696,7 +2660,6 @@
 public:
   inline /* implicit */ schedule();
   inline /* implicit */ schedule(const schedule &obj);
-  inline /* implicit */ schedule(std::nullptr_t);
   inline explicit schedule(ctx ctx, const std::string &str);
   inline schedule &operator=(schedule obj);
   inline ~schedule();
@@ -2742,7 +2705,6 @@
 public:
   inline /* implicit */ schedule_constraints();
   inline /* implicit */ schedule_constraints(const schedule_constraints &obj);
-  inline /* implicit */ schedule_constraints(std::nullptr_t);
   inline explicit schedule_constraints(ctx ctx, const std::string &str);
   inline schedule_constraints &operator=(schedule_constraints obj);
   inline ~schedule_constraints();
@@ -2788,7 +2750,6 @@
 public:
   inline /* implicit */ schedule_node();
   inline /* implicit */ schedule_node(const schedule_node &obj);
-  inline /* implicit */ schedule_node(std::nullptr_t);
   inline schedule_node &operator=(schedule_node obj);
   inline ~schedule_node();
   inline __isl_give isl_schedule_node *copy() const &;
@@ -2878,7 +2839,6 @@
 public:
   inline /* implicit */ set();
   inline /* implicit */ set(const set &obj);
-  inline /* implicit */ set(std::nullptr_t);
   inline /* implicit */ set(basic_set bset);
   inline /* implicit */ set(point pnt);
   inline explicit set(union_set uset);
@@ -3065,7 +3025,6 @@
 public:
   inline /* implicit */ set_list();
   inline /* implicit */ set_list(const set_list &obj);
-  inline /* implicit */ set_list(std::nullptr_t);
   inline set_list &operator=(set_list obj);
   inline ~set_list();
   inline __isl_give isl_set_list *copy() const &;
@@ -3111,7 +3070,6 @@
 public:
   inline /* implicit */ space();
   inline /* implicit */ space(const space &obj);
-  inline /* implicit */ space(std::nullptr_t);
   inline explicit space(ctx ctx, unsigned int nparam, unsigned int n_in, unsigned int n_out);
   inline explicit space(ctx ctx, unsigned int nparam, unsigned int dim);
   inline space &operator=(space obj);
@@ -3217,7 +3175,6 @@
 public:
   inline /* implicit */ term();
   inline /* implicit */ term(const term &obj);
-  inline /* implicit */ term(std::nullptr_t);
   inline term &operator=(term obj);
   inline ~term();
   inline __isl_give isl_term *copy() const &;
@@ -3249,7 +3206,6 @@
 public:
   inline /* implicit */ union_access_info();
   inline /* implicit */ union_access_info(const union_access_info &obj);
-  inline /* implicit */ union_access_info(std::nullptr_t);
   inline explicit union_access_info(union_map sink);
   inline union_access_info &operator=(union_access_info obj);
   inline ~union_access_info();
@@ -3285,7 +3241,6 @@
 public:
   inline /* implicit */ union_flow();
   inline /* implicit */ union_flow(const union_flow &obj);
-  inline /* implicit */ union_flow(std::nullptr_t);
   inline union_flow &operator=(union_flow obj);
   inline ~union_flow();
   inline __isl_give isl_union_flow *copy() const &;
@@ -3320,7 +3275,6 @@
 public:
   inline /* implicit */ union_map();
   inline /* implicit */ union_map(const union_map &obj);
-  inline /* implicit */ union_map(std::nullptr_t);
   inline /* implicit */ union_map(basic_map bmap);
   inline /* implicit */ union_map(map map);
   inline explicit union_map(union_pw_multi_aff upma);
@@ -3465,7 +3419,6 @@
 public:
   inline /* implicit */ union_map_list();
   inline /* implicit */ union_map_list(const union_map_list &obj);
-  inline /* implicit */ union_map_list(std::nullptr_t);
   inline union_map_list &operator=(union_map_list obj);
   inline ~union_map_list();
   inline __isl_give isl_union_map_list *copy() const &;
@@ -3510,7 +3463,6 @@
 public:
   inline /* implicit */ union_pw_aff();
   inline /* implicit */ union_pw_aff(const union_pw_aff &obj);
-  inline /* implicit */ union_pw_aff(std::nullptr_t);
   inline /* implicit */ union_pw_aff(aff aff);
   inline /* implicit */ union_pw_aff(pw_aff pa);
   inline explicit union_pw_aff(ctx ctx, const std::string &str);
@@ -3587,7 +3539,6 @@
 public:
   inline /* implicit */ union_pw_aff_list();
   inline /* implicit */ union_pw_aff_list(const union_pw_aff_list &obj);
-  inline /* implicit */ union_pw_aff_list(std::nullptr_t);
   inline union_pw_aff_list &operator=(union_pw_aff_list obj);
   inline ~union_pw_aff_list();
   inline __isl_give isl_union_pw_aff_list *copy() const &;
@@ -3632,7 +3583,6 @@
 public:
   inline /* implicit */ union_pw_multi_aff();
   inline /* implicit */ union_pw_multi_aff(const union_pw_multi_aff &obj);
-  inline /* implicit */ union_pw_multi_aff(std::nullptr_t);
   inline /* implicit */ union_pw_multi_aff(aff aff);
   inline explicit union_pw_multi_aff(union_set uset);
   inline /* implicit */ union_pw_multi_aff(multi_aff ma);
@@ -3718,7 +3668,6 @@
 public:
   inline /* implicit */ union_pw_multi_aff_list();
   inline /* implicit */ union_pw_multi_aff_list(const union_pw_multi_aff_list &obj);
-  inline /* implicit */ union_pw_multi_aff_list(std::nullptr_t);
   inline union_pw_multi_aff_list &operator=(union_pw_multi_aff_list obj);
   inline ~union_pw_multi_aff_list();
   inline __isl_give isl_union_pw_multi_aff_list *copy() const &;
@@ -3763,7 +3712,6 @@
 public:
   inline /* implicit */ union_pw_qpolynomial();
   inline /* implicit */ union_pw_qpolynomial(const union_pw_qpolynomial &obj);
-  inline /* implicit */ union_pw_qpolynomial(std::nullptr_t);
   inline explicit union_pw_qpolynomial(ctx ctx, const std::string &str);
   inline union_pw_qpolynomial &operator=(union_pw_qpolynomial obj);
   inline ~union_pw_qpolynomial();
@@ -3831,7 +3779,6 @@
 public:
   inline /* implicit */ union_set();
   inline /* implicit */ union_set(const union_set &obj);
-  inline /* implicit */ union_set(std::nullptr_t);
   inline /* implicit */ union_set(basic_set bset);
   inline /* implicit */ union_set(point pnt);
   inline /* implicit */ union_set(set set);
@@ -3926,7 +3873,6 @@
 public:
   inline /* implicit */ union_set_list();
   inline /* implicit */ union_set_list(const union_set_list &obj);
-  inline /* implicit */ union_set_list(std::nullptr_t);
   inline union_set_list &operator=(union_set_list obj);
   inline ~union_set_list();
   inline __isl_give isl_union_set_list *copy() const &;
@@ -3972,7 +3918,6 @@
 public:
   inline /* implicit */ val();
   inline /* implicit */ val(const val &obj);
-  inline /* implicit */ val(std::nullptr_t);
   inline explicit val(ctx ctx, long i);
   inline explicit val(ctx ctx, const std::string &str);
   inline val &operator=(val obj);
@@ -4058,7 +4003,6 @@
 public:
   inline /* implicit */ val_list();
   inline /* implicit */ val_list(const val_list &obj);
-  inline /* implicit */ val_list(std::nullptr_t);
   inline val_list &operator=(val_list obj);
   inline ~val_list();
   inline __isl_give isl_val_list *copy() const &;
@@ -4103,7 +4047,6 @@
 public:
   inline /* implicit */ vec();
   inline /* implicit */ vec(const vec &obj);
-  inline /* implicit */ vec(std::nullptr_t);
   inline vec &operator=(vec obj);
   inline ~vec();
   inline __isl_give isl_vec *copy() const &;
@@ -4158,8 +4101,6 @@
 {
   ptr = obj.copy();
 }
-aff::aff(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 aff::aff(__isl_take isl_aff *ptr)
@@ -4693,8 +4634,6 @@
 {
   ptr = obj.copy();
 }
-aff_list::aff_list(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 aff_list::aff_list(__isl_take isl_aff_list *ptr)
@@ -4866,8 +4805,6 @@
 {
   ptr = obj.copy();
 }
-ast_build::ast_build(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 ast_build::ast_build(__isl_take isl_ast_build *ptr)
@@ -5011,8 +4948,6 @@
 {
   ptr = obj.copy();
 }
-ast_expr::ast_expr(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 ast_expr::ast_expr(__isl_take isl_ast_expr *ptr)
@@ -5262,8 +5197,6 @@
 {
   ptr = obj.copy();
 }
-ast_expr_list::ast_expr_list(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 ast_expr_list::ast_expr_list(__isl_take isl_ast_expr_list *ptr)
@@ -5435,8 +5368,6 @@
 {
   ptr = obj.copy();
 }
-ast_node::ast_node(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 ast_node::ast_node(__isl_take isl_ast_node *ptr)
@@ -5638,8 +5569,6 @@
 {
   ptr = obj.copy();
 }
-ast_node_list::ast_node_list(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 ast_node_list::ast_node_list(__isl_take isl_ast_node_list *ptr)
@@ -5811,8 +5740,6 @@
 {
   ptr = obj.copy();
 }
-basic_map::basic_map(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 basic_map::basic_map(__isl_take isl_basic_map *ptr)
@@ -6525,8 +6452,6 @@
 {
   ptr = obj.copy();
 }
-basic_map_list::basic_map_list(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 basic_map_list::basic_map_list(__isl_take isl_basic_map_list *ptr)
@@ -6698,8 +6623,6 @@
 {
   ptr = obj.copy();
 }
-basic_set::basic_set(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 basic_set::basic_set(__isl_take isl_basic_set *ptr)
@@ -7251,8 +7174,6 @@
 {
   ptr = obj.copy();
 }
-basic_set_list::basic_set_list(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 basic_set_list::basic_set_list(__isl_take isl_basic_set_list *ptr)
@@ -7430,8 +7351,6 @@
 {
   ptr = obj.copy();
 }
-constraint::constraint(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 constraint::constraint(__isl_take isl_constraint *ptr)
@@ -7617,8 +7536,6 @@
 {
   ptr = obj.copy();
 }
-constraint_list::constraint_list(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 constraint_list::constraint_list(__isl_take isl_constraint_list *ptr)
@@ -7790,8 +7707,6 @@
 {
   ptr = obj.copy();
 }
-fixed_box::fixed_box(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 fixed_box::fixed_box(__isl_take isl_fixed_box *ptr)
@@ -7889,8 +7804,6 @@
 {
   ptr = obj.copy();
 }
-id::id(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 id::id(__isl_take isl_id *ptr)
@@ -7994,8 +7907,6 @@
 {
   ptr = obj.copy();
 }
-id_list::id_list(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 id_list::id_list(__isl_take isl_id_list *ptr)
@@ -8167,8 +8078,6 @@
 {
   ptr = obj.copy();
 }
-id_to_ast_expr::id_to_ast_expr(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 id_to_ast_expr::id_to_ast_expr(__isl_take isl_id_to_ast_expr *ptr)
@@ -8277,8 +8186,6 @@
 {
   ptr = obj.copy();
 }
-local_space::local_space(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 local_space::local_space(__isl_take isl_local_space *ptr)
@@ -8493,8 +8400,6 @@
 {
   ptr = obj.copy();
 }
-map::map(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 map::map(__isl_take isl_map *ptr)
@@ -9698,8 +9603,6 @@
 {
   ptr = obj.copy();
 }
-map_list::map_list(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 map_list::map_list(__isl_take isl_map_list *ptr)
@@ -9871,8 +9774,6 @@
 {
   ptr = obj.copy();
 }
-mat::mat(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 mat::mat(__isl_take isl_mat *ptr)
@@ -10177,8 +10078,6 @@
 {
   ptr = obj.copy();
 }
-multi_aff::multi_aff(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 multi_aff::multi_aff(__isl_take isl_multi_aff *ptr)
@@ -10718,8 +10617,6 @@
 {
   ptr = obj.copy();
 }
-multi_id::multi_id(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 multi_id::multi_id(__isl_take isl_multi_id *ptr)
@@ -10923,8 +10820,6 @@
 {
   ptr = obj.copy();
 }
-multi_pw_aff::multi_pw_aff(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 multi_pw_aff::multi_pw_aff(__isl_take isl_multi_pw_aff *ptr)
@@ -11527,8 +11422,6 @@
 {
   ptr = obj.copy();
 }
-multi_union_pw_aff::multi_union_pw_aff(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 multi_union_pw_aff::multi_union_pw_aff(__isl_take isl_multi_union_pw_aff *ptr)
@@ -12018,8 +11911,6 @@
 {
   ptr = obj.copy();
 }
-multi_val::multi_val(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 multi_val::multi_val(__isl_take isl_multi_val *ptr)
@@ -12422,8 +12313,6 @@
 {
   ptr = obj.copy();
 }
-point::point(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 point::point(__isl_take isl_point *ptr)
@@ -12538,8 +12427,6 @@
 {
   ptr = obj.copy();
 }
-pw_aff::pw_aff(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 pw_aff::pw_aff(__isl_take isl_pw_aff *ptr)
@@ -13194,8 +13081,6 @@
 {
   ptr = obj.copy();
 }
-pw_aff_list::pw_aff_list(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 pw_aff_list::pw_aff_list(__isl_take isl_pw_aff_list *ptr)
@@ -13415,8 +13300,6 @@
 {
   ptr = obj.copy();
 }
-pw_multi_aff::pw_multi_aff(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 pw_multi_aff::pw_multi_aff(__isl_take isl_pw_multi_aff *ptr)
@@ -13977,8 +13860,6 @@
 {
   ptr = obj.copy();
 }
-pw_multi_aff_list::pw_multi_aff_list(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 pw_multi_aff_list::pw_multi_aff_list(__isl_take isl_pw_multi_aff_list *ptr)
@@ -14150,8 +14031,6 @@
 {
   ptr = obj.copy();
 }
-pw_qpolynomial::pw_qpolynomial(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 pw_qpolynomial::pw_qpolynomial(__isl_take isl_pw_qpolynomial *ptr)
@@ -14538,8 +14417,6 @@
 {
   ptr = obj.copy();
 }
-pw_qpolynomial_fold_list::pw_qpolynomial_fold_list(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 pw_qpolynomial_fold_list::pw_qpolynomial_fold_list(__isl_take isl_pw_qpolynomial_fold_list *ptr)
@@ -14614,8 +14491,6 @@
 {
   ptr = obj.copy();
 }
-pw_qpolynomial_list::pw_qpolynomial_list(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 pw_qpolynomial_list::pw_qpolynomial_list(__isl_take isl_pw_qpolynomial_list *ptr)
@@ -14787,8 +14662,6 @@
 {
   ptr = obj.copy();
 }
-qpolynomial::qpolynomial(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 qpolynomial::qpolynomial(__isl_take isl_qpolynomial *ptr)
@@ -15109,8 +14982,6 @@
 {
   ptr = obj.copy();
 }
-qpolynomial_list::qpolynomial_list(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 qpolynomial_list::qpolynomial_list(__isl_take isl_qpolynomial_list *ptr)
@@ -15282,8 +15153,6 @@
 {
   ptr = obj.copy();
 }
-schedule::schedule(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 schedule::schedule(__isl_take isl_schedule *ptr)
@@ -15452,8 +15321,6 @@
 {
   ptr = obj.copy();
 }
-schedule_constraints::schedule_constraints(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 schedule_constraints::schedule_constraints(__isl_take isl_schedule_constraints *ptr)
@@ -15622,8 +15489,6 @@
 {
   ptr = obj.copy();
 }
-schedule_node::schedule_node(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 schedule_node::schedule_node(__isl_take isl_schedule_node *ptr)
@@ -16065,8 +15930,6 @@
 {
   ptr = obj.copy();
 }
-set::set(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 set::set(__isl_take isl_set *ptr)
@@ -17096,8 +16959,6 @@
 {
   ptr = obj.copy();
 }
-set_list::set_list(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 set_list::set_list(__isl_take isl_set_list *ptr)
@@ -17275,8 +17136,6 @@
 {
   ptr = obj.copy();
 }
-space::space(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 space::space(__isl_take isl_space *ptr)
@@ -17806,8 +17665,6 @@
 {
   ptr = obj.copy();
 }
-term::term(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 term::term(__isl_take isl_term *ptr)
@@ -17892,8 +17749,6 @@
 {
   ptr = obj.copy();
 }
-union_access_info::union_access_info(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 union_access_info::union_access_info(__isl_take isl_union_access_info *ptr)
@@ -18004,8 +17859,6 @@
 {
   ptr = obj.copy();
 }
-union_flow::union_flow(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 union_flow::union_flow(__isl_take isl_union_flow *ptr)
@@ -18111,8 +17964,6 @@
 {
   ptr = obj.copy();
 }
-union_map::union_map(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 union_map::union_map(__isl_take isl_union_map *ptr)
@@ -18880,8 +18731,6 @@
 {
   ptr = obj.copy();
 }
-union_map_list::union_map_list(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 union_map_list::union_map_list(__isl_take isl_union_map_list *ptr)
@@ -19053,8 +18902,6 @@
 {
   ptr = obj.copy();
 }
-union_pw_aff::union_pw_aff(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 union_pw_aff::union_pw_aff(__isl_take isl_union_pw_aff *ptr)
@@ -19414,8 +19261,6 @@
 {
   ptr = obj.copy();
 }
-union_pw_aff_list::union_pw_aff_list(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 union_pw_aff_list::union_pw_aff_list(__isl_take isl_union_pw_aff_list *ptr)
@@ -19587,8 +19432,6 @@
 {
   ptr = obj.copy();
 }
-union_pw_multi_aff::union_pw_multi_aff(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 union_pw_multi_aff::union_pw_multi_aff(__isl_take isl_union_pw_multi_aff *ptr)
@@ -19998,8 +19841,6 @@
 {
   ptr = obj.copy();
 }
-union_pw_multi_aff_list::union_pw_multi_aff_list(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 union_pw_multi_aff_list::union_pw_multi_aff_list(__isl_take isl_union_pw_multi_aff_list *ptr)
@@ -20171,8 +20012,6 @@
 {
   ptr = obj.copy();
 }
-union_pw_qpolynomial::union_pw_qpolynomial(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 union_pw_qpolynomial::union_pw_qpolynomial(__isl_take isl_union_pw_qpolynomial *ptr)
@@ -20483,8 +20322,6 @@
 {
   ptr = obj.copy();
 }
-union_set::union_set(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 union_set::union_set(__isl_take isl_union_set *ptr)
@@ -20960,8 +20797,6 @@
 {
   ptr = obj.copy();
 }
-union_set_list::union_set_list(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 union_set_list::union_set_list(__isl_take isl_union_set_list *ptr)
@@ -21139,8 +20974,6 @@
 {
   ptr = obj.copy();
 }
-val::val(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 val::val(__isl_take isl_val *ptr)
@@ -21548,8 +21381,6 @@
 {
   ptr = obj.copy();
 }
-val_list::val_list(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 val_list::val_list(__isl_take isl_val_list *ptr)
@@ -21721,8 +21552,6 @@
 {
   ptr = obj.copy();
 }
-vec::vec(std::nullptr_t)
-    : ptr(nullptr) {}
 
 
 vec::vec(__isl_take isl_vec *ptr)
Index: polly/lib/CodeGen/PPCGCodeGeneration.cpp
===================================================================
--- polly/lib/CodeGen/PPCGCodeGeneration.cpp
+++ polly/lib/CodeGen/PPCGCodeGeneration.cpp
@@ -178,7 +178,7 @@
   /// [params] -> { Stmt_phantom[]  -> scalar_to_kill[] }
   isl::union_map MustKills;
 
-  MustKillsInfo() : KillsSchedule(nullptr) {}
+  MustKillsInfo() : KillsSchedule() {}
 };
 
 /// Check if SAI's uses are entirely contained within Scop S.
@@ -227,7 +227,7 @@
   //     - filter: "[control] -> { }"
   // So, we choose to not create this to keep the output a little nicer,
   // at the cost of some code complexity.
-  Info.KillsSchedule = nullptr;
+  Info.KillsSchedule = {};
 
   for (isl::id &ToKillId : KillMemIds) {
     isl::id KillStmtId = isl::id::alloc(
Index: polly/lib/CodeGen/IslAst.cpp
===================================================================
--- polly/lib/CodeGen/IslAst.cpp
+++ polly/lib/CodeGen/IslAst.cpp
@@ -623,7 +623,7 @@
 isl::union_map IslAstInfo::getSchedule(const isl::ast_node &Node) {
   IslAstUserPayload *Payload = getNodePayload(Node);
   if (!Payload)
-    return nullptr;
+    return {};
 
   isl::ast_build Build = isl::manage_copy(Payload->Build);
   return Build.get_schedule();
@@ -632,7 +632,7 @@
 isl::pw_aff
 IslAstInfo::getMinimalDependenceDistance(const isl::ast_node &Node) {
   IslAstUserPayload *Payload = getNodePayload(Node);
-  return Payload ? Payload->MinimalDependenceDistance : nullptr;
+  return Payload ? Payload->MinimalDependenceDistance : isl::pw_aff();
 }
 
 IslAstInfo::MemoryAccessSet *
Index: polly/lib/Analysis/ScopInfo.cpp
===================================================================
--- polly/lib/Analysis/ScopInfo.cpp
+++ polly/lib/Analysis/ScopInfo.cpp
@@ -348,7 +348,7 @@
   DimensionSizesPw.clear();
   for (const SCEV *Expr : DimensionSizes) {
     if (!Expr) {
-      DimensionSizesPw.push_back(nullptr);
+      DimensionSizesPw.push_back(isl::pw_aff());
       continue;
     }
     isl::pw_aff Size = S.getPwAffOnly(Expr);
@@ -889,12 +889,12 @@
                            ArrayRef<const SCEV *> Subscripts,
                            ArrayRef<const SCEV *> Sizes, Value *AccessValue,
                            MemoryKind Kind)
-    : Kind(Kind), AccType(AccType), Statement(Stmt), InvalidDomain(nullptr),
+    : Kind(Kind), AccType(AccType), Statement(Stmt), InvalidDomain(),
       BaseAddr(BaseAddress), ElementType(ElementType),
       Sizes(Sizes.begin(), Sizes.end()), AccessInstruction(AccessInst),
       AccessValue(AccessValue), IsAffine(Affine),
-      Subscripts(Subscripts.begin(), Subscripts.end()), AccessRelation(nullptr),
-      NewAccessRelation(nullptr), FAD(nullptr) {
+      Subscripts(Subscripts.begin(), Subscripts.end()), AccessRelation(),
+      NewAccessRelation(), FAD(nullptr) {
   static const std::string TypeStrings[] = {"", "_Read", "_Write", "_MayWrite"};
   const std::string Access = TypeStrings[AccType] + utostr(Stmt->size());
 
@@ -904,8 +904,8 @@
 
 MemoryAccess::MemoryAccess(ScopStmt *Stmt, AccessType AccType, isl::map AccRel)
     : Kind(MemoryKind::Array), AccType(AccType), Statement(Stmt),
-      InvalidDomain(nullptr), AccessRelation(nullptr),
-      NewAccessRelation(AccRel), FAD(nullptr) {
+      InvalidDomain(), AccessRelation(), NewAccessRelation(AccRel),
+      FAD(nullptr) {
   isl::id ArrayInfoId = NewAccessRelation.get_tuple_id(isl::dim::out);
   auto *SAI = ScopArrayInfo::getFromId(ArrayInfoId);
   Sizes.push_back(nullptr);
@@ -1133,7 +1133,7 @@
     return isl::map::from_aff(isl::aff(isl::local_space(getDomainSpace())));
   auto Schedule = getParent()->getSchedule();
   if (!Schedule)
-    return nullptr;
+    return {};
   Schedule = Schedule.intersect_domain(isl::union_set(Domain));
   if (Schedule.is_empty())
     return isl::map::from_aff(isl::aff(isl::local_space(getDomainSpace())));
@@ -1203,21 +1203,19 @@
 ScopStmt::ScopStmt(Scop &parent, Region &R, StringRef Name,
                    Loop *SurroundingLoop,
                    std::vector<Instruction *> EntryBlockInstructions)
-    : Parent(parent), InvalidDomain(nullptr), Domain(nullptr), R(&R),
-      Build(nullptr), BaseName(Name), SurroundingLoop(SurroundingLoop),
-      Instructions(EntryBlockInstructions) {}
+    : Parent(parent), InvalidDomain(), Domain(), R(&R), Build(), BaseName(Name),
+      SurroundingLoop(SurroundingLoop), Instructions(EntryBlockInstructions) {}
 
 ScopStmt::ScopStmt(Scop &parent, BasicBlock &bb, StringRef Name,
                    Loop *SurroundingLoop,
                    std::vector<Instruction *> Instructions)
-    : Parent(parent), InvalidDomain(nullptr), Domain(nullptr), BB(&bb),
-      Build(nullptr), BaseName(Name), SurroundingLoop(SurroundingLoop),
+    : Parent(parent), InvalidDomain(), Domain(), BB(&bb), Build(),
+      BaseName(Name), SurroundingLoop(SurroundingLoop),
       Instructions(Instructions) {}
 
 ScopStmt::ScopStmt(Scop &parent, isl::map SourceRel, isl::map TargetRel,
                    isl::set NewDomain)
-    : Parent(parent), InvalidDomain(nullptr), Domain(NewDomain),
-      Build(nullptr) {
+    : Parent(parent), InvalidDomain(), Domain(NewDomain), Build() {
   BaseName = getIslCompatibleName("CopyStmt_", "",
                                   std::to_string(parent.getCopyStmtsNum()));
   isl::id Id = isl::id::alloc(getIslCtx(), getBaseName(), this);
@@ -2151,7 +2149,7 @@
     simplify(DefinedBehaviorContext);
     if (DefinedBehaviorContext.n_basic_set() >
         MaxDisjunktsInDefinedBehaviourContext)
-      DefinedBehaviorContext = nullptr;
+      DefinedBehaviorContext = {};
   }
 }
 
Index: polly/lib/Analysis/ScopBuilder.cpp
===================================================================
--- polly/lib/Analysis/ScopBuilder.cpp
+++ polly/lib/Analysis/ScopBuilder.cpp
@@ -750,7 +750,7 @@
 
     isl::set LatchBBDom = scop->getDomainConditions(LatchBB);
 
-    isl::set BackedgeCondition = nullptr;
+    isl::set BackedgeCondition;
 
     Instruction *TI = LatchBB->getTerminator();
     BranchInst *BI = dyn_cast<BranchInst>(TI);
@@ -823,7 +823,7 @@
 
     ClassRep = LInst;
     scop->addInvariantEquivClass(
-        InvariantEquivClassTy{PointerSCEV, MemoryAccessList(), nullptr, Ty});
+        InvariantEquivClassTy{PointerSCEV, MemoryAccessList(), {}, Ty});
   }
 }
 
@@ -1175,7 +1175,7 @@
 
 void ScopBuilder::buildSchedule() {
   Loop *L = getLoopSurroundingScop(*scop, LI);
-  LoopStackTy LoopStack({LoopStackElementTy(L, nullptr, 0)});
+  LoopStackTy LoopStack({LoopStackElementTy(L, {}, 0)});
   buildSchedule(scop->getRegion().getNode(), LoopStack);
   assert(LoopStack.size() == 1 && LoopStack.back().L == L);
   scop->setScheduleTree(LoopStack[0].Schedule);
@@ -1243,7 +1243,7 @@
         DelayList.push_back(RN);
         continue;
       }
-      LoopStack.push_back({L, nullptr, 0});
+      LoopStack.push_back({L, {}, 0});
     }
     buildSchedule(RN, LoopStack);
   }
@@ -2911,7 +2911,7 @@
 
   if (Access->isScalarKind() || Access->isWrite() || !Access->isAffine() ||
       Access->isMemoryIntrinsic())
-    return nullptr;
+    return {};
 
   // Skip accesses that have an invariant base pointer which is defined but
   // not loaded inside the SCoP. This can happened e.g., if a readnone call
@@ -2924,13 +2924,13 @@
   // outside the region.
   auto *LI = cast<LoadInst>(Access->getAccessInstruction());
   if (hasNonHoistableBasePtrInScop(Access, Writes))
-    return nullptr;
+    return {};
 
   isl::map AccessRelation = Access->getAccessRelation();
   assert(!AccessRelation.is_empty());
 
   if (AccessRelation.involves_dims(isl::dim::in, 0, Stmt.getNumIterators()))
-    return nullptr;
+    return {};
 
   AccessRelation = AccessRelation.intersect_domain(Stmt.getDomain());
   isl::set SafeToLoad;
@@ -2942,13 +2942,13 @@
   } else if (BB != LI->getParent()) {
     // Skip accesses in non-affine subregions as they might not be executed
     // under the same condition as the entry of the non-affine subregion.
-    return nullptr;
+    return {};
   } else {
     SafeToLoad = AccessRelation.range();
   }
 
   if (isAccessRangeTooComplex(AccessRelation.range()))
-    return nullptr;
+    return {};
 
   isl::union_map Written = Writes.intersect_range(SafeToLoad);
   isl::set WrittenCtx = Written.params();
@@ -2960,7 +2960,7 @@
   WrittenCtx = WrittenCtx.remove_divs();
   bool TooComplex = WrittenCtx.n_basic_set() >= MaxDisjunctsInDomain;
   if (TooComplex || !isRequiredInvariantLoad(LI))
-    return nullptr;
+    return {};
 
   scop->addAssumption(INVARIANTLOAD, WrittenCtx, LI->getDebugLoc(),
                       AS_RESTRICTION, LI->getParent());
Index: polly/include/polly/ScopInfo.h
===================================================================
--- polly/include/polly/ScopInfo.h
+++ polly/include/polly/ScopInfo.h
@@ -1788,7 +1788,7 @@
   DenseMap<BasicBlock *, isl::set> DomainMap;
 
   /// Constraints on parameters.
-  isl::set Context = nullptr;
+  isl::set Context;
 
   /// The affinator used to translate SCEVs to isl expressions.
   SCEVAffinator Affinator;
@@ -1883,7 +1883,7 @@
   /// set of statement instances that will be scheduled in a subtree. There
   /// are also several other nodes. A full description of the different nodes
   /// in a schedule tree is given in the isl manual.
-  isl::schedule Schedule = nullptr;
+  isl::schedule Schedule;
 
   /// Is this Scop marked as not to be transformed by an optimization heuristic?
   bool HasDisableHeuristicsHint = false;
