diff --git a/flang/lib/evaluate/expression.cc b/flang/lib/evaluate/expression.cc index a89816a55d1f..ef780087c927 100644 --- a/flang/lib/evaluate/expression.cc +++ b/flang/lib/evaluate/expression.cc @@ -189,6 +189,7 @@ template DynamicType ArrayConstructor::GetType() const { return result.GetType(); } +#if defined(__APPLE__) && defined(__GNUC__) template typename ExpressionBase::Derived &ExpressionBase::derived() { return *static_cast(this); @@ -198,6 +199,7 @@ template const typename ExpressionBase::Derived &ExpressionBase::derived() const { return *static_cast(this); } +#endif template std::optional ExpressionBase::GetType() const { diff --git a/flang/lib/evaluate/expression.h b/flang/lib/evaluate/expression.h index 832a6baa3717..371369638ca2 100644 --- a/flang/lib/evaluate/expression.h +++ b/flang/lib/evaluate/expression.h @@ -68,8 +68,13 @@ public: private: using Derived = Expr; +#if defined(__APPLE__) && defined(__GNUC__) Derived &derived(); const Derived &derived() const; +#else + Derived &derived() { return *static_cast(this); } + const Derived &derived() const { return *static_cast(this); } +#endif public: template Derived &operator=(const A &x) {