Issue |
137533
|
Summary |
False Positive of ODR Violation for Functions with Internal Linkage in Modules
|
Labels |
new issue
|
Assignees |
|
Reporter |
ckwastra
|
Code ([CE](https://godbolt.org/z/7rqfqKvjq)):
* `m.cpp`:
```cpp
module;
#include <cstdio>
export module m;
static void f() { std::puts(__FILE__); }
export auto &fr = f;
```
* `main.cpp`:
```cpp
#include <cstdio>
import m;
static void f() { std::puts(__FILE__); }
constexpr auto &fr1 = f;
auto &fr2 = fr;
int main() {
fr1();
fr2();
}
```
Clang raises the following error:
```cpp
m.cpp:4:13: error: 'f' has different definitions in different modules; definition in module 'm' first difference is function body
4 | static void f() { std::puts(__FILE__); }
| ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
main.cpp:3:13: note: but in '' found a different body
3 | static void f() { std::puts(__FILE__); }
| ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
```
GCC accepts the code (as expected), and running the produced executable outputs:
```
/app/main.cpp
/app/m.cpp
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs