diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_binary.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_binary.bzl
index e5168d4..ac47fdc 100644
--- a/src/main/starlark/builtins_bzl/common/cc/cc_binary.bzl
+++ b/src/main/starlark/builtins_bzl/common/cc/cc_binary.bzl
@@ -14,12 +14,11 @@
 
 """cc_binary Starlark implementation replacing native"""
 
-load(":common/cc/cc_binary_attrs.bzl", "cc_binary_attrs")
-load(":common/cc/cc_common.bzl", "cc_common")
+load(":common/cc/semantics.bzl", "semantics")
+load(":common/cc/cc_shared_library.bzl", "GraphNodeInfo", "add_unused_dynamic_deps", "build_exports_map_from_only_dynamic_deps", "build_link_once_static_libs_map", "merge_cc_shared_library_infos", "separate_static_and_dynamic_link_libraries", "sort_linker_inputs", "throw_linked_but_not_exported_errors")
 load(":common/cc/cc_helper.bzl", "cc_helper", "linker_mode")
 load(":common/cc/cc_info.bzl", "CcInfo")
-load(":common/cc/cc_shared_library.bzl", "GraphNodeInfo", "add_unused_dynamic_deps", "build_exports_map_from_only_dynamic_deps", "build_link_once_static_libs_map", "merge_cc_shared_library_infos", "separate_static_and_dynamic_link_libraries", "sort_linker_inputs", "throw_linked_but_not_exported_errors")
-load(":common/cc/semantics.bzl", "semantics")
+load(":common/cc/cc_common.bzl", "cc_common")
 
 DebugPackageInfo = _builtins.toplevel.DebugPackageInfo
 cc_internal = _builtins.internal.cc_internal
@@ -341,7 +340,7 @@
     static_linker_inputs = []
     linker_inputs = cc_linking_context.linker_inputs.to_list()
 
-    all_deps = ctx.attr._deps_analyzed_by_graph_structure_aspect
+    all_deps = ctx.attr.deps + semantics.get_cc_runtimes(ctx, _is_link_shared(ctx))
     graph_structure_aspect_nodes = [dep[GraphNodeInfo] for dep in all_deps if GraphNodeInfo in dep]
 
     can_be_linked_dynamically = {}
@@ -911,18 +910,20 @@
 
     return providers
 
-cc_binary = rule(
-    implementation = _impl,
-    attrs = cc_binary_attrs,
-    outputs = {
-        "stripped_binary": "%{name}.stripped",
-        "dwp_file": "%{name}.dwp",
-    },
-    fragments = ["cpp"] + semantics.additional_fragments(),
-    exec_groups = {
-        "cpp_link": exec_group(toolchains = cc_helper.use_cpp_toolchain()),
-    },
-    toolchains = cc_helper.use_cpp_toolchain() +
-                 semantics.get_runtimes_toolchain(),
-    executable = True,
-)
+def make_cc_binary(cc_binary_attrs, **kwargs):
+    return rule(
+        implementation = _impl,
+        attrs = cc_binary_attrs,
+        outputs = {
+            "stripped_binary": "%{name}.stripped",
+            "dwp_file": "%{name}.dwp",
+        },
+        fragments = ["cpp"] + semantics.additional_fragments(),
+        exec_groups = {
+            "cpp_link": exec_group(toolchains = cc_helper.use_cpp_toolchain()),
+        },
+        toolchains = cc_helper.use_cpp_toolchain() +
+                     semantics.get_runtimes_toolchain(),
+        executable = True,
+        **kwargs
+    )
diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_binary_attrs.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_binary_attrs.bzl
index e2eb792..5b1f6d1 100644
--- a/src/main/starlark/builtins_bzl/common/cc/cc_binary_attrs.bzl
+++ b/src/main/starlark/builtins_bzl/common/cc/cc_binary_attrs.bzl
@@ -15,13 +15,13 @@
 """Attributes for cc_binary.
 """
 
