Alp Toker [Tue, 3 Dec 2013 06:13:01 +0000 (06:13 +0000)]
Emit an extension warning when changing system header tokens
clang converts keywords to identifiers for compatibility with various system
headers such as GNU libc.
Implement a -Wkeyword-compat extension warning to diagnose those cases. The
warning is on by default but will generally be ignored in system headers. It
can however be enabled globally to aid standards conformance testing.
This also changes the __uptr keyword avoidance from r195710 to no longer
special-case system headers, bringing it in line with other similar workarounds
in clang.
Implementation returns bool for symmetry with token annotation functions.
Some examples:
warning: keyword '__is_pod' will be treated as an identifier for the remainder of the translation unit [-Wkeyword-compat]
struct __is_pod
warning: keyword '__uptr' will be treated as an identifier here [-Wkeyword-compat]
union w *__uptr;
Hao Liu [Tue, 3 Dec 2013 05:58:49 +0000 (05:58 +0000)]
AArch64: add missing ACLE intrinsics mapping to general arithmetic operation from VFP instructions.
E.g. float64x1_t vadd_f64(float64x1_t a, float64x1_t b) -> FADD Dd, Dn, Dm.
Hao Liu [Tue, 3 Dec 2013 05:35:17 +0000 (05:35 +0000)]
revert r196152.
This is a duplicate implementation.
E.g. this patch defines:
float64_t vabd_f64(float64_t a, float64_t b)
But there is already a similar intrinsic "vabdd_f64" with the same types.
Also, this intrinsic will be conflicted to the vector type intrinsic as following(Which is implemented by me and will be committed to trunk):
float64x1_t vabd_f64(float64x1_t a, float64x1_t b).
Two functions shouldn't have a same name in arm_neon.h.
According to ARM ACLE document, such vabd_f64 with float64_t is not existing.
So I revert this commit.
Dmitri Gribenko [Tue, 3 Dec 2013 00:48:09 +0000 (00:48 +0000)]
MS inline asm: When LLVM called back to Clang to parse a name and do name
lookup, if parsing failed, we did not restore the lexer state properly, and
eventually crashed. This change ensures that we always consume all the tokens
from the new token stream we started to parse the name from inline asm.
Aaron Ballman [Mon, 2 Dec 2013 22:38:33 +0000 (22:38 +0000)]
Refactored the work group-related attributes to use a template, which reduces the amount of duplicate code in the handler. No functional change intended.
Aaron Ballman [Mon, 2 Dec 2013 21:09:08 +0000 (21:09 +0000)]
The CUDA device attribute doesn't need custom logic to check the number of attribute arguments (the common attribute handler already does this). Switching to use the simple attribute handler. No functional change intended.
Aaron Ballman [Mon, 2 Dec 2013 18:05:46 +0000 (18:05 +0000)]
Factored attribute mutual exclusion code into a helper function; split the cf_audited_transfer and cf_unknown_transfer attributes into separate helper methods for simplicity. No functional changes intended.
Hans Wennborg [Mon, 2 Dec 2013 17:31:52 +0000 (17:31 +0000)]
clang-format vs plugin: bake clang-format.exe into the vsix
This makes the clang-format plugin self-contained. Instead of
requiring clang-format.exe to be available on the PATH, this
includes it in the plugin's installer (.vsix file) and runs it
from the install directory.
Aaron Ballman [Mon, 2 Dec 2013 17:07:07 +0000 (17:07 +0000)]
Re-enabled support for the Subjects for the weak attribute. This changes the diagnostic involved to be more accurate -- for C++ code, it will now report that weak applies to variables, functions or classes. Added additional test case for this.
Aaron Ballman [Mon, 2 Dec 2013 16:17:55 +0000 (16:17 +0000)]
The __w64 attribute handler was more generically named, but only applied to __w64 specifically. Renamed and removed some unused code. No functional change intended.
add an additional test case for generic attributes
gcc treats [[gnu:const]], [[gnu::__const]], and [[gnu:__const__]] as all being
equivalent. Add an additional test case to ensure that we do not miss the last
case.
Daniel Jasper [Thu, 28 Nov 2013 15:58:55 +0000 (15:58 +0000)]
clang-format: Improve selective formatting of nested statements.
Previously, clang-format could create quite corrupt formattings if
individual lines of nested blocks (e.g. in "DEBUG({})" or lambdas) were
used. With this patch, it tries to extend the formatted regions to leave
around some reasonable format without always formatting the entire
surrounding statement.
David Majnemer [Wed, 27 Nov 2013 22:57:44 +0000 (22:57 +0000)]
Sema: Instantiation of variable definitions weren't local enough
We wouldn't properly save and restore the pending local instantiations
we had built up prior to instantiation of a variable definition. This
would lead to us instantiating too much causing crashes and other
general badness.
Aaron Ballman [Wed, 27 Nov 2013 19:16:55 +0000 (19:16 +0000)]
Automated checking for C++ when determining what argument to send to the diagnostic for attribute subjects. In turn, this allows the Subjects to be enabled for some more attributes and improves diagnostics. Updated a test case based on the improved diagnostic.
Aaron Ballman [Wed, 27 Nov 2013 18:53:58 +0000 (18:53 +0000)]
Adding the Subjects entry back for the noreturn attributes. This caused some test cases to be updated because the original diagnostic was about applying to methods as well as functions, but the semantic checking disallowed methods.
Aaron Ballman [Wed, 27 Nov 2013 16:59:17 +0000 (16:59 +0000)]
Enabling the subject list for the warn_unused attribute, and adding a test case. Previously, would issue a "warning ignored" diagnostic instead of the more specific "only applies to."
Aaron Ballman [Wed, 27 Nov 2013 15:24:06 +0000 (15:24 +0000)]
Refactored semantic handlers that would unilaterally apply the attribute to a Decl so they all go through a common interface. No functional change intended.
Aaron Ballman [Wed, 27 Nov 2013 13:56:12 +0000 (13:56 +0000)]
Removing the description part of a subset subject. It is unused, and wouldn't be future-proof regarding translation issues. It is also covered by SubjectList's CustomDiag member.
Aaron Ballman [Wed, 27 Nov 2013 13:27:02 +0000 (13:27 +0000)]
Laying the basic groundwork for table generating the diagnostics for attribute subjects. This makes some modifications to the way subjects are listed in Attr.td, and updates the attr emitter to handle the new constructs.
I have disabled some attribute subject lines on purpose in Attr.td;
this part is a WIP with the goal being to restore those subjects
incrementally. By commenting them out, it leaves the original behavior
the same as before for those attributes and so those are not
functionality changes.
[Sema] Don't look for the instantiation of a local extern decl in a different
dependent context that the one we are instantiating, otherwise there will be an assertion.
David Majnemer [Wed, 27 Nov 2013 08:20:38 +0000 (08:20 +0000)]
Sema: Instantiate local class and their members appropriately
We would fail to instantiate them when the surrounding function was
instantiated. Instantiate the class and add it's members to the list of
pending instantiations, they should be resolved when we are finished
with the function's body.
Richard Smith [Wed, 27 Nov 2013 03:39:20 +0000 (03:39 +0000)]
Unify lookup from within not-yet-defined defaulted special members: use common
code for handling triviality, deletedness and constexpr. Fix a few bugs in
these, particularly related to mutable members, and remove some dead code.
Richard Smith [Wed, 27 Nov 2013 01:46:48 +0000 (01:46 +0000)]
Remove 'DistinctSpellings' support from Attr.td and change its only user to
look at the attribute spelling instead. The 'ownership_*' attributes should
probably be split into separate *Attr classes, but that's more than I wanted to
do here.