diff --git a/llvm/unittests/ADT/VariadicFunctionTest.cpp b/llvm/unittests/ADT/VariadicFunctionTest.cpp
index 8e6f5b4..3cd63d2 100644
--- a/llvm/unittests/ADT/VariadicFunctionTest.cpp
+++ b/llvm/unittests/ADT/VariadicFunctionTest.cpp
@@ -16,7 +16,7 @@
 
 // Defines a variadic function StringCat() to join strings.
 // StringCat()'s arguments and return value have class types.
-std::string StringCatImpl(ArrayRef<const std::string*> Args) {
+std::string StringCatImpl(ArrayRef<const std::string *> Args) {
   std::string S;
   for (unsigned i = 0, e = Args.size(); i < e; ++i)
     S += *Args[i];
@@ -39,7 +39,7 @@
 // have primitive types.
 // The return type of SumImp() is deliberately different from its
 // argument type, as we want to test that this works.
-long SumImpl(ArrayRef<const int*> Args) {
+long SumImpl(ArrayRef<const int *> Args) {
   long Result = 0;
   for (unsigned i = 0, e = Args.size(); i < e; ++i)
     Result += *Args[i];
@@ -56,7 +56,7 @@
 
 // Appends an array of strings to dest and returns the number of
 // characters appended.
-int StringAppendImpl(std::string* Dest, ArrayRef<const std::string*> Args) {
+int StringAppendImpl(std::string *Dest, ArrayRef<const std::string *> Args) {
   int Chars = 0;
   for (unsigned i = 0, e = Args.size(); i < e; ++i) {
     Chars += Args[i]->size();
@@ -64,7 +64,7 @@
   }
   return Chars;
 }
-const VariadicFunction1<int, std::string*, std::string,
+const VariadicFunction1<int, std::string *, std::string,
                         StringAppendImpl> StringAppend;
 
 TEST(VariadicFunction1Test, Works) {
@@ -85,14 +85,14 @@
 // Counts how many optional arguments fall in the given range.
 // Returns the result in *num_in_range.  We make the return type void
 // as we want to test that VariadicFunction* can handle it.
-void CountInRangeImpl(int* NumInRange, int Low, int High,
-                      ArrayRef<const int*> Args) {
+void CountInRangeImpl(int *NumInRange, int Low, int High,
+                      ArrayRef<const int *> Args) {
   *NumInRange = 0;
   for (unsigned i = 0, e = Args.size(); i < e; ++i)
     if (Low <= *Args[i] && *Args[i] <= High)
       ++(*NumInRange);
 }
-const VariadicFunction3<void, int*, int, int, int,
+const VariadicFunction3<void, int *, int, int, int,
                         CountInRangeImpl> CountInRange;
 
 TEST(VariadicFunction3Test, Works) {
