diff options
| author | David Blaikie <dblaikie@gmail.com> | 2017-11-02 21:55:40 +0000 |
|---|---|---|
| committer | David Blaikie <dblaikie@gmail.com> | 2017-11-02 21:55:40 +0000 |
| commit | 08267297931ca6138f0545c5ea8c8178c5d485be (patch) | |
| tree | bd9320174e93e1b01f216c7baf95e797ee18953d /clang/test | |
| parent | 4b3289e84f4f816ee084b4849c7f7ba4c1656352 (diff) | |
| download | bcm5719-llvm-08267297931ca6138f0545c5ea8c8178c5d485be.tar.gz bcm5719-llvm-08267297931ca6138f0545c5ea8c8178c5d485be.zip | |
Modular Codegen: Don't home/modularize static functions in headers
Consistent with various workarounds in the backwards compatible modules
that allow static functions in headers to exist, be deduplicated to some
degree, and not generally fail right out of the gate... do the same with
modular codegen as there are enough cases (including in libstdc++ and in
LLVM itself - though I cleaned up the easy ones) that it's worth
supporting as a migration/backcompat step.
Simply create a separate, internal linkage function in each object that
needs it. If an available_externally/modularized function references a
static function, but the modularized function is eventually dropped and
not inlined, the static function will be dropped as unreferenced.
llvm-svn: 317274
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/Modules/codegen-opt.test | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/clang/test/Modules/codegen-opt.test b/clang/test/Modules/codegen-opt.test index 2f4997a7c73..f62cf38a535 100644 --- a/clang/test/Modules/codegen-opt.test +++ b/clang/test/Modules/codegen-opt.test @@ -25,7 +25,13 @@ FOO-NOT: {{define|declare}} FOO: declare void @_Z2f1Ri(i32* FOO-NOT: {{define|declare}} -FIXME: this internal function should be weak_odr, comdat, and with a new mangling +Internal functions are not modularly code generated - they are +internal wherever they're used. This might not be ideal, but +continues to workaround/support some oddities that backwards +compatible modules have seen and supported in the wild. To remove +the duplication here, the internal functions would need to be +promoted to weak_odr, placed in comdat and given a new mangling - +this would be needed for the C++ Modules TS anyway. FOO: define internal void @_ZL2f2v() #{{[0-9]+}} FOO-NOT: {{define|declare}} @@ -45,7 +51,7 @@ BAR-OPT: define available_externally void @_Z3foov() BAR-CMN-NOT: {{define|declare}} BAR-OPT: declare void @_Z2f1Ri(i32* BAR-OPT-NOT: {{define|declare}} -BAR-OPT: define available_externally void @_ZL2f2v() +BAR-OPT: define internal void @_ZL2f2v() BAR-OPT-NOT: {{define|declare}} @@ -61,5 +67,5 @@ USE-OPT: define available_externally void @_Z3foov() USE-OPT-NOT: {{define|declare}} USE-OPT: declare void @_Z2f1Ri(i32* USE-OPT-NOT: {{define|declare}} -USE-OPT: define available_externally void @_ZL2f2v() +USE-OPT: define internal void @_ZL2f2v() USE-OPT-NOT: {{define|declare}} |

