Report error when accessing cc configuration without fragment

Closes #10392

Closes #10823.

PiperOrigin-RevId: 296202475
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
index 87a30f4..b0003d0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
@@ -142,6 +142,13 @@
               + "Please add 'ctx' as a named parameter. See "
               + "https://github.com/bazelbuild/bazel/issues/7793 for details.");
     }
+    if (ruleContext != null
+        && !ruleContext.getRuleContext().isLegalFragment(CppConfiguration.class)) {
+      throw Starlark.errorf(
+          "%s must declare '%s' as a required configuration fragment to access it.",
+          ruleContext.getRuleContext().getRuleClassNameForLogging(),
+          CppConfiguration.class.getSimpleName());
+    }
     CppConfiguration cppConfiguration =
         ruleContext == null
             ? toolchain.getCppConfigurationEvenThoughItCanBeDifferentThanWhatTargetHas()
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java
index 932c0d6..3d3fec0 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java
@@ -74,7 +74,7 @@
 
   @SkylarkCallable(
       name = "configure_features",
-      doc = "Creates a feature_configuration instance.",
+      doc = "Creates a feature_configuration instance. Requires the cpp configuration fragment.",
       parameters = {
         @Param(
             name = "ctx",