Factor out some duplication. NFC.
authorRichard Smith <richard-llvm@metafoo.co.uk>
Tue, 8 Oct 2019 23:37:49 +0000 (23:37 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Tue, 8 Oct 2019 23:37:49 +0000 (23:37 +0000)
llvm-svn: 374130

clang/lib/AST/ExprConstant.cpp

index 55ed550..0263967 100644 (file)
@@ -137,7 +137,7 @@ namespace {
 
   /// Given an expression, determine the type used to store the result of
   /// evaluating that expression.
-  static QualType getStorageType(ASTContext &Ctx, Expr *E) {
+  static QualType getStorageType(const ASTContext &Ctx, const Expr *E) {
     if (E->isRValue())
       return E->getType();
     return Ctx.getLValueReferenceType(E->getType());
@@ -13569,10 +13569,8 @@ bool Expr::EvaluateAsConstantExpr(EvalResult &Result, ConstExprUsage Usage,
   if (!Info.discardCleanups())
     llvm_unreachable("Unhandled cleanup; missing full expression marker?");
 
-  QualType T = getType();
-  if (!isRValue())
-    T = Ctx.getLValueReferenceType(T);
-  return CheckConstantExpression(Info, getExprLoc(), T, Result.Val, Usage) &&
+  return CheckConstantExpression(Info, getExprLoc(), getStorageType(Ctx, this),
+                                 Result.Val, Usage) &&
          CheckMemoryLeaks(Info);
 }