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

            Bug ID: 119150
           Summary: Optimization causes function call arguments to
                    consteval functions to not be manifestly
                    constant-evaluated
           Product: gcc
           Version: 14.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: aapomeranz at yahoo dot com
  Target Milestone: ---

#include <iostream>

auto consteval CONSTEVAL(auto x)
{
    return x;
}

constexpr bool isconstant()
{
    return std::is_constant_evaluated();
}

int main()
{
    // Tested via godbolt.org using the following compilers/flags:
    // GCC x86-64 -std=c++20 (13.3.0, 14.1.0, and 15.0.1 20250306)
    // Clang x86-64 -std=c++20 (head)
    // MSVC x64 /std:c++20 (head)


    // Working case:
    // GCC (all tested versions), Clang, MSVC: prints 1
    constexpr int n { CONSTEVAL(isconstant()) };
    std::cout << n << '\n';


    // Broken case:
    // Clang and MSVC: prints 1
    // GCC: -Ox (when x == 0) prints 1 on GCC (all tested versions)
    // GCC: -Ox (when x != 0) prints 1 on GCC 13.3.0
    // GCC: -Ox (when x != 0) prints 0 on GCC 14.1.0 and 15.0.1 20250306
    std::cout << CONSTEVAL(isconstant()) << '\n';


    return 0;
}

Reply via email to