]> granicus.if.org Git - clang/commit
Generalise support for non-inheritable attributes
authorPeter Collingbourne <peter@pcc.me.uk>
Fri, 21 Jan 2011 02:08:36 +0000 (02:08 +0000)
committerPeter Collingbourne <peter@pcc.me.uk>
Fri, 21 Jan 2011 02:08:36 +0000 (02:08 +0000)
commita97d70b7ea9633e8cbf976510d7a9ea66f4ac96c
tree222867072bc5b62454075029a4b69ad3bacf0c4b
parent00d66cce52cf027eac77591a9847f87dacf36995
Generalise support for non-inheritable attributes

Inheritable attributes on declarations may be inherited by any later
redeclaration at merge time.  By contrast, a non-inheritable attribute
will not be inherited by later redeclarations.  Non-inheritable
attributes may be semantically analysed early, allowing them to
influence the redeclaration/overloading process.

Before this change, the "overloadable" attribute received special
handling to be treated as non-inheritable, while all other attributes
were treated as inheritable.  This patch generalises the concept,
while removing a FIXME.  Some CUDA location attributes are also marked
as non-inheritable in order to support special overloading semantics
(to be introduced in a later patch).

The patch introduces a new Attr subclass, InheritableAttr, from
which all inheritable attributes derive.  Non-inheritable attributes
simply derive from Attr.

N.B. I did not review every attribute to determine whether it should
be marked non-inheritable.  This can be done later on an incremental
basis, as this change does not affect default functionality.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123959 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/AST/Attr.h
include/clang/Basic/Attr.td
include/clang/Basic/AttrKinds.h
lib/Sema/SemaDecl.cpp
lib/Serialization/ASTReaderDecl.cpp
lib/Serialization/ASTWriter.cpp