mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-24 12:19:53 +00:00
dsymutil/modules: Reword the warning for static libraries without module caches
In addition to clarifying the warning message this contains a minor functional change in that it now warns if the *immediate* parent directory in which the missing PCM is expected to be isn't found. This patch also includes a more comprehensive testcase. rdar://problem/25860711 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270269 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
116261ccf9
commit
d492dcbc14
BIN
test/tools/dsymutil/Inputs/module-warnings/1.o
Normal file
BIN
test/tools/dsymutil/Inputs/module-warnings/1.o
Normal file
Binary file not shown.
BIN
test/tools/dsymutil/Inputs/module-warnings/Bar.pcm
Normal file
BIN
test/tools/dsymutil/Inputs/module-warnings/Bar.pcm
Normal file
Binary file not shown.
BIN
test/tools/dsymutil/Inputs/module-warnings/Foo.pcm
Normal file
BIN
test/tools/dsymutil/Inputs/module-warnings/Foo.pcm
Normal file
Binary file not shown.
BIN
test/tools/dsymutil/Inputs/module-warnings/libstatic.a
Normal file
BIN
test/tools/dsymutil/Inputs/module-warnings/libstatic.a
Normal file
Binary file not shown.
Binary file not shown.
53
test/tools/dsymutil/X86/module-warnings.test
Normal file
53
test/tools/dsymutil/X86/module-warnings.test
Normal file
@ -0,0 +1,53 @@
|
||||
# Compile with:
|
||||
# cat >modules.modulemap <<EOF
|
||||
# module Foo {
|
||||
# header "Foo.h"
|
||||
# export *
|
||||
# }
|
||||
# module Bar {
|
||||
# header "Bar.h"
|
||||
# export *
|
||||
# }
|
||||
# EOF
|
||||
# echo 'typedef int bar;' >Bar.h
|
||||
# echo '@import Bar; typedef bar foo;' >Foo.h
|
||||
# echo '@import Foo; foo f() { return 0; }' >module-warnings.m
|
||||
# clang -cc1 -emit-obj -fmodules -fmodule-map-file=modules.modulemap \
|
||||
# -fmodule-format=obj -debug-info-kind=standalone -dwarf-ext-refs \
|
||||
# -fmodules-cache-path=ModuleCache \
|
||||
# -fdisable-module-hash module-warnings.m -o 1.o
|
||||
#
|
||||
# Test for module-related warnings.
|
||||
#
|
||||
# RUN: rm -rf %t.dir && mkdir %t.dir && mkdir %t.dir/ModuleCache
|
||||
# RUN: cp %p/../Inputs/module-warnings/1.o %t.dir
|
||||
# RUN: cp %p/../Inputs/module-warnings/Foo.pcm %t.dir/ModuleCache
|
||||
#
|
||||
# RUN: llvm-dsymutil -f -oso-prepend-path=%t.dir -y \
|
||||
# RUN: %p/dummy-debug-map.map -o %t 2>&1 | FileCheck %s
|
||||
#
|
||||
# Module-not-found should be reported only once.
|
||||
# The exact error message depends on the OS so we don't check for it.
|
||||
# CHECK: warning: {{.*}}Bar.pcm:
|
||||
# CHECK-NOT: warning: {{.*}}Bar.pcm:
|
||||
#
|
||||
# RUN: cp %p/../Inputs/module-warnings/libstatic.a %t.dir
|
||||
# RUN: llvm-dsymutil -f -oso-prepend-path=%t.dir -y %s -o %t 2>&1 | FileCheck %s
|
||||
# CHECK: rebuild the module cache
|
||||
# CHECK-NOT: static libraries
|
||||
#
|
||||
# RUN: rm -rf %t.dir/ModuleCache
|
||||
# RUN: llvm-dsymutil -f -oso-prepend-path=%t.dir -y %s -o %t 2>&1 \
|
||||
# RUN: | FileCheck %s --check-prefix=STATIC
|
||||
# STATIC: warning: {{.*}}Bar.pcm:
|
||||
# STATIC: note: Linking a static library
|
||||
# STATIC: warning: {{.*}}Foo.pcm:
|
||||
# STATIC-NOT: note:
|
||||
|
||||
---
|
||||
triple: 'x86_64-apple-darwin'
|
||||
objects:
|
||||
- filename: libstatic.a(1.o)
|
||||
symbols:
|
||||
- { sym: __Z3foov, objAddr: 0x0, binAddr: 0x10000, size: 0x10 }
|
||||
...
|
@ -1,26 +0,0 @@
|
||||
# Test for module-related warnings.
|
||||
# This reuses the inputs from the modules.m testcase.
|
||||
#
|
||||
# RUN: rm -rf %t.dir && mkdir %t.dir
|
||||
# RUN: cp %p/../Inputs/modules/1.o %p/../Inputs/modules/Foo.pcm %t.dir
|
||||
#
|
||||
# RUN: llvm-dsymutil -f -oso-prepend-path=%t.dir -y \
|
||||
# RUN: %p/dummy-debug-map.map -o %t 2>&1 | FileCheck %s
|
||||
#
|
||||
# Module-not-found should be reported only once.
|
||||
# The exact error message depends on the OS so we don't check for it.
|
||||
# CHECK: warning: {{.*}}Bar.pcm:
|
||||
# CHECK-NOT: warning: {{.*}}Bar.pcm:
|
||||
#
|
||||
# RUN: cp %p/../Inputs/modules/libstatic.a %t.dir
|
||||
# RUN: llvm-dsymutil -f -oso-prepend-path=%t.dir -y %s -o %t 2>&1 | FileCheck %s
|
||||
# CHECK: rebuild the module cache
|
||||
# CHECK-NOT: static libraries
|
||||
|
||||
---
|
||||
triple: 'x86_64-apple-darwin'
|
||||
objects:
|
||||
- filename: libstatic.a(1.o)
|
||||
symbols:
|
||||
- { sym: __Z3foov, objAddr: 0x0, binAddr: 0x10000, size: 0x10 }
|
||||
...
|
@ -3302,7 +3302,6 @@ void DwarfLinker::loadClangModule(StringRef Filename, StringRef ModulePath,
|
||||
bool isClangModule = sys::path::extension(Filename).equals(".pcm");
|
||||
bool isArchive = ObjFile.endswith(")");
|
||||
if (isClangModule) {
|
||||
sys::path::remove_filename(Path);
|
||||
StringRef ModuleCacheDir = sys::path::parent_path(Path);
|
||||
if (sys::fs::exists(ModuleCacheDir)) {
|
||||
// If the module's parent directory exists, we assume that the module
|
||||
@ -3320,8 +3319,11 @@ void DwarfLinker::loadClangModule(StringRef Filename, StringRef ModulePath,
|
||||
// was built on a different machine. We don't want to discourage module
|
||||
// debugging for convenience libraries within a project though.
|
||||
if (!ArchiveHintDisplayed) {
|
||||
errs() << "note: Module debugging should be disabled when shipping "
|
||||
"static libraries.\n";
|
||||
errs() << "note: Linking a static library that was built with "
|
||||
"-gmodules, but the module cache was not found. "
|
||||
"Redistributable static libraries should never be built "
|
||||
"with module debugging enabled. The debug experience will "
|
||||
"be degraded due to incomplete debug information.\n";
|
||||
ArchiveHintDisplayed = true;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user