Index: src/SymTab/Autogen.cc
===================================================================
--- src/SymTab/Autogen.cc	(revision 58094611c386c7e6f0ba52d00ecf89b154288c42)
+++ src/SymTab/Autogen.cc	(revision e3e16bcf91a7300a6d1f71eaad04e2f3f498cfc2)
@@ -18,5 +18,5 @@
 #include <cstddef>                 // for NULL
 #include <algorithm>               // for count_if
-#include <cassert>                 // for safe_dynamic_cast, assert, assertf
+#include <cassert>                 // for strict_dynamic_cast, assert, assertf
 #include <iterator>                // for back_insert_iterator, back_inserter
 #include <list>                    // for list, _List_iterator, list<>::iter...
@@ -250,6 +250,6 @@
 		// parameters) are using in the variable exprs
 		assert( ftype->get_parameters().size() == 2 );
-		ObjectDecl * dstParam = safe_dynamic_cast< ObjectDecl * >( ftype->get_parameters().front() );
-		ObjectDecl * srcParam = safe_dynamic_cast< ObjectDecl * >( ftype->get_parameters().back() );
+		ObjectDecl * dstParam = strict_dynamic_cast< ObjectDecl * >( ftype->get_parameters().front() );
+		ObjectDecl * srcParam = strict_dynamic_cast< ObjectDecl * >( ftype->get_parameters().back() );
 
 		VariableExpr * assignVarExpr = new VariableExpr( assignDecl );
@@ -307,5 +307,5 @@
 
 		// assign to destination
-		Expression *dstselect = new MemberExpr( field, new CastExpr( new VariableExpr( dstParam ), safe_dynamic_cast< ReferenceType* >( dstParam->get_type() )->get_base()->clone() ) );
+		Expression *dstselect = new MemberExpr( field, new CastExpr( new VariableExpr( dstParam ), strict_dynamic_cast< ReferenceType* >( dstParam->get_type() )->get_base()->clone() ) );
 		genImplicitCall( srcParam, dstselect, func->get_name(), back_inserter( func->get_statements()->get_kids() ), field, forward );
 	}
@@ -436,5 +436,5 @@
 				FunctionType * assignType = dcl->get_functionType();
 				assert( assignType->get_parameters().size() == 2 );
-				ObjectDecl * srcParam = safe_dynamic_cast< ObjectDecl * >( assignType->get_parameters().back() );
+				ObjectDecl * srcParam = strict_dynamic_cast< ObjectDecl * >( assignType->get_parameters().back() );
 				dcl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) );
 			}
@@ -487,6 +487,6 @@
 		FunctionType * ftype = funcDecl->get_functionType();
 		assert( ftype->get_parameters().size() == 2 );
-		ObjectDecl * dstParam = safe_dynamic_cast< ObjectDecl * >( ftype->get_parameters().front() );
-		ObjectDecl * srcParam = safe_dynamic_cast< ObjectDecl * >( ftype->get_parameters().back() );
+		ObjectDecl * dstParam = strict_dynamic_cast< ObjectDecl * >( ftype->get_parameters().front() );
+		ObjectDecl * srcParam = strict_dynamic_cast< ObjectDecl * >( ftype->get_parameters().back() );
 
 		makeUnionFieldsAssignment( srcParam, dstParam, back_inserter( funcDecl->get_statements()->get_kids() ) );
@@ -700,5 +700,5 @@
 
 	Type * AutogenTupleRoutines::mutate( TupleType * tupleType ) {
-		tupleType = safe_dynamic_cast< TupleType * >( Parent::mutate( tupleType ) );
+		tupleType = strict_dynamic_cast< TupleType * >( Parent::mutate( tupleType ) );
 		std::string mangleName = SymTab::Mangler::mangleType( tupleType );
 		if ( seenTuples.find( mangleName ) != seenTuples.end() ) return tupleType;
@@ -768,5 +768,5 @@
 	CompoundStmt * AutogenTupleRoutines::mutate( CompoundStmt *compoundStmt ) {
 		seenTuples.beginScope();
-		compoundStmt = safe_dynamic_cast< CompoundStmt * >( Parent::mutate( compoundStmt ) );
+		compoundStmt = strict_dynamic_cast< CompoundStmt * >( Parent::mutate( compoundStmt ) );
 		seenTuples.endScope();
 		return compoundStmt;
Index: src/SymTab/Indexer.cc
===================================================================
--- src/SymTab/Indexer.cc	(revision 58094611c386c7e6f0ba52d00ecf89b154288c42)
+++ src/SymTab/Indexer.cc	(revision e3e16bcf91a7300a6d1f71eaad04e2f3f498cfc2)
@@ -16,5 +16,5 @@
 #include "Indexer.h"
 
-#include <cassert>                 // for assert, safe_dynamic_cast
+#include <cassert>                 // for assert, strict_dynamic_cast
 #include <iostream>                // for operator<<, basic_ostream, ostream
 #include <string>                  // for string, operator<<, operator!=
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 58094611c386c7e6f0ba52d00ecf89b154288c42)
+++ src/SymTab/Validate.cc	(revision e3e16bcf91a7300a6d1f71eaad04e2f3f498cfc2)
@@ -486,5 +486,5 @@
 		std::list< DeclarationWithType * > asserts;
 		for ( Declaration * decl : inst->baseTrait->members ) {
-			asserts.push_back( safe_dynamic_cast<DeclarationWithType *>( decl->clone() ) );
+			asserts.push_back( strict_dynamic_cast<DeclarationWithType *>( decl->clone() ) );
 		}
 		// substitute trait decl parameters for instance parameters
@@ -530,5 +530,5 @@
 		// need to carry over the 'sized' status of each decl in the instance
 		for ( auto p : group_iterate( traitDecl->get_parameters(), traitInst->get_parameters() ) ) {
-			TypeExpr * expr = safe_dynamic_cast< TypeExpr * >( std::get<1>(p) );
+			TypeExpr * expr = strict_dynamic_cast< TypeExpr * >( std::get<1>(p) );
 			if ( TypeInstType * inst = dynamic_cast< TypeInstType * >( expr->get_type() ) ) {
 				TypeDecl * formalDecl = std::get<0>(p);
@@ -892,5 +892,5 @@
 			for ( size_t i = 0; paramIter != params->end(); ++paramIter, ++i ) {
 				if ( i < args.size() ) {
-					TypeExpr * expr = safe_dynamic_cast< TypeExpr * >( *std::next( args.begin(), i ) );
+					TypeExpr * expr = strict_dynamic_cast< TypeExpr * >( *std::next( args.begin(), i ) );
 					sub.add( (*paramIter)->get_name(), expr->get_type()->clone() );
 				} else if ( i == args.size() ) {
@@ -962,5 +962,5 @@
 		if ( retVals.size() > 1 ) {
 			// generate a single return parameter which is the tuple of all of the return values
-			TupleType * tupleType = safe_dynamic_cast< TupleType * >( ResolvExpr::extractResultType( ftype ) );
+			TupleType * tupleType = strict_dynamic_cast< TupleType * >( ResolvExpr::extractResultType( ftype ) );
 			// ensure return value is not destructed by explicitly creating an empty ListInit node wherein maybeConstruct is false.
 			ObjectDecl * newRet = new ObjectDecl( "", Type::StorageClasses(), LinkageSpec::Cforall, 0, tupleType, new ListInit( std::list<Initializer*>(), noDesignators, false ) );
