Skip to content

Commit 02ff2ee

Browse files
committed
[SE-0258] Diagnose uses of property wrappers in top-level code.
We don't current support property wrappers at the top level, so error on them (rather than crashing later). Fixes rdar://problem/51538524.
1 parent 749a972 commit 02ff2ee

File tree

3 files changed

+23
-0
lines changed

3 files changed

+23
-0
lines changed

include/swift/AST/DiagnosticsSema.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4463,6 +4463,8 @@ NOTE(property_wrapper_declared_here,none,
44634463

44644464
ERROR(property_wrapper_local,none,
44654465
"property wrappers are not yet supported on local properties", ())
4466+
ERROR(property_wrapper_top_level,none,
4467+
"property wrappers are not yet supported in top-level code", ())
44664468
ERROR(property_wrapper_let, none,
44674469
"property wrapper can only be applied to a 'var'",
44684470
())

lib/Sema/TypeCheckPropertyWrapper.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,12 @@ AttachedPropertyWrappersRequest::evaluate(Evaluator &evaluator,
401401
continue;
402402
}
403403

404+
// Nor does top-level code.
405+
if (var->getDeclContext()->isModuleScopeContext()) {
406+
ctx.Diags.diagnose(attr->getLocation(), diag::property_wrapper_top_level);
407+
continue;
408+
}
409+
404410
// Check that the variable is part of a single-variable pattern.
405411
auto binding = var->getParentPatternBinding();
406412
if (!binding || binding->getSingleVar() != var) {
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// RUN: %target-swift-frontend -typecheck -primary-file %s -verify -module-name main
2+
3+
@propertyWrapper
4+
struct Wrapper<T> {
5+
var wrappedValue: T
6+
init(initialValue: T) {
7+
wrappedValue = initialValue
8+
}
9+
}
10+
11+
// expected-error@+1{{property wrappers are not yet supported in top-level code}}
12+
@Wrapper var value: Int = 17
13+
14+
func f() { }
15+
f()

0 commit comments

Comments
 (0)