[ms-abi] Always generate complete constructors in the Microsoft C++ ABI

Fixes PR18435, where we generated a base ctor instead of a complete
ctor, and so failed to construct virtual bases when constructing the
complete object.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199160 91177308-0d34-0410-b5e6-96231b3b80d8
[ms-abi] Report VBPtrOffset correctly

Although VBPtrs were being placed correctly by the ms-abi layout engine, 
their offsets were being improperly reported to the ASTRecordLayout 
builder due to a bug.  This patch fixes that and fixes the test cases to 
use the correct values.
y


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199168 91177308-0d34-0410-b5e6-96231b3b80d8
Consumed analysis: add two new attributes which fine-tune the behavior of
consumable objects.  These are useful for implementing error codes that
must be checked.  Patch also includes some significant refactoring, which was
necesary to implement the new behavior.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199169 91177308-0d34-0410-b5e6-96231b3b80d8
[ms-abi] Remove duplicated vbptr offset code

Record layout will tell us the offset of a shared vbptr inside a
non-virtual base.

No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199171 91177308-0d34-0410-b5e6-96231b3b80d8
[ms-abi] Small Change to pack+alignment interaction.

This patch makes a small behavioral change to the interaction between 
pack and alignment.  Specifically it makes __declspec(align()) on a 
field change that field's alignment without respect to pack but the 
alignment change to the record alignment as a whole still obeys pack.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199172 91177308-0d34-0410-b5e6-96231b3b80d8
Removing some attribute magic related to the OpenCL keyword attributes. Instead of mapping them to their semantics as a custom part of the parser, they instead map declaratively through the rest of the attribute system.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199175 91177308-0d34-0410-b5e6-96231b3b80d8
Remove a temporary workaround that is no longer relevant.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199176 91177308-0d34-0410-b5e6-96231b3b80d8
Update feature name "Generalized Attributes" to match the heading in the paper.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199177 91177308-0d34-0410-b5e6-96231b3b80d8
Puny 24-byte structs are returned by value on SPARC.

Pad these structs up so they are sret-returned even on that
architecture.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199188 91177308-0d34-0410-b5e6-96231b3b80d8
This test is passing on SPARC.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199189 91177308-0d34-0410-b5e6-96231b3b80d8
Sema: Predefine size_t in MSVC Compatibility mode

MSVC defines size_t without any explicit declarations.  This change
allows us to be compatible with TUs that depend on this declaration
appearing from nowhere.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199190 91177308-0d34-0410-b5e6-96231b3b80d8
Switch to ssize_t from size_t to unbreak windows builders.

Builders that have -fms-compatibility on by default define size_t implicitly.
Tests that provide conflicting definitions would cause unintended failures.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199195 91177308-0d34-0410-b5e6-96231b3b80d8
Disable this test for windows builders

This test provides definitions of size_t which are at odds with
-fms-compatibility.  Disable this test on those builders (for now).


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199196 91177308-0d34-0410-b5e6-96231b3b80d8
clang-format: Fix bug introduced in r198871.

We cannot simply change the start column to accomodate for the @ in an
ObjC string literal as that will make clang-format happily violate the
column limit.

Use a different workaround instead. However, a better long-term
solution might be to join the @ and the rest of the literal into a
single token.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199198 91177308-0d34-0410-b5e6-96231b3b80d8
Remove trailing spaces

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199199 91177308-0d34-0410-b5e6-96231b3b80d8
clang/test/Index/recursive-cxx-member-calls.cpp: Add "-target" rather than XFAILing.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199201 91177308-0d34-0410-b5e6-96231b3b80d8
[OpenCL] Disallow casts between address spaces.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199208 91177308-0d34-0410-b5e6-96231b3b80d8
Rename language option MicrosoftMode to MSVCCompat

There's been long-standing confusion over the role of these two options. This
commit makes the necessary changes to differentiate them clearly, following up
from r198936.

MicrosoftExt (aka. fms-extensions):
 Enable largely unobjectionable Microsoft language extensions to ease
 portability. This mode, also supported by gcc, is used for building software
 like FreeBSD and Linux kernel extensions that share code with Windows drivers.

MSVCCompat (aka. -fms-compatibility, formerly MicrosoftMode):
 Turn on a special mode supporting 'heinous' extensions for drop-in
 compatibility with the Microsoft Visual C++ product. Standards-compilant C and
 C++ code isn't guaranteed to work in this mode. Implies MicrosoftExt.

Note that full -fms-compatibility mode is currently enabled by default on the
Windows target, which may need tuning to serve as a reasonable default.

See cfe-commits for the full discourse, thread 'r198497 - Move MS predefined
type_info out of InitializePredefinedMacros'

No change in behaviour.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199209 91177308-0d34-0410-b5e6-96231b3b80d8
Switch around the order of MSVCCompat and MicrosoftExt

Full language modes usually get listed before minor language extensions in
LangOpts, so that subsequent sub-modes can predicate on the major modes.

This also lends to a cleanup in CompilerInvocation to better indicate to the
reader that MSVCCompat is a superset of MicrosoftExt.

Cleanup only.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199210 91177308-0d34-0410-b5e6-96231b3b80d8
Clarify the LibTooling.rst a bit

The ClangCheck tool has changed and no longer is exactly equivalent to the
code pasted in the doc.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199215 91177308-0d34-0410-b5e6-96231b3b80d8