================
@@ -302,27 +312,38 @@ void Sema::DiagnoseUnusedExprResult(const Stmt *S, 
unsigned DiagID) {
     if (const Decl *FD = CE->getCalleeDecl()) {
       if (ShouldSuppress)
         return;
-      if (FD->hasAttr<PureAttr>()) {
+      if (const auto *A = FD->getAttr<PureAttr>()) {
         Diag(Loc, diag::warn_unused_call) << R1 << R2 << "pure";
+        if (OffendingDecl && !OffendingDecl->getIdentifier()->getBuiltinID())
----------------
Mick235711 wrote:

That check on builtin is actually added after the test `Seme/enable-if.c` fails:
```cpp
int isdigit(int c) __attribute__((overloadable));
int isdigit(int c) __attribute__((overloadable)) // expected-note {{'isdigit' 
has been explicitly marked unavailable here}}
  __attribute__((enable_if(c <= -1 || c > 255, "'c' must have the value of an 
unsigned char or EOF")))
  __attribute__((unavailable("'c' must have the value of an unsigned char or 
EOF")));

void test3(int c) {
  isdigit(c); // expected-warning{{ignoring return value of function declared 
with pure attribute}}
  isdigit(10); // expected-warning{{ignoring return value of function declared 
with pure attribute}}
#ifndef CODEGEN
  isdigit(-10);  // expected-error{{'isdigit' is unavailable: 'c' must have the 
value of an unsigned char or EOF}}
#endif
}
```
In this part of the test, without the builtin test a note will be generated on 
the first line ("`isdigit` has been explicitly marked pure here"), which is the 
result of isdigit been assigned pure attribute as a builtin.

Though despite this, thinking it over now, it is still debatable on whether 
generating note here on builtin is meaningful/useful... Do you think I should 
remove the test?

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

Reply via email to