Skip to content

Commit d63b19e

Browse files
committed
Clear the LV cache when merging the availability attribute.
The availability implies default visibility, so it can change the computed visibility. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@171840 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 2fcadfe commit d63b19e

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

lib/Sema/SemaDecl.cpp

+6-2
Original file line numberDiff line numberDiff line change
@@ -1790,12 +1790,16 @@ DeclHasAttr(const Decl *D, const Attr *A) {
17901790

17911791
bool Sema::mergeDeclAttribute(Decl *D, InheritableAttr *Attr) {
17921792
InheritableAttr *NewAttr = NULL;
1793-
if (AvailabilityAttr *AA = dyn_cast<AvailabilityAttr>(Attr))
1793+
if (AvailabilityAttr *AA = dyn_cast<AvailabilityAttr>(Attr)) {
17941794
NewAttr = mergeAvailabilityAttr(D, AA->getRange(), AA->getPlatform(),
17951795
AA->getIntroduced(), AA->getDeprecated(),
17961796
AA->getObsoleted(), AA->getUnavailable(),
17971797
AA->getMessage());
1798-
else if (VisibilityAttr *VA = dyn_cast<VisibilityAttr>(Attr)) {
1798+
if (NewAttr) {
1799+
NamedDecl *ND = cast<NamedDecl>(D);
1800+
ND->ClearLVCache();
1801+
}
1802+
} else if (VisibilityAttr *VA = dyn_cast<VisibilityAttr>(Attr)) {
17991803
NewAttr = mergeVisibilityAttr(D, VA->getRange(), VA->getVisibility());
18001804
if (NewAttr) {
18011805
NamedDecl *ND = cast<NamedDecl>(D);

test/Sema/attr-availability.c

+3
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,6 @@ void f7(int) __attribute__((availability(ios,deprecated=4.0))); // expected-warn
4343
#if !__has_feature(attribute_availability_with_message)
4444
# error "Missing __has_feature"
4545
#endif
46+
47+
extern int x __attribute__((availability(macosx,introduced=10.5)));
48+
extern int x;

0 commit comments

Comments
 (0)