Mick235711 wrote:

Release note added.

Incidentally, this also fixes an inconsistency for Clang compared to GCC/MSVC: 
In the following program
```cpp
struct [[nodiscard("Reason 1")]] S {};
[[nodiscard("Reason 2")]] S getS();

int main()
{
    getS();
}
```
My opinion is that the function's attribute should take precedence since it is 
"more specific". GCC/MSVC trunk agrees with me and prints Reason 2 in warning, 
while Clang trunk prints Reason 1. ([Compiler 
Explorer](https://godbolt.org/z/4jd1zK31j)). After this PR, Clang will also 
print Reason 2 here.

Also, the same CE link also explores the note generation on `nodiscard` vs 
`deprecated`, which was the motivation for the original PR #112289. Here, GCC 
is the most verbose, generating 1 warning + 2 notes (one on declaration of 
function and one on declaration of type), when the function's return type is 
marked as `nodiscard`. 1 warning + 1 note is generated for both `deprecated` 
and normal `nodiscard` on the function itself. MSVC on the other hand just 
generates 1 warning (no note) for `nodiscard` regardless of placement, and 
doesn't seem to implemented `deprecated` at all. (This stats is only FYI)

https://github.com/llvm/llvm-project/pull/112521
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to