microsoft / microsoft/vscode-cpptools

consteval not correctly evaluated

Abierto
#14,401 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

bug Language Service Visual Studio
Lenguaje dominante
TypeScript
Estrellas
6.2k
Forks
1.7k
Merge medio
14 h 46 min
PR fusionados (30 d)
61

Descripción

Environment
  • OS and Version: Linux, Ubuntu 24.04
  • VS Code Version: 1.116.0
  • C/C++ Extension Version: 1.31.5
  • If using SSH remote, specify OS of remote machine: no
Bug Summary and Steps to Reproduce

Bug Summary:

The InteliSense output doesn't pars consteval correctly. Mose hover-over doesn't work for values of a struct returned by consteval.

Steps to reproduce:

#include <array>
#include <cstddef>
#include <cstdint>
#include <string_view>

namespace demo {

struct Register_t {
    std::string_view name;
    std::int64_t address;
};

inline constexpr auto registers = std::array{
    Register_t{"register_name", 0x1000},
};

template <std::size_t N>
consteval const Register_t& find_register(std::string_view name, const std::array<Register_t, N>& regs) {
    for (const auto& reg : regs) {
        if (reg.name == name) {
            return reg;
        }
    }
    throw "Register not found";
}

consteval const Register_t& get_register(std::string_view name) { return find_register(name, registers); }

}  // namespace demo

static constexpr std::int64_t register_address = demo::get_register("register_name").address;

static_assert(demo::get_register("register_name").address == 0x1000);
static_assert(register_address == 0x1000);

The mouse hover-over of demo::get_register("register_name").address just return int64_t demo::Register_t::address instead of the expected value 0x1000 as it is done through the assigned value in register_address

Expected behavior:

Mouse hover-over on demo::get_register("register_name").address shows also the value.

It seems that the behavior isn't that stable, means that some times the value is returned and sometimes not. e.g. in Version 1.29.3 the values are shown when it is used for template initialization.

Configuration and Logs
-
Other Extensions

ms-vscode.cmake-tools
ms-vscode.cpptools-themes
ms-vscode.cpptools-extension-pack
ms-vscode.cpp-devtools

Additional context

No response

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comience reproduciendo el comportamiento del hover con el ejemplo de C++ consteval del issue, comparando el acceso directo al miembro con la inicialización de register_address. Siga la ruta de evaluación del hover de IntelliSense para los resultados de funciones consteval e inspeccione cómo se muestran los valores. Se considera completado cuando el hover sobre demo::get_register("register_name").address muestra 0x1000 de forma consistente, con cobertura para el caso reportado.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
cpp
Área
developer-experience, tooling
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Tranquilo
Claridad
Bastante claro
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.