llvm/llvm-project

[clang++] operator==(vector of long, vector of long) -> vector of long long

Open

#132.604 aberto em 23 de mar. de 2025

Ver no GitHub
 (22 comments) (0 reactions) (1 assignee)C++ (10.782 forks)batch import
ABIclang:frontenddiverges-from:gccgood first issue

Métricas do repositório

Stars
 (26.378 stars)
Métricas de merge de PR
 (Mesclagem média 1d 2h) (1.000 fundiu PRs em 30d)

Description

When comparing two variables of vector of long, clang++ returns a vector of long long, inconsistent with g++. https://godbolt.org/z/db9zT6f4r

#include <type_traits>

using T [[gnu::vector_size(sizeof(long))]] = long;

static_assert(std::is_same_v<std::remove_reference_t<decltype((T{} == T{})[0])>, long>);

This makes the following code fails to compile with clang++ with the compilation options -march=x86-64-v4 -std=c++20 (previously reported as gcc bugzilla 118546). Online link: https://godbolt.org/z/sxqsKrv9e .

#include <experimental/simd>
#include <cstdint>

using deduce_t_element = std::experimental::simd<
    std::uint64_t,
    std::experimental::simd_abi::deduce_t<std::uint64_t, 4>
>;

auto f(deduce_t_element e) {
    return e == 0;
}

Guia do colaborador