https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116331

--- Comment #6 from Carl Dehlin <carl at dehlin dot com> ---
Thanks Jakub for your explanation.
Indeed, the following program runs fine and confirms what you just said.
Inspecting the assembly shows can both std::cos and __builtin_cos are
substituted to a library call when the input is not known at compile time

#include <cmath>
#include <cassert>
#include <cstdio>

int main()
{
    double x;
    if (!scanf("%lf", &x)) {
        return 1;
    }
    const double y = std::cos(x);
    const auto f = [x,y] {
        const double z = __builtin_cos(x);
        __builtin_printf("%a\n%a\n", y, z);
        return y == z;
    };
    assert(f());
}

Reply via email to