Index: flang/include/flang/Evaluate/expression.h =================================================================== --- flang/include/flang/Evaluate/expression.h +++ flang/include/flang/Evaluate/expression.h @@ -874,7 +874,8 @@ }; FOR_EACH_CATEGORY_TYPE(extern template class Expr, ) -FOR_EACH_TYPE_AND_KIND(extern template class ExpressionBase, ) +FOR_EACH_INTRINSIC_KIND(extern template class ExpressionBase, ) +FOR_EACH_CATEGORY_TYPE(extern template class ExpressionBase, ) FOR_EACH_INTRINSIC_KIND(extern template class ArrayConstructorValues, ) FOR_EACH_INTRINSIC_KIND(extern template class ArrayConstructor, ) @@ -886,7 +887,8 @@ FOR_EACH_REAL_KIND(template class Relational, ) \ FOR_EACH_CHARACTER_KIND(template class Relational, ) \ template class Relational; \ - FOR_EACH_TYPE_AND_KIND(template class ExpressionBase, ) \ + FOR_EACH_INTRINSIC_KIND(template class ExpressionBase, ) \ + FOR_EACH_CATEGORY_TYPE(template class ExpressionBase, ) \ FOR_EACH_INTRINSIC_KIND(template class ArrayConstructorValues, ) \ FOR_EACH_INTRINSIC_KIND(template class ArrayConstructor, ) } // namespace Fortran::evaluate Index: flang/include/flang/Evaluate/type.h =================================================================== --- flang/include/flang/Evaluate/type.h +++ flang/include/flang/Evaluate/type.h @@ -535,8 +535,6 @@ PREFIX SUFFIX; \ PREFIX SUFFIX; \ PREFIX SUFFIX; -#define FOR_EACH_TYPE_AND_KIND(PREFIX, SUFFIX) \ - FOR_EACH_INTRINSIC_KIND(PREFIX, SUFFIX) \ - FOR_EACH_CATEGORY_TYPE(PREFIX, SUFFIX) + } // namespace Fortran::evaluate #endif // FORTRAN_EVALUATE_TYPE_H_ Index: flang/lib/Evaluate/fold-implementation.h =================================================================== --- flang/lib/Evaluate/fold-implementation.h +++ flang/lib/Evaluate/fold-implementation.h @@ -2099,6 +2099,5 @@ std::move(expr.u)); } -FOR_EACH_TYPE_AND_KIND(extern template class ExpressionBase, ) } // namespace Fortran::evaluate #endif // FORTRAN_EVALUATE_FOLD_IMPLEMENTATION_H_ Index: flang/lib/Semantics/expression.cpp =================================================================== --- flang/lib/Semantics/expression.cpp +++ flang/lib/Semantics/expression.cpp @@ -1387,7 +1387,7 @@ } if (cosubsOk && !reversed.empty()) { int numCosubscripts{static_cast(cosubscripts.size())}; - const Symbol &symbol{reversed.front()}; + const Symbol &symbol{*reversed.front()}; if (numCosubscripts != symbol.Corank()) { Say("'%s' has corank %d, but coindexed reference has %d cosubscripts"_err_en_US, symbol.name(), symbol.Corank(), numCosubscripts); Index: flang/lib/Semantics/resolve-names.cpp =================================================================== --- flang/lib/Semantics/resolve-names.cpp +++ flang/lib/Semantics/resolve-names.cpp @@ -2740,7 +2740,7 @@ Say(source, "'%s' already has another CUDA data attribute ('%s')"_err_en_US, symbol.name(), - common::EnumToString(*object->cudaDataAttr()).substr()); + std::string{common::EnumToString(*object->cudaDataAttr())}.c_str()); } else { object->set_cudaDataAttr(attr); } @@ -3394,10 +3394,11 @@ } return; } - const Symbol &firstSpecific{specifics.front()}; + const Symbol &firstSpecific{*specifics.front()}; bool isFunction{firstSpecific.test(Symbol::Flag::Function)}; bool isBoth{false}; - for (const Symbol &specific : specifics) { + for (const SymbolRef &ref : specifics) { + const Symbol &specific{*ref}; if (isFunction != specific.test(Symbol::Flag::Function)) { // C1514 auto &msg{Say(generic.name(), "Generic interface '%s' has both a function and a subroutine"_warn_en_US)}; Index: flang/lib/Semantics/semantics.cpp =================================================================== --- flang/lib/Semantics/semantics.cpp +++ flang/lib/Semantics/semantics.cpp @@ -549,7 +549,8 @@ << "-" << sourceInfo->second.column << "\n"; } else if (symbol.has()) { os << symbol.name().ToString() << ": " - << symbol.GetUltimate().owner().symbol()->name().ToString() << "\n"; + << DEREF(symbol.GetUltimate().owner().symbol()).name().ToString() + << "\n"; } } } Index: flang/unittests/Runtime/Time.cpp =================================================================== --- flang/unittests/Runtime/Time.cpp +++ flang/unittests/Runtime/Time.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +#ifndef __clang__ // 16.0.3 lacks + #include "gtest/gtest.h" #include "flang/Runtime/time-intrinsic.h" #include @@ -166,3 +168,5 @@ EXPECT_LE(minutes, 59); } } + +#endif // __clang__