-load(":common/cc/cc_info.bzl", "CcInfo")
-load(":common/cc/cc_shared_library.bzl", "dynamic_deps_attrs")
 load(":common/cc/semantics.bzl", "semantics")
+load(":common/cc/cc_shared_library.bzl", "CcSharedLibraryInfo", "graph_structure_aspect")
+load(":common/cc/cc_info.bzl", "CcInfo")
 
 cc_internal = _builtins.internal.cc_internal
 
-cc_binary_attrs = {
+cc_binary_attrs_with_aspects = {
     "srcs": attr.label_list(
         flags = ["DIRECT_COMPILE_TIME_INPUT"],
         allow_files = True,
@@ -54,19 +54,26 @@
         allow_rules = semantics.ALLOWED_RULES_IN_DEPS + semantics.ALLOWED_RULES_WITH_WARNINGS_IN_DEPS,
         flags = ["SKIP_ANALYSIS_TIME_FILETYPE_CHECK"],
         providers = [CcInfo],
+        aspects = [graph_structure_aspect],
+    ),
+    "dynamic_deps": attr.label_list(
+        allow_files = False,
+        providers = [CcSharedLibraryInfo],
     ),
     "malloc": attr.label(
         default = Label("@" + semantics.get_repo() + "//tools/cpp:malloc"),
         allow_files = False,
         providers = [CcInfo],
-        allow_rules = ["cc_library"],
+        aspects = [graph_structure_aspect],
     ),
     "_default_malloc": attr.label(
         default = configuration_field(fragment = "cpp", name = "custom_malloc"),
+        aspects = [graph_structure_aspect],
     ),
     "link_extra_lib": attr.label(
         default = Label("@" + semantics.get_repo() + "//tools/cpp:link_extra_lib"),
         providers = [CcInfo],
+        aspects = [graph_structure_aspect],
     ),
     "stamp": attr.int(
         values = [-1, 0, 1],
@@ -91,6 +98,25 @@
     "_use_auto_exec_groups": attr.bool(default = True),
 }
 
-cc_binary_attrs.update(dynamic_deps_attrs)
-cc_binary_attrs.update(semantics.get_distribs_attr())
-cc_binary_attrs.update(semantics.get_loose_mode_in_hdrs_check_allowed_attr())
+cc_binary_attrs_with_aspects.update(semantics.get_distribs_attr())
+cc_binary_attrs_with_aspects.update(semantics.get_loose_mode_in_hdrs_check_allowed_attr())
+
+# Update attributes to contain no aspect implementation.
+cc_binary_attrs_without_aspects = dict(cc_binary_attrs_with_aspects)
+cc_binary_attrs_without_aspects["deps"] = attr.label_list(
+    allow_files = semantics.ALLOWED_FILES_IN_DEPS,
+    allow_rules = semantics.ALLOWED_RULES_IN_DEPS + semantics.ALLOWED_RULES_WITH_WARNINGS_IN_DEPS,
+    flags = ["SKIP_ANALYSIS_TIME_FILETYPE_CHECK"],
+    providers = [CcInfo],
+)
+cc_binary_attrs_without_aspects["malloc"] = attr.label(
+    default = Label("@" + semantics.get_repo() + "//tools/cpp:malloc"),
+    allow_files = False,
+    allow_rules = ["cc_library"],
+)
+cc_binary_attrs_without_aspects["_default_malloc"] = attr.label(
+    default = configuration_field(fragment = "cpp", name = "custom_malloc"),
+)
+cc_binary_attrs_without_aspects["link_extra_lib"] = attr.label(
+    default = Label("@" + semantics.get_repo() + "//tools/cpp:link_extra_lib"),
+)
diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_binary_with_aspects.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_binary_with_aspects.bzl
new file mode 100644
index 0000000..bb172f7
--- /dev/null
+++ b/src/main/starlark/builtins_bzl/common/cc/cc_binary_with_aspects.bzl
@@ -0,0 +1,24 @@
+# Copyright 2022 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Exports cc_binary variant with aspects.
+
+If dynamic_deps attribute is specified we need to propagate
+aspects.
+"""
+
+load(":common/cc/cc_binary.bzl", "make_cc_binary")
+load(":common/cc/cc_binary_attrs.bzl", "cc_binary_attrs_with_aspects")
+
+cc_binary = make_cc_binary(cc_binary_attrs_with_aspects)
diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_binary_without_aspects.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_binary_without_aspects.bzl
new file mode 100644
index 0000000..5470e32
--- /dev/null
+++ b/src/main/starlark/builtins_bzl/common/cc/cc_binary_without_aspects.bzl
@@ -0,0 +1,24 @@
+# Copyright 2022 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Exports cc_binary variant without aspects.
+
+If dynamic_deps attribute is not specified we do not propagate
+aspects.
+"""
+
+load(":common/cc/cc_binary.bzl", "make_cc_binary")
+load(":common/cc/cc_binary_attrs.bzl", "cc_binary_attrs_without_aspects")
+
+cc_binary = make_cc_binary(cc_binary_attrs_without_aspects)
diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_binary_wrapper.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_binary_wrapper.bzl
new file mode 100644
index 0000000..35c1005
--- /dev/null
+++ b/src/main/starlark/builtins_bzl/common/cc/cc_binary_wrapper.bzl
@@ -0,0 +1,30 @@
+# Copyright 2022 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Macro encapsulating cc_binary rule implementation.
+
+This is to avoid propagating aspect on certain attributes in case
+dynamic_deps attribute is not specified.
+"""
+
+load(":common/cc/cc_binary_with_aspects.bzl", cc_binary_with_aspects = "cc_binary")
+load(":common/cc/cc_binary_without_aspects.bzl", cc_binary_without_aspects = "cc_binary")
+load(":common/cc/cc_helper.bzl", "cc_helper")
+
+def cc_binary(**kwargs):
+    # Propagate an aspect if dynamic_deps attribute is specified.
+    if "dynamic_deps" in kwargs and cc_helper.is_non_empty_list_or_select(kwargs["dynamic_deps"], "dynamic_deps"):
+        cc_binary_with_aspects(**kwargs)
+    else:
+        cc_binary_without_aspects(**kwargs)
diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl
index c838a76..405c33b 100644
--- a/src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl
+++ b/src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl
@@ -355,6 +355,14 @@
     )
     return def_file
 
+def _is_non_empty_list_or_select(value, attr):
+    if type(value) == "list":
+        return len(value) > 0
+    elif type(value) == "select":
+        return True
+    else:
+        fail("Only select or list is valid for {} attr".format(attr))
+
 CC_SOURCE = [".cc", ".cpp", ".cxx", ".c++", ".C", ".cu", ".cl"]
 C_SOURCE = [".c"]
 OBJC_SOURCE = [".m"]
@@ -1233,6 +1241,7 @@
     get_copts = _get_copts,
     get_expanded_env = _get_expanded_env,
     has_target_constraints = _has_target_constraints,
+    is_non_empty_list_or_select = _is_non_empty_list_or_select,
     expand_make_variables_for_copts = _expand_make_variables_for_copts,
     build_linking_context_from_libraries = _build_linking_context_from_libraries,
     is_stamping_enabled = _is_stamping_enabled,
diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_shared_library.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_shared_library.bzl
index 65e1e00..3661767 100644
--- a/src/main/starlark/builtins_bzl/common/cc/cc_shared_library.bzl
+++ b/src/main/starlark/builtins_bzl/common/cc/cc_shared_library.bzl
@@ -840,31 +840,6 @@
     fragments = ["cpp"] + semantics.additional_fragments(),
 )
 
-def _deps_analyzed_by_graph_structure_aspect(dynamic_deps, linkshared, deps, malloc, link_extra_lib):
-    if not dynamic_deps:
-        return []
-
-    # Propagate an aspect if dynamic_deps attribute is specified.
-    all_deps = []
-    all_deps.extend(deps)
-
-    if not linkshared:
-        all_deps.append(link_extra_lib)
-        all_deps.append(malloc)
-    return all_deps
-
-dynamic_deps_attrs = {
-    "dynamic_deps": attr.label_list(
-        allow_files = False,
-        providers = [CcSharedLibraryInfo],
-    ),
-    "_deps_analyzed_by_graph_structure_aspect": attr.label_list(
-        providers = [CcInfo],
-        aspects = [graph_structure_aspect],
-        default = _deps_analyzed_by_graph_structure_aspect,
-    ),
-}
-
 for_testing_dont_use_check_if_target_under_path = _check_if_target_under_path
 merge_cc_shared_library_infos = _merge_cc_shared_library_infos
 build_link_once_static_libs_map = _build_link_once_static_libs_map
diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_test.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_test.bzl
index 4c3b413..22c6fdaf 100644
--- a/src/main/starlark/builtins_bzl/common/cc/cc_test.bzl
+++ b/src/main/starlark/builtins_bzl/common/cc/cc_test.bzl
@@ -15,7 +15,7 @@
 """cc_test Starlark implementation."""
 
 load(":common/cc/cc_binary.bzl", "cc_binary_impl")
-load(":common/cc/cc_binary_attrs.bzl", "cc_binary_attrs")
+load(":common/cc/cc_binary_attrs.bzl", "cc_binary_attrs_with_aspects", "cc_binary_attrs_without_aspects")
 load(":common/cc/cc_helper.bzl", "cc_helper")
 load(":common/cc/semantics.bzl", "semantics")
 load(":common/paths.bzl", "paths")
@@ -77,43 +77,58 @@
     providers.extend(test_providers)
     return providers
 
-_cc_test_attrs = dict(cc_binary_attrs)
+def make_cc_test(with_aspects = False):
+    """Makes one of the cc_test rule variants.
 
-# Update cc_test defaults:
-_cc_test_attrs.update(
-    _is_test = attr.bool(default = True),
-    _apple_constraints = attr.label_list(
-        default = [
-            "@" + paths.join(semantics.get_platforms_root(), "os:ios"),
-            "@" + paths.join(semantics.get_platforms_root(), "os:macos"),
-            "@" + paths.join(semantics.get_platforms_root(), "os:tvos"),
-            "@" + paths.join(semantics.get_platforms_root(), "os:watchos"),
-        ],
-    ),
-    # Starlark tests don't get `env_inherit` by default.
-    env_inherit = attr.string_list(),
-    stamp = attr.int(values = [-1, 0, 1], default = 0),
-    linkstatic = attr.bool(default = False),
-)
-_cc_test_attrs.update(semantics.get_test_malloc_attr())
-_cc_test_attrs.update(semantics.get_coverage_attrs())
+    This function shall only be used internally in CC ruleset.
 
-cc_test = rule(
-    implementation = _impl,
-    attrs = _cc_test_attrs,
-    outputs = {
-        # TODO(b/198254254): Handle case for windows.
-        "stripped_binary": "%{name}.stripped",
-        "dwp_file": "%{name}.dwp",
-    },
-    fragments = ["cpp", "coverage"] + semantics.additional_fragments(),
-    exec_groups = {
-        "cpp_link": exec_group(toolchains = cc_helper.use_cpp_toolchain()),
-        # testing.ExecutionInfo defaults to an exec_group of "test".
-        "test": exec_group(toolchains = [config_common.toolchain_type(_CC_TEST_TOOLCHAIN_TYPE, mandatory = False)]),
-    },
-    toolchains = [] +
-                 cc_helper.use_cpp_toolchain() +
-                 semantics.get_runtimes_toolchain(),
-    test = True,
-)
+    Args:
+      with_aspects: Attaches graph_structure_aspect to `deps` attribute and
+        implicit deps.
+    Returns:
+      A cc_test rule class.
+    """
+    _cc_test_attrs = None
+    if with_aspects:
+        _cc_test_attrs = dict(cc_binary_attrs_with_aspects)
+    else:
+        _cc_test_attrs = dict(cc_binary_attrs_without_aspects)
+
+    # Update cc_test defaults:
+    _cc_test_attrs.update(
+        _is_test = attr.bool(default = True),
+        _apple_constraints = attr.label_list(
+            default = [
+                "@" + paths.join(semantics.get_platforms_root(), "os:ios"),
+                "@" + paths.join(semantics.get_platforms_root(), "os:macos"),
+                "@" + paths.join(semantics.get_platforms_root(), "os:tvos"),
+                "@" + paths.join(semantics.get_platforms_root(), "os:watchos"),
+            ],
+        ),
+        # Starlark tests don't get `env_inherit` by default.
+        env_inherit = attr.string_list(),
+        stamp = attr.int(values = [-1, 0, 1], default = 0),
+        linkstatic = attr.bool(default = False),
+    )
+    _cc_test_attrs.update(semantics.get_test_malloc_attr())
+    _cc_test_attrs.update(semantics.get_coverage_attrs())
+
+    return rule(
+        implementation = _impl,
+        attrs = _cc_test_attrs,
+        outputs = {
+            # TODO(b/198254254): Handle case for windows.
+            "stripped_binary": "%{name}.stripped",
+            "dwp_file": "%{name}.dwp",
+        },
+        fragments = ["cpp", "coverage"] + semantics.additional_fragments(),
+        exec_groups = {
+            "cpp_link": exec_group(toolchains = cc_helper.use_cpp_toolchain()),
+            # testing.ExecutionInfo defaults to an exec_group of "test".
+            "test": exec_group(toolchains = [config_common.toolchain_type(_CC_TEST_TOOLCHAIN_TYPE, mandatory = False)]),
+        },
+        toolchains = [] +
+                     cc_helper.use_cpp_toolchain() +
+                     semantics.get_runtimes_toolchain(),
+        test = True,
+    )
diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_test_with_aspects.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_test_with_aspects.bzl
new file mode 100644
index 0000000..074519b
--- /dev/null
+++ b/src/main/starlark/builtins_bzl/common/cc/cc_test_with_aspects.bzl
@@ -0,0 +1,19 @@
+# Copyright 2022 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""cc_test Starlark implementation."""
+
+load(":common/cc/cc_test.bzl", "make_cc_test")
+
+cc_test = make_cc_test(with_aspects = True)
diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_test_without_aspects.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_test_without_aspects.bzl
new file mode 100644
index 0000000..c63ddd3
--- /dev/null
+++ b/src/main/starlark/builtins_bzl/common/cc/cc_test_without_aspects.bzl
@@ -0,0 +1,19 @@
+# Copyright 2022 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""cc_test Starlark implementation."""
+
+load(":common/cc/cc_test.bzl", "make_cc_test")
+
+cc_test = make_cc_test(with_aspects = False)
diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_test_wrapper.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_test_wrapper.bzl
index 3dda190..d8f35bb 100644
--- a/src/main/starlark/builtins_bzl/common/cc/cc_test_wrapper.bzl
+++ b/src/main/starlark/builtins_bzl/common/cc/cc_test_wrapper.bzl
@@ -14,13 +14,17 @@
 
 """cc_test Starlark implementation."""
 
-load(":common/cc/cc_test.bzl", _cc_test = "cc_test")
+load(":common/cc/cc_helper.bzl", "cc_helper")
+load(":common/cc/cc_test_with_aspects.bzl", _cc_test_with_aspects = "cc_test")
+load(":common/cc/cc_test_without_aspects.bzl", _cc_test_without_aspects = "cc_test")
 load(":common/cc/semantics.bzl", "semantics")
 
 def cc_test(**kwargs):
     """Entry point for cc_test rules.
 
-    It  serves to detect if the `linkstatic` attribute was explicitly set or not.
+    This avoids propagating aspects on certain attributes if dynamic_deps attribute is unset.
+
+    It also serves to detect if the `linkstatic` attribute was explicitly set or not.
     This is to workaround a deficiency in Starlark attributes.
     (See: https://github.com/bazelbuild/bazel/issues/14434)
 
@@ -31,4 +35,8 @@
     if "linkstatic" not in kwargs:
         kwargs["linkstatic"] = semantics.get_linkstatic_default_for_test()
 
-    _cc_test(**kwargs)
+    # Propagate an aspect if dynamic_deps attribute is specified.
+    if "dynamic_deps" in kwargs and cc_helper.is_non_empty_list_or_select(kwargs["dynamic_deps"], "dynamic_deps"):
+        _cc_test_with_aspects(**kwargs)
+    else:
+        _cc_test_without_aspects(**kwargs)
diff --git a/src/main/starlark/builtins_bzl/common/exports.bzl b/src/main/starlark/builtins_bzl/common/exports.bzl
index 4b6fa03..3244105 100755
--- a/src/main/starlark/builtins_bzl/common/exports.bzl
+++ b/src/main/starlark/builtins_bzl/common/exports.bzl
@@ -14,7 +14,7 @@
 
 """Exported builtins symbols that are not specific to OSS Bazel."""
 
-load("@_builtins//:common/cc/cc_binary.bzl", "cc_binary")
+load("@_builtins//:common/cc/cc_binary_wrapper.bzl", "cc_binary")
 load("@_builtins//:common/cc/cc_common.bzl", "cc_common")
 load("@_builtins//:common/cc/cc_compilation_helper.bzl", "cc_compilation_helper")
 load("@_builtins//:common/cc/cc_helper.bzl", "cc_helper")
diff --git a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkIntegrationTest.java
index d1f3826..9d43b4e 100644
--- a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkIntegrationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkIntegrationTest.java
@@ -224,6 +224,7 @@
 
   @Test
   public void testMacroHasGeneratorAttributes() throws Exception {
+    setBuildLanguageOptions("--experimental_builtins_injection_override=+cc_binary");
     scratch.file(
         "test/starlark/extension.bzl",
         "def _impl(ctx):",
@@ -242,7 +243,9 @@
         "  native_macro_rule = 'native_macro')",
         "macro_rule(name = 'macro_target')",
         "no_macro_rule(name = 'no_macro_target')",
-        "native_macro_rule(name = 'native_macro_target')");
+        "native_macro_rule(name = 'native_macro_target')",
+        "cc_binary(name = 'cc_target', deps = ['cc_dep'])",
+        "cc_library(name = 'cc_dep')");
 
     Rule withMacro = getRuleForTarget("macro_target");
     assertThat(withMacro.getAttr("generator_name")).isEqualTo("macro_target");
@@ -259,6 +262,12 @@
     assertThat(nativeMacro.getAttr("generator_name")).isEqualTo("native_macro_target");
     assertThat(nativeMacro.getAttr("generator_function")).isEqualTo("native_macro");
     assertThat(nativeMacro.getAttr("generator_location")).isEqualTo("test/starlark/BUILD:5:18");
+
+    // Starlark version of cc_binary is created by a wrapper macro.
+    Rule ccTarget = getRuleForTarget("cc_target");
+    assertThat(ccTarget.getAttr("generator_name")).isEqualTo("cc_target");
+    assertThat(ccTarget.getAttr("generator_function")).isEqualTo("cc_binary");
+    assertThat(ccTarget.getAttr("generator_location")).isEqualTo("test/starlark/BUILD:6:10");
   }
 
   @Test
