Index: cfe/trunk/include/clang/Basic/Builtins.def =================================================================== --- cfe/trunk/include/clang/Basic/Builtins.def +++ cfe/trunk/include/clang/Basic/Builtins.def @@ -1087,9 +1087,11 @@ LIBBUILTIN(ilogbf, "if", "fne", "math.h", ALL_LANGUAGES) LIBBUILTIN(ilogbl, "iLd", "fne", "math.h", ALL_LANGUAGES) -LIBBUILTIN(lgamma, "dd", "fne", "math.h", ALL_LANGUAGES) -LIBBUILTIN(lgammaf, "ff", "fne", "math.h", ALL_LANGUAGES) -LIBBUILTIN(lgammal, "LdLd", "fne", "math.h", ALL_LANGUAGES) +// POSIX math.h declares a global, signgam, that lgamma writes to, so these +// shouldn't have "e" or "c" attributes +LIBBUILTIN(lgamma, "dd", "fn", "math.h", ALL_LANGUAGES) +LIBBUILTIN(lgammaf, "ff", "fn", "math.h", ALL_LANGUAGES) +LIBBUILTIN(lgammal, "LdLd", "fn", "math.h", ALL_LANGUAGES) LIBBUILTIN(llrint, "LLid", "fne", "math.h", ALL_LANGUAGES) LIBBUILTIN(llrintf, "LLif", "fne", "math.h", ALL_LANGUAGES) Index: cfe/trunk/test/CodeGen/libcall-declarations.c =================================================================== --- cfe/trunk/test/CodeGen/libcall-declarations.c +++ cfe/trunk/test/CodeGen/libcall-declarations.c @@ -402,9 +402,9 @@ // CHECK-NOERRNO: declare i32 @ilogb(double) [[NUW]] // CHECK-NOERRNO: declare i32 @ilogbf(float) [[NUW]] // CHECK-NOERRNO: declare i32 @ilogbl(x86_fp80) [[NUW]] -// CHECK-NOERRNO: declare double @lgamma(double) [[NUW]] -// CHECK-NOERRNO: declare float @lgammaf(float) [[NUW]] -// CHECK-NOERRNO: declare x86_fp80 @lgammal(x86_fp80) [[NUW]] +// CHECK-NOERRNO: declare double @lgamma(double) [[NONCONST:#[0-9]+]] +// CHECK-NOERRNO: declare float @lgammaf(float) [[NONCONST]] +// CHECK-NOERRNO: declare x86_fp80 @lgammal(x86_fp80) [[NONCONST]] // CHECK-NOERRNO: declare i64 @llrint(double) [[NUW]] // CHECK-NOERRNO: declare i64 @llrintf(float) [[NUW]] // CHECK-NOERRNO: declare i64 @llrintl(x86_fp80) [[NUW]] @@ -554,6 +554,9 @@ // CHECK-ERRNO: declare double @fmin(double, double) [[NUW]] // CHECK-ERRNO: declare float @fminf(float, float) [[NUW]] // CHECK-ERRNO: declare x86_fp80 @fminl(x86_fp80, x86_fp80) [[NUW]] +// CHECK-ERRNO: declare double @lgamma(double) [[NONCONST:#[0-9]+]] +// CHECK-ERRNO: declare float @lgammaf(float) [[NONCONST]] +// CHECK-ERRNO: declare x86_fp80 @lgammal(x86_fp80) [[NONCONST]] // CHECK-ERRNO: declare double @nearbyint(double) [[NUW]] // CHECK-ERRNO: declare float @nearbyintf(float) [[NUW]] // CHECK-ERRNO: declare x86_fp80 @nearbyintl(x86_fp80) [[NUW]] @@ -612,5 +615,11 @@ // CHECK-ERRNO: declare <2 x float> @ctanhf(<2 x float>) [[NUW]] // CHECK-NOERRNO: attributes [[NUW]] = { nounwind readnone{{.*}} } +// CHECK-NOERRNO: attributes [[NONCONST]] = { +// CHECK-NOERRNO-NOT: readnone +// CHECK-NOERRNO-SAME: nounwind{{.*}} } +// CHECK-ERRNO: attributes [[NONCONST]] = { +// CHECK-ERRNO-NOT: readnone +// CHECK-ERRNO-SAME: nounwind{{.*}} } // CHECK-ERRNO: attributes [[NUW]] = { nounwind readnone{{.*}} }