diff --git a/include/clang/Basic/Builtins.def b/include/clang/Basic/Builtins.def
index 107648e379a06fc0b80b167a57cfbd1f64a4c2f4..23a8513ca1bccde2b5cca260d284d8965af0d9cf 100644
--- a/include/clang/Basic/Builtins.def
+++ b/include/clang/Basic/Builtins.def
@@ -239,8 +239,8 @@ BUILTIN(__builtin_nearbyintl, "LdLd", "Fnc")
 BUILTIN(__builtin_nextafter , "ddd", "Fnc")
 BUILTIN(__builtin_nextafterf, "fff", "Fnc")
 BUILTIN(__builtin_nextafterl, "LdLdLd", "Fnc")
-BUILTIN(__builtin_nexttoward , "ddd", "Fnc")
-BUILTIN(__builtin_nexttowardf, "fff", "Fnc")
+BUILTIN(__builtin_nexttoward , "ddLd", "Fnc")
+BUILTIN(__builtin_nexttowardf, "ffLd", "Fnc")
 BUILTIN(__builtin_nexttowardl, "LdLdLd", "Fnc")
 BUILTIN(__builtin_remainder , "ddd", "Fnc")
 BUILTIN(__builtin_remainderf, "fff", "Fnc")
@@ -993,8 +993,8 @@ LIBBUILTIN(nextafter, "ddd", "fne", "math.h", ALL_LANGUAGES)
 LIBBUILTIN(nextafterf, "fff", "fne", "math.h", ALL_LANGUAGES)
 LIBBUILTIN(nextafterl, "LdLdLd", "fne", "math.h", ALL_LANGUAGES)
 
-LIBBUILTIN(nexttoward, "ddd", "fne", "math.h", ALL_LANGUAGES)
-LIBBUILTIN(nexttowardf, "fff", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(nexttoward, "ddLd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(nexttowardf, "ffLd", "fne", "math.h", ALL_LANGUAGES)
 LIBBUILTIN(nexttowardl, "LdLdLd", "fne", "math.h", ALL_LANGUAGES)
 
 LIBBUILTIN(remainder, "ddd", "fne", "math.h", ALL_LANGUAGES)
diff --git a/test/CodeGen/libcall-declarations.c b/test/CodeGen/libcall-declarations.c
index 2a2c41859d3731634ef6f7e0631cb7510670be2b..6442e29bd86ee867fc35114d71049f7f006bf441 100644
--- a/test/CodeGen/libcall-declarations.c
+++ b/test/CodeGen/libcall-declarations.c
@@ -139,8 +139,8 @@ long double nearbyintl(long double);
 double nextafter(double, double);
 float nextafterf(float, float);
 long double nextafterl(long double, long double);
-double nexttoward(double, double);
-float nexttowardf(float, float);
+double nexttoward(double, long double);
+float nexttowardf(float, long double);
 long double nexttowardl(long double, long double);
 double remainder(double, double);
 float remainderf(float, float);
@@ -427,8 +427,8 @@ void *use[] = {
 // CHECK-NOERRNO: declare double @nextafter(double, double) [[NUW]]
 // CHECK-NOERRNO: declare float @nextafterf(float, float) [[NUW]]
 // CHECK-NOERRNO: declare x86_fp80 @nextafterl(x86_fp80, x86_fp80) [[NUW]]
-// CHECK-NOERRNO: declare double @nexttoward(double, double) [[NUW]]
-// CHECK-NOERRNO: declare float @nexttowardf(float, float) [[NUW]]
+// CHECK-NOERRNO: declare double @nexttoward(double, x86_fp80) [[NUW]]
+// CHECK-NOERRNO: declare float @nexttowardf(float, x86_fp80) [[NUW]]
 // CHECK-NOERRNO: declare x86_fp80 @nexttowardl(x86_fp80, x86_fp80) [[NUW]]
 // CHECK-NOERRNO: declare double @remainder(double, double) [[NUW]]
 // CHECK-NOERRNO: declare float @remainderf(float, float) [[NUW]]