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

Reply via email to