vinay-deshmukh wrote:

> > Essentially all of math.h doesn't exist until `C99`: 
> > https://en.cppreference.com/w/c/numeric/math/log
> 
> You seemed to misread the page. `logf` and `logl` exist since C99, while 
> `log` exists since C89.

@frederick-vs-ja 


My bad, I should have better clarified my previous comment.


While `log` does exist since C89 _within <math.h>_, it should be allowed for a 
`.c` to define `int log = 0;` because the `math.h` has not been included. 
Thereby, even if `double log(double);` exists in C89 (in `math.h`), it's not 
been declared in the current translation unit, so declaring a symbol with the 
same name as `log` seems to be valid IMO.

GCC's behavior seems to be that even if builtins are "re-defined" it is 
allowed, _when_ there is no explicit include for `math.h`


# Reference:

I've made a godbolt link https://godbolt.org/z/zY76dWa84 with all the symbols 
on https://en.cppreference.com/w/c/numeric/math

All panels have `-std=c89` in common and are the respective `trunk` versions.

1. Panel 1: GCC builds with warnings `[-Wbuiltin-declaration-mismatch]`
2. Panel 2: Clang builds (after passing non-default options, this PR will make 
those effective when using `-std=c89`) and no warnings despite `-Wall`
3. Panel 3: Clang fails to build (this issue)

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

Reply via email to