diff --git a/clang/lib/Sema/SemaAPINotes.cpp b/clang/lib/Sema/SemaAPINotes.cpp index 059eb0dd767b7..12929895b3789 100644 --- a/clang/lib/Sema/SemaAPINotes.cpp +++ b/clang/lib/Sema/SemaAPINotes.cpp @@ -409,6 +409,12 @@ void Sema::ApplyAPINotesType(Decl *D, StringRef TypeString) { property->getType(), Type)) { property->setType(Type, TypeInfo); } + } else if (auto field = dyn_cast(D)) { + if (!checkAPINotesReplacementType(*this, field->getLocation(), + field->getType(), Type)) { + field->setType(Type); + field->setTypeSourceInfo(TypeInfo); + } } else { llvm_unreachable("API notes allowed a type on an unknown declaration"); } diff --git a/clang/test/APINotes/Inputs/Headers/Fields.apinotes b/clang/test/APINotes/Inputs/Headers/Fields.apinotes index 931da52ba29d1..44545ab8c7d27 100644 --- a/clang/test/APINotes/Inputs/Headers/Fields.apinotes +++ b/clang/test/APINotes/Inputs/Headers/Fields.apinotes @@ -4,6 +4,7 @@ Tags: - Name: IntWrapper Fields: - Name: value + Type: ValueType Availability: none AvailabilityMsg: "oh no" - Name: Outer diff --git a/clang/test/APINotes/Inputs/Headers/Fields.h b/clang/test/APINotes/Inputs/Headers/Fields.h index dbd342da47789..cc2bc5814c00a 100644 --- a/clang/test/APINotes/Inputs/Headers/Fields.h +++ b/clang/test/APINotes/Inputs/Headers/Fields.h @@ -1,3 +1,5 @@ +enum class ValueType {}; + struct IntWrapper { int value; diff --git a/clang/test/APINotes/fields.cpp b/clang/test/APINotes/fields.cpp index 8dea2229b4e0a..1522f098634cd 100644 --- a/clang/test/APINotes/fields.cpp +++ b/clang/test/APINotes/fields.cpp @@ -6,7 +6,7 @@ #include "Fields.h" // CHECK-FIELD: Dumping IntWrapper::value: -// CHECK-FIELD-NEXT: FieldDecl {{.+}} value +// CHECK-FIELD-NEXT: FieldDecl {{.+}} value 'ValueType' // CHECK-FIELD: UnavailableAttr {{.+}} <> "oh no" // CHECK-DEEP-FIELD: Dumping Outer::Inner::value: