[lld] r362162 - [WebAssembly] Improve feature validation error messages
Thomas Lively via llvm-commits
llvm-commits at lists.llvm.org
Thu May 30 14:57:24 PDT 2019
Author: tlively
Date: Thu May 30 14:57:23 2019
New Revision: 362162
URL: http://llvm.org/viewvc/llvm-project?rev=362162&view=rev
Log:
[WebAssembly] Improve feature validation error messages
Summary:
Add the names of the input files responsible for each error to the
messages.
Reviewers: sbc100, azakai
Subscribers: dschuff, jgravelle-google, aheejin, sunfish, jfb, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D62704
Modified:
lld/trunk/test/wasm/shared-memory-no-atomics.yaml
lld/trunk/test/wasm/target-feature-required.yaml
lld/trunk/test/wasm/target-feature-used.yaml
lld/trunk/wasm/Writer.cpp
Modified: lld/trunk/test/wasm/shared-memory-no-atomics.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/wasm/shared-memory-no-atomics.yaml?rev=362162&r1=362161&r2=362162&view=diff
==============================================================================
--- lld/trunk/test/wasm/shared-memory-no-atomics.yaml (original)
+++ lld/trunk/test/wasm/shared-memory-no-atomics.yaml Thu May 30 14:57:23 2019
@@ -57,4 +57,4 @@ Sections:
# NO-SHARED-NEXT: - Initial: 0x00000002
# NO-SHARED-NOT: Maximum:
-# SHARED: 'atomics' feature is disallowed, so --shared-memory must not be used{{$}}
+# SHARED: 'atomics' feature is disallowed by {{.*}}shared-memory-no-atomics.yaml.tmp1.o, so --shared-memory must not be used{{$}}
Modified: lld/trunk/test/wasm/target-feature-required.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/wasm/target-feature-required.yaml?rev=362162&r1=362161&r2=362162&view=diff
==============================================================================
--- lld/trunk/test/wasm/target-feature-required.yaml (original)
+++ lld/trunk/test/wasm/target-feature-required.yaml Thu May 30 14:57:23 2019
@@ -51,7 +51,7 @@ Sections:
# SPECIFIED-NEXT: Name: foo
# SPECIFIED-NEXT: ...
-# UNSPECIFIED: Target feature 'foo' is not allowed.{{$}}
+# UNSPECIFIED: Target feature 'foo' used by {{.*}}target-feature-required.yaml.tmp1.o is not allowed.{{$}}
# UNSPECIFIED-NOCHECK: - Type: CUSTOM
# UNSPECIFIED-NOCHECK-NEXT: Name: target_features
@@ -71,7 +71,7 @@ Sections:
# REQUIRED-NEXT: Name: foo
# REQUIRED-NEXT: ...
-# DISALLOWED: Target feature 'foo' is disallowed. Use --no-check-features to suppress.{{$}}
+# DISALLOWED: Target feature 'foo' used in {{.*}}target-feature-required.yaml.tmp1.o is disallowed by {{.*}}target-feature-required.yaml.tmp.disallowed.o. Use --no-check-features to suppress.{{$}}
# DISALLOWED-NOCHECK: - Type: CUSTOM
# DISALLOWED-NOCHECK-NEXT: Name: target_features
@@ -80,7 +80,7 @@ Sections:
# DISALLOWED-NOCHECK-NEXT: Name: foo
# DISALLOWED-NOCHECK-NEXT: ...
-# NONE: Missing required target feature 'foo'. Use --no-check-features to suppress.{{$}}
+# NONE: Missing target feature 'foo' in {{.*}}target-feature-required.yaml.tmp.none.o, required by {{.*}}target-feature-required.yaml.tmp1.o. Use --no-check-features to suppress.{{$}}
# NONE-NOCHECK: - Type: CUSTOM
# NONE-NOCHECK-NEXT: Name: target_features
Modified: lld/trunk/test/wasm/target-feature-used.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/wasm/target-feature-used.yaml?rev=362162&r1=362161&r2=362162&view=diff
==============================================================================
--- lld/trunk/test/wasm/target-feature-used.yaml (original)
+++ lld/trunk/test/wasm/target-feature-used.yaml Thu May 30 14:57:23 2019
@@ -53,7 +53,7 @@ Sections:
# SPECIFIED-NEXT: Name: foo
# SPECIFIED-NEXT: ...
-# UNSPECIFIED: Target feature 'foo' is not allowed.{{$}}
+# UNSPECIFIED: Target feature 'foo' used by {{.*}}target-feature-used.yaml.tmp1.o is not allowed.{{$}}
# UNSPECIFIED-NOCHECK: - Type: CUSTOM
# UNSPECIFIED-NOCHECK-NEXT: Name: target_features
@@ -80,7 +80,7 @@ Sections:
# REQUIRED-NEXT: Name: foo
# REQUIRED-NEXT: ...
-# DISALLOWED: Target feature 'foo' is disallowed. Use --no-check-features to suppress.{{$}}
+# DISALLOWED: Target feature 'foo' used in {{.*}}target-feature-used.yaml.tmp1.o is disallowed by {{.*}}target-feature-used.yaml.tmp.disallowed.o. Use --no-check-features to suppress.{{$}}
# DISALLOWED-NOCHECK: - Type: CUSTOM
# DISALLOWED-NOCHECK-NEXT: Name: target_features
Modified: lld/trunk/wasm/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/wasm/Writer.cpp?rev=362162&r1=362161&r2=362162&view=diff
==============================================================================
--- lld/trunk/wasm/Writer.cpp (original)
+++ lld/trunk/wasm/Writer.cpp Thu May 30 14:57:23 2019
@@ -348,9 +348,9 @@ void Writer::finalizeSections() {
}
void Writer::populateTargetFeatures() {
- SmallSet<std::string, 8> Used;
- SmallSet<std::string, 8> Required;
- SmallSet<std::string, 8> Disallowed;
+ StringMap<std::string> Used;
+ StringMap<std::string> Required;
+ StringMap<std::string> Disallowed;
// Only infer used features if user did not specify features
bool InferFeatures = !Config->Features.hasValue();
@@ -365,17 +365,18 @@ void Writer::populateTargetFeatures() {
// Find the sets of used, required, and disallowed features
for (ObjFile *File : Symtab->ObjectFiles) {
+ StringRef FileName(File->getName());
for (auto &Feature : File->getWasmObj()->getTargetFeatures()) {
switch (Feature.Prefix) {
case WASM_FEATURE_PREFIX_USED:
- Used.insert(Feature.Name);
+ Used.insert({Feature.Name, FileName});
break;
case WASM_FEATURE_PREFIX_REQUIRED:
- Used.insert(Feature.Name);
- Required.insert(Feature.Name);
+ Used.insert({Feature.Name, FileName});
+ Required.insert({Feature.Name, FileName});
break;
case WASM_FEATURE_PREFIX_DISALLOWED:
- Disallowed.insert(Feature.Name);
+ Disallowed.insert({Feature.Name, FileName});
break;
default:
error("Unrecognized feature policy prefix " +
@@ -385,41 +386,52 @@ void Writer::populateTargetFeatures() {
}
if (InferFeatures)
- Out.TargetFeaturesSec->Features.insert(Used.begin(), Used.end());
+ Out.TargetFeaturesSec->Features.insert(Used.keys().begin(),
+ Used.keys().end());
- if (Out.TargetFeaturesSec->Features.count("atomics") && !Config->SharedMemory)
- error("'atomics' feature is used, so --shared-memory must be used");
+ if (Out.TargetFeaturesSec->Features.count("atomics") &&
+ !Config->SharedMemory) {
+ if (InferFeatures)
+ error(Twine("'atomics' feature is used by ") + Used["atomics"] +
+ ", so --shared-memory must be used");
+ else
+ error("'atomics' feature is used, so --shared-memory must be used");
+ }
if (!Config->CheckFeatures)
return;
if (Disallowed.count("atomics") && Config->SharedMemory)
- error(
- "'atomics' feature is disallowed, so --shared-memory must not be used");
+ error("'atomics' feature is disallowed by " + Disallowed["atomics"] +
+ ", so --shared-memory must not be used");
// Validate that used features are allowed in output
if (!InferFeatures) {
- for (auto &Feature : Used) {
+ for (auto &Feature : Used.keys()) {
if (!Out.TargetFeaturesSec->Features.count(Feature))
- error(Twine("Target feature '") + Feature + "' is not allowed.");
+ error(Twine("Target feature '") + Feature + "' used by " +
+ Used[Feature] + " is not allowed.");
}
}
// Validate the required and disallowed constraints for each file
for (ObjFile *File : Symtab->ObjectFiles) {
+ StringRef FileName(File->getName());
SmallSet<std::string, 8> ObjectFeatures;
for (auto &Feature : File->getWasmObj()->getTargetFeatures()) {
if (Feature.Prefix == WASM_FEATURE_PREFIX_DISALLOWED)
continue;
ObjectFeatures.insert(Feature.Name);
if (Disallowed.count(Feature.Name))
- error(Twine("Target feature '") + Feature.Name +
- "' is disallowed. Use --no-check-features to suppress.");
+ error(Twine("Target feature '") + Feature.Name + "' used in " +
+ FileName + " is disallowed by " + Disallowed[Feature.Name] +
+ ". Use --no-check-features to suppress.");
}
- for (auto &Feature : Required) {
+ for (auto &Feature : Required.keys()) {
if (!ObjectFeatures.count(Feature))
- error(Twine("Missing required target feature '") + Feature +
- "'. Use --no-check-features to suppress.");
+ error(Twine("Missing target feature '") + Feature + "' in " + FileName +
+ ", required by " + Required[Feature] +
+ ". Use --no-check-features to suppress.");
}
}
}
More information about the llvm-commits
mailing list