aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-04-20 15:23:07 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-04-21 10:57:43 +0000
commitdca3b6da89b731151e45e6b73b4ff589667d7b8c (patch)
tree7a66c4dfd77cb79fd58f41315676e588d90e7bf0
parent3c9a2265ea043c52c81951907fbc626b8c03add4 (diff)
Disable the generating .gcno files for .pcm compile actions. These can conflict
with the .gcno files for the actual .cc files. -- MOS_MIGRATED_REVID=120338906
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java13
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java19
2 files changed, 25 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
index 8fa9dff936..e09f0b4115 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
@@ -414,7 +414,7 @@ public final class CppModel {
// - the compiled source file is the module map
// - it creates a header module (.pcm file).
createSourceAction(outputName, result, env, moduleMapArtifact, builder, ".pcm", ".pcm.d",
- /*addObject=*/false);
+ /*addObject=*/false, /*enableCoverage=*/false);
}
for (Pair<Artifact, Label> source : sourceFiles) {
@@ -428,7 +428,7 @@ public final class CppModel {
createHeaderAction(outputName, result, env, builder);
} else {
createSourceAction(outputName, result, env, sourceArtifact, builder, ".o", ".d",
- /*addObject=*/true);
+ /*addObject=*/true, isCodeCoverageEnabled());
}
}
@@ -459,7 +459,8 @@ public final class CppModel {
CppCompileActionBuilder builder,
String outputExtension,
String dependencyFileExtension,
- boolean addObject) {
+ boolean addObject,
+ boolean enableCoverage) {
PathFragment ccRelativeName = semantics.getEffectiveSourcePath(sourceArtifact);
if (cppConfiguration.isLipoOptimization()) {
// TODO(bazel-team): we shouldn't be needing this, merging context with the binary
@@ -484,9 +485,7 @@ public final class CppModel {
CppCompileActionBuilder picBuilder =
copyAsPicBuilder(builder, outputName, outputExtension, dependencyFileExtension);
Artifact gcnoFile =
- isCodeCoverageEnabled()
- ? ruleContext.getRelatedArtifact(outputName, ".pic.gcno")
- : null;
+ enableCoverage ? ruleContext.getRelatedArtifact(outputName, ".pic.gcno") : null;
if (gcnoFile != null) {
picBuilder.setGcnoFile(gcnoFile);
}
@@ -525,7 +524,7 @@ public final class CppModel {
.setDotdFile(outputName, dependencyFileExtension);
// Create non-PIC compile actions
Artifact gcnoFile =
- !cppConfiguration.isLipoOptimization() && isCodeCoverageEnabled()
+ !cppConfiguration.isLipoOptimization() && enableCoverage
? ruleContext.getRelatedArtifact(outputName, ".gcno")
: null;
if (gcnoFile != null) {
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
index 2a7f5bdab0..ba6700f33f 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
@@ -37,6 +37,7 @@ import com.google.devtools.build.lib.analysis.OutputGroupProvider;
import com.google.devtools.build.lib.analysis.util.AnalysisMock;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.packages.util.MockCcSupport;
+import com.google.devtools.build.lib.rules.test.InstrumentedFilesProvider;
import com.google.devtools.build.lib.testutil.TestConstants;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -291,6 +292,24 @@ public class CcLibraryConfiguredTargetTest extends BuildViewTestCase {
}
@Test
+ public void testCodeCoverage() throws Exception {
+ AnalysisMock.get()
+ .ccSupport()
+ .setupCrosstool(mockToolsConfig, MockCcSupport.HEADER_MODULES_FEATURE_CONFIGURATION);
+ useConfiguration("--collect_code_coverage");
+ ConfiguredTarget x =
+ scratchConfiguredTarget(
+ "foo",
+ "x",
+ "package(features = ['header_modules'])",
+ "cc_library(name = 'x', srcs = ['x.cc'])");
+ assertThat(
+ ActionsTestUtil.baseArtifactNames(
+ x.getProvider(InstrumentedFilesProvider.class).getInstrumentationMetadataFiles()))
+ .containsExactly("x.pic.gcno");
+ }
+
+ @Test
public void testDisablingHeaderModulesWhenDependingOnModuleBuildTransitively() throws Exception {
AnalysisMock.get()
.ccSupport()