Commit Graph

67 Commits

Author SHA1 Message Date
David Majnemer 6ac7dd19f7 [Parse] Let declarations follow labels in -fms-extensions mode
MSVC permits declarations in these places as conforming extension (it is
a constraint violation otherwise).

This fixes PR28782.

llvm-svn: 277352
2016-08-01 16:39:29 +00:00
Andy Gibbs 6f8cfccbd3 Diagnose missing macro argument following charize operator.
For completeness, add a test-case for the equivalent stringize operator
diagnostic too.

llvm-svn: 265177
2016-04-01 19:02:20 +00:00
David Majnemer 1bf0f8ede6 [MS Compat] Add support for __declspec(noalias)
The attribute '__declspec(noalias)' communicates that the function only
accesses memory pointed to by its pointer-typed arguments.

llvm-svn: 242728
2015-07-20 22:51:52 +00:00
David Majnemer e4752e753f Revert "parser: wordsmith diagnostic message" and "parser: diagnose empty attribute blocks"
This reverts commit r239846 and r239879.  They caused clang's
-fms-extensions behavior to incorrectly parse lambdas and includes a
testcase to ensure we don't regress again.

This issue was found in PR24027.

llvm-svn: 241668
2015-07-08 05:55:00 +00:00
Saleem Abdulrasool 3fa7fa0771 parser: wordsmith diagnostic message
Address post-commit commit about the wording of the warning.

llvm-svn: 239879
2015-06-17 03:54:21 +00:00
Saleem Abdulrasool f7ffec3b5f parser: diagnose empty attribute blocks
MS attributes do not permit empty attribute blocks.  Correctly diagnose those.
We continue to parse to ensure that we recover correctly.  Because the block is
empty, we do not need to skip any tokens.

Bonus: tweak the comment that I updated but forgot to remove the function name
in a previous commit.

llvm-svn: 239846
2015-06-16 20:03:47 +00:00
Saleem Abdulrasool 425efcf6ea parser: improve diagnostics for MS attributes
Switch to using BalancedDelimiterTracker to get better diagnostics for
unbalanced delimiters.  This still does not handle any of the attributes, simply
improves the parsing.

llvm-svn: 239758
2015-06-15 20:57:04 +00:00
David Majnemer 936b411bc8 [MS ABI] Correctly associate align attrs before the class-key
__declspec(align(...)) is unlike all other attributes in that it is not
applied to a variable if it appears before the class-key.  If the
tag in question isn't part of a variable declaration, it is not ignored.

Instead, the alignment attribute is applied to the tag.

This fixes PR18024.

llvm-svn: 235272
2015-04-19 07:53:29 +00:00
David Majnemer 631a90b6bc Sema: Add support for __declspec(restrict)
__declspec(restrict) and __attribute(malloc) are both handled
identically by clang: they are allowed to the noalias LLVM attribute.

Seeing as how noalias models the C99 notion of 'restrict', rename the
internal clang attribute to Restrict from Malloc.

llvm-svn: 228120
2015-02-04 07:23:21 +00:00
Nico Rieck eaaae27bc5 Parse qualifiers after comma in declarator lists as a Microsoft extension
MSVC parses and ignores these with a warning.

llvm-svn: 223413
2014-12-04 23:31:08 +00:00
Aaron Ballman 1c8a5d75f1 The MicrosoftExtensions.c test file should not rely on -x objective-c++. Removed that from the RUN line, fixed obvious C++isms in the code, and moved some C++ tests into MicrosoftExtensions.cpp instead. As a drive-by, changed the line endings for MicrosoftExtensions.c to be LF instead of CRLF.
llvm-svn: 212417
2014-07-06 20:04:10 +00:00
Ehsan Akhgari 7e36a19b20 Move InterlockedBitTestAndSet into its own test file
Summary:
This gives us back the test coverage we lost when I made
MicrosoftExtensions.c x86-only.

Reviewers: majnemer

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D4401

llvm-svn: 212414
2014-07-06 18:45:44 +00:00
Ehsan Akhgari d2c3ba6fbe Fix the MicrosoftExtensions.c target
llvm-svn: 212393
2014-07-06 05:58:55 +00:00
Ehsan Akhgari d1e8abb1fb Enable the InterlockedBitTestAndSet test
llvm-svn: 212392
2014-07-06 05:50:19 +00:00
Aaron Ballman ef5d94caf0 Fixing a typo, updating the diagnostic wording and logic based on post-commit review feedback. Amends r206186.
llvm-svn: 206229
2014-04-15 00:36:39 +00:00
Aaron Ballman 95d570335c Properly diagnose Microsoft __declspec attributes which have optional argument lists when the arguments are elided. eg)
__declspec(deprecated()) // error
__declspec(deprecated) // OK
__declspec(deprecated("")) // OK

