[clang] [clang] Report narrowing conversions with const references (PR #75332)

Mariya Podchishchaeva via cfe-commits cfe-commits at lists.llvm.org
Thu Dec 14 05:39:55 PST 2023


================
@@ -10431,7 +10437,7 @@ static void DiagnoseNarrowingInInitList(Sema &S,
                                         : diag::warn_init_list_type_narrowing)
         << PostInit->getSourceRange()
         << PreNarrowingType.getLocalUnqualifiedType()
-        << EntityType.getLocalUnqualifiedType();
+        << EntityType.getLocalUnqualifiedType().getNonReferenceType();
----------------
Fznamznon wrote:

> Since this is supposed to remove local qualifiers, should the reference be removed first? What happens with a const int & as is?

Perhaps makes sense. I only removed reference since it is already removed from the pre-narrowing-type and I was a bit inspired by gcc messages https://godbolt.org/z/Tcv17Wxhc . I could leave reference type it as is, then the messages will look like:

```

struct A { A(const unsigned &x) {} };

int foo(const int &aba) {
    A a { -1 }; // constant expression evaluates to -1 which cannot be narrowed to type 'const unsigned int&'
    A b { aba }; // non-constant-expression cannot be narrowed from type 'int' to 'const unsigned int' in initializer list
    return 0;
}
```

https://github.com/llvm/llvm-project/pull/75332


More information about the cfe-commits mailing list