Append new attributes to the end of an AttributeList.
authorMichael Kruse <llvm@meinersbur.de>
Tue, 19 Jun 2018 23:46:52 +0000 (23:46 +0000)
committerMichael Kruse <llvm@meinersbur.de>
Tue, 19 Jun 2018 23:46:52 +0000 (23:46 +0000)
commitea31f0e4b883c502d094a3e334966753fa277a4e
treec63a4b9a7bac4d14f758e585b7768e76d543610a
parentf01827f2d1bdaff14cf1cf176e8a69e308d5371e
Append new attributes to the end of an AttributeList.

... instead of prepending it at the beginning (the original behavior
since implemented in r122535 2010-12-23). This builds up an
AttributeList in the the order in which the attributes appear in the
source.

The reverse order caused nodes for attributes in the AST (e.g. LoopHint)
to be in the reverse, and therefore printed in the wrong order by
-ast-dump. Some TODO comments mention this. The order was explicitly
reversed for enable_if attribute overload resolution and name mangling,
which is not necessary anymore with this patch.

The change unfortunately has some secondary effects, especially for
diagnostic output. In the simplest cases, the CHECK lines or expected
diagnostic were changed to the the new output. If the kind of
error/warning changed, the attribute's order was changed instead.

It also causes some 'previous occurrence here' hints to be textually
after the main marker. This typically happens when attributes are
merged, but are incompatible. Interchanging the role of the the main
and note SourceLocation will also cause the case where two different
declaration's attributes (in contrast to multiple attributes of the
same declaration) are merged to be reversed. There is no easy fix
because sometimes previous attributes are merged into a new
declaration's attribute list, sometimes new attributes are added to a
previous declaration's attribute list. Since 'previous occurrence here'
pointing to locations after the main marker is not rare, I left the
markers as-is; it is only relevant when the attributes are declared in
the same declaration anyway, which often is on the same line.

Differential Revision: https://reviews.llvm.org/D48100

llvm-svn: 335084
36 files changed:
clang/include/clang/Sema/AttributeList.h
clang/lib/AST/ItaniumMangle.cpp
clang/lib/Parse/ParseDecl.cpp
clang/lib/Sema/SemaOverload.cpp
clang/lib/Serialization/ASTReaderDecl.cpp
clang/test/Index/annotate-comments-availability-attrs.cpp
clang/test/Index/complete-with-annotations.cpp
clang/test/Misc/ast-print-pragmas.cpp
clang/test/PCH/pragma-loop.cpp
clang/test/Parser/pragma-loop-safety.cpp
clang/test/Parser/pragma-loop.cpp
clang/test/Parser/pragma-unroll.cpp
clang/test/Sema/attr-availability-tvos.c
clang/test/Sema/attr-availability.c
clang/test/Sema/attr-coldhot.c
clang/test/Sema/attr-disable-tail-calls.c
clang/test/Sema/attr-long-call.c
clang/test/Sema/attr-micromips.c
clang/test/Sema/attr-notail.c
clang/test/Sema/attr-ownership.c
clang/test/Sema/attr-ownership.cpp
clang/test/Sema/attr-print.c
clang/test/Sema/attr-swiftcall.c
clang/test/Sema/attr-target-mv.c
clang/test/Sema/attr-visibility.c
clang/test/Sema/internal_linkage.c
clang/test/Sema/mips-interrupt-attr.c
clang/test/Sema/ms_abi-sysv_abi.c
clang/test/Sema/nullability.c
clang/test/Sema/stdcall-fastcall.c
clang/test/SemaCXX/attr-print.cpp
clang/test/SemaCXX/attr-swiftcall.cpp
clang/test/SemaCXX/decl-microsoft-call-conv.cpp
clang/test/SemaCXX/ms-uuid.cpp
clang/test/SemaOpenCL/address-spaces.cl
clang/test/SemaTemplate/attributes.cpp