llvm-svn: 206191
2014-04-14 16:44:26 +00:00
Aaron Ballman fdd783a501 Unify __declspec attribute argument parsing with the common attribute argument parsing code.
This removes a diagnostic that is no longer required (the semantic engine now properly handles attribute syntax so __declspec and __attribute__ spellings no longer get mismatched). This caused several testcases to need updating for a slightly different wording.

llvm-svn: 205234
2014-03-31 18:18:43 +00:00
Ted Kremenek b79ee57080 Implemented delayed processing of 'unavailable' checking, just like with 'deprecated'.
Fixes <rdar://problem/15584219> and <rdar://problem/12241361>.

This change looks large, but all it does is reuse and consolidate
the delayed diagnostic logic for deprecation warnings with unavailability
warnings.  By doing so, it showed various inconsistencies between the
diagnostics, which were close, but not consistent.  It also revealed
some missing "note:"'s in the deprecated diagnostics that were showing
up in the unavailable diagnostics, etc.

This change also changes the wording of the core deprecation diagnostics.
Instead of saying "function has been explicitly marked deprecated"
we now saw "'X' has been been explicitly marked deprecated".  It
turns out providing a bit more context is useful, and often we
got the actual term wrong or it was not very precise
 (e.g., "function" instead of "destructor").  By just saying the name
of the thing that is deprecated/deleted/unavailable we define
this issue away.  This diagnostic can likely be further wordsmithed
to be shorter.

llvm-svn: 197627
2013-12-18 23:30:06 +00:00
Serge Pavlov 750db65bac Warn on duplicate function specifier
This patch fixes PR8264. Duplicate qualifiers already are diagnozed,
now the same diagnostics is issued for duplicate function specifiers.

Differential Revision: http://llvm-reviews.chandlerc.com/D2025

llvm-svn: 194559
2013-11-13 06:57:53 +00:00
Reid Kleckner 3dd88b9140 Revert "Re-enable passing MS inline asm test."
Microsoft inline asm crashes on the hexagon bot for unknown reasons.

This reverts commit r193124.

llvm-svn: 193128
2013-10-21 22:56:09 +00:00
Reid Kleckner c53738a025 Re-enable passing MS inline asm test.
llvm-svn: 193124
2013-10-21 22:30:53 +00:00
Aaron Ballman 317a77f1c7 Adding in parsing and the start of semantic support for __sptr and __uptr pointer type qualifiers. This patch also fixes the correlated __ptr32 and __ptr64 pointer qualifiers so that they are truly type attributes instead of declaration attributes.
For more information about __sptr and __uptr, see MSDN: http://msdn.microsoft.com/en-us/library/aa983399.aspx

Patch reviewed by Richard Smith.

llvm-svn: 182535
2013-05-22 23:25:32 +00:00
Aaron Ballman 444eb6e23c Properly parsing __declspec(safebuffers), though there is no semantic hookup. For more information about safebuffers, see MSDN: http://msdn.microsoft.com/en-us/library/dd778695(v=vs.110).aspx
llvm-svn: 181123
2013-05-04 16:58:37 +00:00
Richard Smith 810ad3eb44 Downgrade 'attribute ignored when parsing type' from error to warning, to match
the diagnostic's warn_ name. Switch some places (notably C++11 attributes)
which really wanted an error over to a different diagnostic. Finally, suppress
the diagnostic entirely for __ptr32, __ptr64 and __w64, to avoid producing
diagnostics in important system headers.

llvm-svn: 173788
2013-01-29 10:02:16 +00:00
Chad Rosier 879edcd1a4 Fail these tests in a way that doesn't cause unexpected successes, per Daniel's
suggestion.

llvm-svn: 173367
2013-01-24 20:46:39 +00:00
Chad Rosier 33a6e11c21 [ms-inline asm] Remove a warning about ms-style inline assembly not being
supported.

llvm-svn: 173177
2013-01-22 18:18:22 +00:00
Chad Rosier 636386753a [driver, ms-inline asm] Have -fms-extensions enable the AsmBlocks language
option.  MS-style inline asm can now be enabled by either -fasm-blocks or
-fms-extensions.
rdar://12808010

llvm-svn: 169445
2012-12-05 23:08:09 +00:00
Chad Rosier c8e56e8931 [driver, ms-inline asm] MS-Style inline assembly is controlled by the
-fasm-blocks flag, not the -fms-extensions flag.
rdar://12808010

