diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3347052e75..69edc48b0e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
# Svelte changelog
+## Unreleased
+
+* Fix erroneous `missing-declaration` warning with `use:obj.method` ([#5451](https://github.com/sveltejs/svelte/issues/5451))
+
## 3.26.0
* Support `use:obj.method` as actions ([#3935](https://github.com/sveltejs/svelte/issues/3935))
diff --git a/src/compiler/compile/nodes/Action.ts b/src/compiler/compile/nodes/Action.ts
index 86aefa0ced..dc6f080b71 100644
--- a/src/compiler/compile/nodes/Action.ts
+++ b/src/compiler/compile/nodes/Action.ts
@@ -11,10 +11,11 @@ export default class Action extends Node {
constructor(component: Component, parent, scope, info) {
super(component, parent, scope, info);
- component.warn_if_undefined(info.name, info, scope);
+ const object = info.name.split('.')[0];
+ component.warn_if_undefined(object, info, scope);
this.name = info.name;
- component.add_reference(info.name.split('.')[0]);
+ component.add_reference(object);
this.expression = info.expression
? new Expression(component, this, scope, info.expression)
diff --git a/test/validator/samples/action-object/input.svelte b/test/validator/samples/action-object/input.svelte
new file mode 100644
index 0000000000..e0962fa594
--- /dev/null
+++ b/test/validator/samples/action-object/input.svelte
@@ -0,0 +1,11 @@
+
+
+
+
\ No newline at end of file
diff --git a/test/validator/samples/action-object/warnings.json b/test/validator/samples/action-object/warnings.json
new file mode 100644
index 0000000000..e1ccbb55a2
--- /dev/null
+++ b/test/validator/samples/action-object/warnings.json
@@ -0,0 +1,17 @@
+[
+ {
+ "code": "missing-declaration",
+ "end": {
+ "character": 217,
+ "column": 39,
+ "line": 11
+ },
+ "message": "'foo' is not defined",
+ "pos": 186,
+ "start": {
+ "character": 186,
+ "column": 8,
+ "line": 11
+ }
+ }
+]