hanchenye-llvm-project/clang/test/Parser
Michael Kruse dc5ce72afa Append new attributes to the end of an AttributeList.
Recommit of r335084 after revert in r335516.

... 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 order, and therefore printed in the wrong order in
-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 effect, especially on
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 attributes' order was changed instead.

This unfortunately causes some 'previous occurrence here' hints to be
textually after the main marker. This typically happens when attributes
are merged, but are incompatible to each other. 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 reverse. 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.

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

llvm-svn: 338800
2018-08-03 01:21:16 +00:00
..
CompoundStmtScope.c
DelayedTemplateParsing.cpp
MicrosoftExtensions.c
MicrosoftExtensions.cpp [MS] Accept __unaligned as a qualifier on member function pointers 2018-03-07 23:26:02 +00:00
MicrosoftExtensionsInlineAsm.c
PR11000.cpp
PR21872.cpp
access-spec-attrs.cpp
altivec-csk-bool.c
altivec.c
annotation-token-in-lexed-body.cpp
argument_qualified.c
argument_redef.c
argument_scope.c
arm-windows-calling-convention-handling.c
asm-constraints-pr7869.c
asm.c
asm.cpp
atomic.c
attr-availability.c
attr-external-source-symbol-cxx11.cpp
attr-external-source-symbol.m
attributes.c
attributes.mm
backtrack-crash.cpp
backtrack-off-by-one.cpp
bad-control.c
block-block-storageclass.c
block-pointer-decl.c
bracket-crash.cpp
brackets.c Fix typos in clang 2018-04-06 15:14:32 +00:00
brackets.cpp Fix typos in clang 2018-04-06 15:14:32 +00:00
builtin_classify_type.c
builtin_types_compatible.c Make __builtin_types_compatible_p more like GCC's 2017-10-16 22:58:37 +00:00
c-namespace.c
c1x-alignas.c
c1x-generic-selection.c
c2x-attributes.c Add a fixit for attributes incorrectly placed prior to 'struct/class/enum' keyword. 2017-12-25 22:23:20 +00:00
c2x-attributes.m Add -f[no-]double-square-bracket-attributes as new driver options to control use of [[]] attributes in all language modes. This is the initial implementation of WG14 N2165, which is a proposal to add [[]] attributes to C2x, but also allows you to enable these attributes in C++98, or disable them in C++11 or later. 2017-10-15 15:01:42 +00:00
c11-noreturn.c
captured-statements.c
char-literal-printing.c
check-objc2-syntax-1.m
check-syntax-1.m
check_cast.c
colon-colon-parentheses.cpp
completely-empty-header-file.h
compound_literal.c
control-scope.c
crash-report.c
cuda-force-host-device-templates.cu
cuda-force-host-device.cu
cuda-kernel-call-c++11.cu
cuda-kernel-call.cu
cxx-altivec.cpp
cxx-ambig-decl-expr-xfail.cpp
cxx-ambig-decl-expr.cpp Add missing direct-init / parameter-declaration-clause disambiguation when 2018-02-02 22:24:54 +00:00
cxx-ambig-init-templ.cpp
cxx-ambig-paren-expr-asan.cpp
cxx-ambig-paren-expr.cpp
cxx-attributes.cpp
cxx-bool.cpp
cxx-casting.cpp
cxx-class-template-specialization.cpp
cxx-class.cpp
cxx-concept-declaration.cpp Revert rC330794 and some dependent tiny bug fixes 2018-04-26 00:42:40 +00:00
cxx-concepts-ambig-constraint-expr.cpp
cxx-concepts-requires-clause.cpp
cxx-condition.cpp
cxx-decl.cpp Parse A::template B as an identifier rather than as a template-id with no 2018-04-27 02:00:13 +00:00
cxx-default-args.cpp
cxx-default-delete.cpp
cxx-ext-delete-default.cpp
cxx-extern-c-array.cpp
cxx-extra-semi.cpp [Parser] (C++) Make -Wextra-semi slightly more useful 2018-03-14 19:31:34 +00:00
cxx-friend.cpp
cxx-in-c.c
cxx-invalid-for-range.cpp
cxx-invalid-function-decl.cpp
cxx-member-crash.cpp
cxx-member-init-missing-paren-crash.cpp
cxx-member-initializers.cpp
cxx-modules-interface.cppm
cxx-namespace-alias.cpp
cxx-reference.cpp
cxx-stmt.cpp
cxx-template-argument.cpp
cxx-template-decl.cpp
cxx-throw.cpp
cxx-typeid.cpp
cxx-typeof.cpp
cxx-undeclared-identifier.cpp
cxx-using-declaration.cpp
cxx-using-directive.cpp
cxx-variadic-func.cpp
cxx0x-ambig.cpp
cxx0x-attributes.cpp Add a fixit for attributes incorrectly placed prior to 'struct/class/enum' keyword. 2017-12-25 22:23:20 +00:00
cxx0x-condition.cpp
cxx0x-decl.cpp PR37189 Fix incorrect end source location and spelling for a split '>>' token. 2018-04-30 05:25:48 +00:00
cxx0x-for-range.cpp
cxx0x-in-cxx98.cpp
cxx0x-lambda-expressions.cpp
cxx0x-literal-operators.cpp
cxx0x-member-initializers.cpp
cxx0x-override-control-keywords.cpp
cxx0x-rvalue-reference.cpp
cxx1z-attributes.cpp
cxx1z-class-template-argument-deduction.cpp [C++17] Fix class template argument deduction for default constructors without an initializer 2018-03-24 04:32:11 +00:00
cxx1z-constexpr-lambdas.cpp
cxx1z-coroutines.cpp
cxx1z-decomposition.cpp Allow conditions to be decomposed with structured bindings 2017-12-07 07:03:15 +00:00
cxx1z-fold-expressions.cpp Parse a possible trailing postfix expression suffix after a fold expression 2018-07-27 21:55:12 +00:00
cxx1z-init-statement.cpp
cxx1z-nested-namespace-definition.cpp Switch to gnu++14 as the default dialect. 2017-12-09 12:09:54 +00:00
cxx1z-using-declaration.cpp
cxx2a-bitfield-init.cpp
cxx2a-spaceship.cpp [c++20] P0515R3: Parsing support and basic AST construction for operator <=>. 2017-12-14 15:16:18 +00:00
cxx11-base-spec-attributes.cpp
cxx11-brace-initializers.cpp Improve diagonstic for braced-init-list as operand to ?: expression. 2018-05-24 22:02:52 +00:00
cxx11-stmt-attributes.cpp
cxx11-templates.cpp
cxx11-type-specifier.cpp
cxx11-user-defined-literals.cpp
debugger-import-module.m
declarators.c
declspec-recovery.c
declspec-supported.c
decomposed-condition.cpp Fix codegen for structured binding binding in conditions 2018-03-17 21:01:27 +00:00
designator.c
diag-crash.c
editor-placeholder-recovery.cpp A '<' with a trigraph '#' is not a valid editor placeholder 2017-10-11 00:41:20 +00:00
empty-translation-unit.c
encode.m
enhanced-proto-1.m
eof.cpp
eof2.cpp
expressions.c
expressions.m
extension.c
extra-semi.cpp
for.cpp
function-decls.c
gcc-__final-compatibility.cpp
gcc-for-loop-init-compatibility.c [Parse] Make -Wgcc-compat complain about for loop inits in C89 2018-06-28 21:36:00 +00:00
goto.c
if-scope-c90.c
if-scope-c99.c
implicit-casts.c
knr_parameter_attributes.c
lambda-attr.cu
method-def-in-class.m
method-prototype-1.m
missing-closing-rbrace.m
missing-end-2.m
missing-end-3.m
missing-end-4.m
missing-end.m
missing-selector-name.mm
ms-anachronism.c
ms-if-exists.c
ms-if-exists.cpp
ms-inline-asm-nested-braces.c
ms-inline-asm.c
ms-seh.c
ms-square-bracket-attributes.mm Determine the attribute subject for diagnostics based on declarative information in DeclNodes.td. This greatly reduces the number of enumerated values used for more complex diagnostics; these are now only required when the "attribute only applies to" diagnostic needs to be generated manually as part of semantic processing. 2017-11-26 20:01:12 +00:00
namelookup-bug-1.c
namelookup-bug-2.c
namespace-alias-attr.cpp
namespaces.cpp
no-gnu-inline-asm.c
nullability.c
objc-alias-printing.m
objc-at-directive-fixit.m
objc-at-implementation-eof-crash.m
objc-at-interface-eof-crash.m
objc-attr.m Allow the NS, CF, and ObjC attributes to be used with -fdouble-square-bracket-attributes. The syntactic locations for such attributes on ObjC constructs have been specifically chosen to follow the GNU attribute syntactic locations. 2018-02-12 13:38:25 +00:00
objc-available.m
objc-boxing.m
objc-category-neg-1.m
objc-class-property.m
objc-cxx-keyword-identifiers.mm
objc-default-ctor-init.mm Re-commit r321223, which adds a printing policy to the ASTDumper. 2017-12-21 21:42:42 +00:00
objc-diag-width.mm
objc-error-qualified-implementation.m
objc-forcollection-1.m
objc-forcollection-neg-2.m
objc-forcollection-neg.m
objc-foreach-syntax.m
objc-init.m
objc-interfaces.m
objc-messaging-1.m
objc-messaging-neg-1.m
objc-missing-impl.m
objc-property-syntax.m
objc-quirks.m
objc-recover.mm
objc-synthesized-recover.m
objc-try-catch-1.m Reapply "[Parse] Use CapturedStmt for @finally on MSVC" 2018-06-08 00:30:00 +00:00
objc-type-printing.m
objcbridge-related-attribute.m
objcxx-at.mm
objcxx-lambda-expressions-neg.mm
objcxx0x-lambda-expressions.mm
objcxx11-attributes.mm
objcxx11-initialized-temps.mm
objcxx11-invalid-lambda.cpp [Parser] Fix TryParseLambdaIntroducer() error handling 2017-11-06 17:42:17 +00:00
objcxx11-messaging-and-lambda.mm
objcxx11-protocol-in-template.mm
objcxx11-user-defined-literal.mm
objcxx14-protocol-in-template.mm
offsetof.c
opencl-astype.cl
opencl-atomics-cl20.cl
opencl-cl20.cl [OpenCL] Restrict various keywords in OpenCL C++ mode 2018-05-09 13:16:17 +00:00
opencl-cxx-keywords.cl [OpenCL] Restrict various keywords in OpenCL C++ mode 2018-05-09 13:16:17 +00:00
opencl-cxx-virtual.cl [OpenCL] Reject virtual functions for OpenCL C++ 2018-04-23 11:23:47 +00:00
opencl-image-access.cl
opencl-kernel.cl
opencl-keywords.cl
opencl-pragma.cl
opencl-storage-class.cl [OpenCL] Restrict various keywords in OpenCL C++ mode 2018-05-09 13:16:17 +00:00
opencl-unroll-hint.cl
parenthesis-balance.cpp
parmvardecl_conversion.c
parser_overflow.c
placeholder-recovery.m
pointer-arithmetic.c
pointer_promotion.c Factor out comparison handling for arithmetic types. 2018-01-08 21:12:04 +00:00
pragma-attribute-declspec.cpp
pragma-attribute.cpp
pragma-fp-contract.c
pragma-fp.cpp
pragma-loop-safety.cpp Append new attributes to the end of an AttributeList. 2018-08-03 01:21:16 +00:00
pragma-loop.cpp Append new attributes to the end of an AttributeList. 2018-08-03 01:21:16 +00:00
pragma-optimize-diagnostics.cpp
pragma-options.c
pragma-options.cpp
pragma-pack.c
pragma-unroll-and-jam.cpp Append new attributes to the end of an AttributeList. 2018-08-03 01:21:16 +00:00
pragma-unroll.cpp Append new attributes to the end of an AttributeList. 2018-08-03 01:21:16 +00:00
pragma-visibility.c
pragma-visibility2.c
pragma-weak.c
promote_types_in_proto.c
recovery.c
recovery.cpp
recovery.m
recursion-limits.cpp
selector-1.m
skip-function-bodies.h [libclang] Allow skipping function bodies in preamble only 2018-05-17 09:24:37 +00:00
skip-function-bodies.mm [libclang] Allow skipping function bodies in preamble only 2018-05-17 09:24:37 +00:00
statements.c
struct-recursion.c
switch-recovery.cpp Refactor checking of switch conditions and case values. 2018-07-26 18:41:30 +00:00
top-level-semi-cxx0x.cpp
traditional_arg_scope.c
typeof.c
types.c
vector-cast-define.cl
vsx.c
warn-cuda-compat.cu
warn-dangling-else.cpp
warn-semicolon-before-method-body.m
x64-windows-calling-convention-handling.c