From f9802446a58e589b86604823b5cfc11884db96df Mon Sep 17 00:00:00 2001
From: Chandler Carruth <chandlerc@gmail.com>
Date: Sun, 12 Dec 2010 08:39:38 +0000
Subject: [PATCH] Move and copy function calls around to remove the indirection
 through gotos from the switch statement.

llvm-svn: 121626
---
 clang/lib/Sema/SemaOverload.cpp | 24 ++++++++++--------------
 1 file changed, 10 insertions(+), 14 deletions(-)

diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
index abe1a33fd293..5ec7b935b206 100644
--- a/clang/lib/Sema/SemaOverload.cpp
+++ b/clang/lib/Sema/SemaOverload.cpp
@@ -5543,7 +5543,7 @@ Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
     if (NumArgs == 1)
       OpBuilder.addUnaryStarPointerOverloads();
     else
-      goto BinaryStar;
+      OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
     break;
 
   case OO_Plus: // '+' is either unary or binary
@@ -5551,15 +5551,18 @@ Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
       OpBuilder.addUnaryPlusPointerOverloads();
       OpBuilder.addUnaryPlusOrMinusArithmeticOverloads();
     } else {
-      goto BinaryPlus;
+      OpBuilder.addBinaryPlusOrMinusPointerOverloads(Op);
+      OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
     }
     break;
 
   case OO_Minus: // '-' is either unary or binary
-    if (NumArgs == 1)
+    if (NumArgs == 1) {
       OpBuilder.addUnaryPlusOrMinusArithmeticOverloads();
-    else
-      goto BinaryMinus;
+    } else {
+      OpBuilder.addBinaryPlusOrMinusPointerOverloads(Op);
+      OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
+    }
     break;
 
   case OO_Amp: // '&' is either unary or binary
@@ -5609,15 +5612,7 @@ Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/true);
     break;
 
-  BinaryPlus:
-  BinaryMinus:
-    OpBuilder.addBinaryPlusOrMinusPointerOverloads(Op);
-    OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);;
-    break;
-
   case OO_Slash:
-  BinaryStar:
-  Conditional:
     OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
     break;
 
@@ -5672,7 +5667,8 @@ Sema::AddBuiltinOperatorCandidates(OverloadedOperatorKind Op,
 
   case OO_Conditional:
     OpBuilder.addConditionalOperatorOverloads();
-    goto Conditional;
+    OpBuilder.addGenericBinaryArithmeticOverloads(/*isComparison=*/false);
+    break;
   }
 }