diff options
Diffstat (limited to 'clang/lib/Sema/SemaChecking.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 22 | 
1 files changed, 8 insertions, 14 deletions
| diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index a575defe705..9c0a16c50a4 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -1097,20 +1097,14 @@ Sema::CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID,        return ExprError();      break;    case Builtin::BI__builtin_operator_new: -  case Builtin::BI__builtin_operator_delete: -    if (!getLangOpts().CPlusPlus) { -      Diag(TheCall->getExprLoc(), diag::err_builtin_requires_language) -        << (BuiltinID == Builtin::BI__builtin_operator_new -                ? "__builtin_operator_new" -                : "__builtin_operator_delete") -        << "C++"; -      return ExprError(); -    } -    // CodeGen assumes it can find the global new and delete to call, -    // so ensure that they are declared. -    DeclareGlobalNewDelete(); -    break; - +  case Builtin::BI__builtin_operator_delete: { +    bool IsDelete = BuiltinID == Builtin::BI__builtin_operator_delete; +    ExprResult Res = +        SemaBuiltinOperatorNewDeleteOverloaded(TheCallResult, IsDelete); +    if (Res.isInvalid()) +      CorrectDelayedTyposInExpr(TheCallResult.get()); +    return Res; +  }    // check secure string manipulation functions where overflows    // are detectable at compile time    case Builtin::BI__builtin___memcpy_chk: | 

