Fix use of references with va_start

BUG=angle:736

va_start behavior is undefined if the second parameter is a
function, array, or reference type. clang produces a warning
for this, while MSVC does not.

Change-Id: I0bc2805e312e3542aac816f10a257e2f1cfad128
Reviewed-on: https://chromium-review.googlesource.com/216010
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nico Weber <thakis@chromium.org>
Tested-by: Nico Weber <thakis@chromium.org>
diff --git a/src/common/angleutils.cpp b/src/common/angleutils.cpp
index 1da7fca..2673abf 100644
--- a/src/common/angleutils.cpp
+++ b/src/common/angleutils.cpp
@@ -8,26 +8,26 @@
 
 #include <vector>
 
-std::string FormatString(const std::string &fmt, va_list vararg)
+std::string FormatString(const char *fmt, va_list vararg)
 {
     static std::vector<char> buffer(512);
 
     // Attempt to just print to the current buffer
-    int len = vsnprintf(&buffer[0], buffer.size(), fmt.c_str(), vararg);
+    int len = vsnprintf(&buffer[0], buffer.size(), fmt, vararg);
     if (len < 0 || static_cast<size_t>(len) >= buffer.size())
     {
         // Buffer was not large enough, calculate the required size and resize the buffer
-        len = vsnprintf(NULL, 0, fmt.c_str(), vararg);
+        len = vsnprintf(NULL, 0, fmt, vararg);
         buffer.resize(len + 1);
 
         // Print again
-        vsnprintf(&buffer[0], buffer.size(), fmt.c_str(), vararg);
+        vsnprintf(&buffer[0], buffer.size(), fmt, vararg);
     }
 
     return std::string(buffer.data(), len);
 }
 
-std::string FormatString(const std::string &fmt, ...)
+std::string FormatString(const char *fmt, ...)
 {
     va_list vararg;
     va_start(vararg, fmt);
diff --git a/src/common/angleutils.h b/src/common/angleutils.h
index e85237e..50a4132 100644
--- a/src/common/angleutils.h
+++ b/src/common/angleutils.h
@@ -132,8 +132,8 @@
     return strstr.str();
 }
 
-std::string FormatString(const std::string &fmt, va_list vararg);
-std::string FormatString(const std::string &fmt, ...);
+std::string FormatString(const char *fmt, va_list vararg);
+std::string FormatString(const char *fmt, ...);
 
 #if defined(_MSC_VER)
 #define snprintf _snprintf
diff --git a/src/libGLESv2/Error.cpp b/src/libGLESv2/Error.cpp
index 4522d17..cc7d17e 100644
--- a/src/libGLESv2/Error.cpp
+++ b/src/libGLESv2/Error.cpp
@@ -22,7 +22,7 @@
 {
 }
 
-Error::Error(GLenum errorCode, const std::string &msg, ...)
+Error::Error(GLenum errorCode, const char *msg, ...)
     : mCode(errorCode),
       mMessage()
 {
diff --git a/src/libGLESv2/Error.h b/src/libGLESv2/Error.h
index 787fbd8..b70b5a5 100644
--- a/src/libGLESv2/Error.h
+++ b/src/libGLESv2/Error.h
@@ -20,7 +20,7 @@
 {
   public:
     explicit Error(GLenum errorCode);
-    Error(GLenum errorCode, const std::string &msg, ...);
+    Error(GLenum errorCode, const char *msg, ...);
     Error(const Error &other);
     Error &operator=(const Error &other);