From: Aaron Ballman Date: Wed, 4 Dec 2013 22:23:43 +0000 (+0000) Subject: The MSP430Interrupt attribute does have a sema handler (it's in TargetAttributesSema... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=db218b62f65f84d8bf608b15c81c7f70b530baaf;p=clang The MSP430Interrupt attribute does have a sema handler (it's in TargetAttributesSema). Added a FIXME about the attribute being nameless when it really does have a valid name, and a comment explaining why we're using the name instead of the attribute kind. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@196420 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/Attr.td b/include/clang/Basic/Attr.td index ff4050d462..3f42c2e154 100644 --- a/include/clang/Basic/Attr.td +++ b/include/clang/Basic/Attr.td @@ -515,9 +515,13 @@ def MSABI : InheritableAttr { } def MSP430Interrupt : InheritableAttr, TargetSpecificAttr { + // FIXME: this attribute is spelled the same as the ARMInterrupt attribute, + // but two attributes cannot currently share the same name because of the + // getAttrKind function. However, in this case, the attributes are for + // different targets, so sharing the same name but different arguments is a + // reasonable design. For now, this attribute will remain having no spelling. let Spellings = []; let Args = [UnsignedArgument<"Number">]; - let SemaHandler = 0; } def Mips16 : InheritableAttr, TargetSpecificAttr { diff --git a/lib/Sema/TargetAttributesSema.cpp b/lib/Sema/TargetAttributesSema.cpp index 1469e1247f..034e460eeb 100644 --- a/lib/Sema/TargetAttributesSema.cpp +++ b/lib/Sema/TargetAttributesSema.cpp @@ -108,6 +108,8 @@ namespace { MSP430AttributesSema() { } bool ProcessDeclAttribute(Scope *scope, Decl *D, const AttributeList &Attr, Sema &S) const { + // Because this attribute has no spelling (see the FIXME in Attr.td as to + // why), we must check for the name instead of the attribute kind. if (Attr.getName()->getName() == "interrupt") { HandleMSP430InterruptAttr(D, Attr, S); return true;