llvm-svn: 169422
2012-12-05 21:08:21 +00:00
Joao Matos 566359c0bf Revert r163083 per chandlerc's request.
llvm-svn: 163149
2012-09-04 17:49:35 +00:00
Joao Matos c32a7e4d8e Implemented parsing and AST support for the MS __leave exception statement. Also a minor fix to __except printing in StmtPrinter.cpp. Thanks to Aaron Ballman for review.
llvm-svn: 163083
2012-09-02 03:45:41 +00:00
Eli Friedman 971bfa11c6 Unify the codepaths for emitting deprecation warnings. The test changes are just to account for us emitting notes more consistently.
llvm-svn: 161528
2012-08-08 21:52:41 +00:00
Chad Rosier 43b7c021b3 [ms-style asm] Change the fatal error to an extension warning. Apparently, this
error was asserting on anything that included Windows.h.  MS-style inline asm is
still dropped, but at least now we're not completely silent about it.

llvm-svn: 158833
2012-06-20 18:28:37 +00:00
Aaron Ballman 478faed4b0 Reapplying the changes from r158717 as they were rolled back to avoid merge conflicts from a separate problematic patch.
llvm-svn: 158750
2012-06-19 22:09:27 +00:00
Jakob Stoklund Olesen e1c0ae6fda Revert r158700 and dependent patches r158716, r158717, and r158731.
The original r158700 caused crashes in the gcc test suite,
g++.abi/vtable3a.C among others. It also caused failures in the libc++
test suite.

llvm-svn: 158749
2012-06-19 21:48:43 +00:00
Aaron Ballman 38c9ad9e72 Improves parsing and semantic analysis for MS __declspec attributes. This includes support for the align (which fixes PR12631).
llvm-svn: 158717
2012-06-19 13:49:26 +00:00
John McCall 8d32c05ed4 Recognize the MS inheritance attributes and turn them into attributes
on the RecordDecl.  Persist the MS portability type attributes and
ignore them in Sema rather than the parser.

Patch by João Matos!

llvm-svn: 157288
2012-05-22 21:28:12 +00:00
Douglas Gregor 6cda0715c3 Add _alignof and __builtin_alignof as aliases for __alignof in
Microsoft mode, from Will Wilson!

llvm-svn: 156940
2012-05-16 20:04:05 +00:00
Aaron Ballman c42d838d9f Adding some more specific tests for enum declspec parsing, to prove that it really works.
llvm-svn: 152757
2012-03-15 00:20:05 +00:00
Aaron Ballman 9ecff02a45 Added support for parsing declspecs on enumerations. Fixes PR8783
llvm-svn: 151798
2012-03-01 04:09:28 +00:00
John McCall 42856de542 Hey, maybe we shouldn't silently ignore decl attributes
on declarators written as types.

llvm-svn: 140931
2011-10-01 05:17:03 +00:00
Francois Pichet f2fb411d4a Add support for Microsoft __ptr32 keyword.
Patch by Chris Cudmore!

llvm-svn: 138533
2011-08-25 00:36:46 +00:00
Francois Pichet 4ad2a27065 Change __debugbreak signature to void __debugbreak(void); MSVC compatibility.
llvm-svn: 134869
2011-07-10 14:15:07 +00:00
Chandler Carruth bc0f9aeac3 Remove some more hard CR-LF lines. These were particularly weird as they were
only a few lines of the file. Also set their properties to have explicitly
native eol sytle.

llvm-svn: 130124
2011-04-25 07:09:43 +00:00
Francois Pichet 9dddd40a1c Emit an error if operator __uuidof() is called on a type with no associated GUID.
llvm-svn: 122226
2010-12-20 03:51:03 +00:00
Francois Pichet 7da1166da0 Validate Microsoft's uuid attribute string.
llvm-svn: 122220
2010-12-20 01:41:49 +00:00
Francois Pichet 4f64c5aa70 Microsoft's __uuidof operator returns a lvalue.
llvm-svn: 122021
2010-12-17 02:00:06 +00:00
Francois Pichet c2bc5ac149 Add parsing support for Microsoft attributes. MS attributes will just be skipped and not inserted into the AST for now.
llvm-svn: 116203
2010-10-11 12:59:39 +00:00
Francois Pichet d61f192b1a Add 2 Microsoft compiler intrinsics that don't require prototypes:
__assume
__noop

llvm-svn: 116202
2010-10-11 12:00:10 +00:00
Francois Pichet f804a97d4f _inline is an alias for inline in MSVC.
llvm-svn: 115785
2010-10-06 13:02:48 +00:00
Chris Lattner d7821e4ec4 enhance tentative parsing to handle ms extensions, patch by Martin Vejnar!
llvm-svn: 115004
2010-09-28 23:35:09 +00:00