Dmitri Gribenko
d1c91f1763
Accept over-qualified constructor in MSVC emulation mode
...
MSVC accepts this:
class A {
A::A();
};
Clang accepts regular member functions with extra qualification as an MS
extension, but not constructors. This changes the parser to defer rejecting
qualified constructors so that the same Sema logic can apply to constructors as
regular member functions. This also improves the error message when MS
extensions are disabled (in my opinion). Before it was:
/Users/jason/Desktop/test.cpp:2:8: error: expected member name or ';' after declaration specifiers
A::A();
~~~~ ^
1 error generated.
After:
/Users/jason/Desktop/test.cpp:2:6: error: extra qualification on member 'A'
A::A();
~~~^
1 error generated.
Patch by Jason Haslam.
llvm-svn: 174980
2013-02-12 17:27:41 +00:00
Eli Friedman
0d0355abfc
Change diagnostics for enums with fixed underlying type so in C++98 mode, we cite C++11.
...
llvm-svn: 167273
2012-11-02 01:34:28 +00:00
Douglas Gregor
43bc036e8a
Promote the warning about extra qualification on a declaration from a
...
warning to an error. C++ bans it, and both GCC and EDG diagnose it as
an error. Microsoft allows it, so we still warn in Microsoft
mode. Fixes <rdar://problem/11135644>.
llvm-svn: 163831
2012-09-13 20:16:20 +00:00
Eli Friedman
59e41d046e
Shift Microsoft enum extensions from -fms-extensions to -fms-compatibility, so -fms-extensions doesn't affect enum semantics in incompatible ways. <rdar://problem/10657186>.
...
llvm-svn: 150663
2012-02-16 05:20:44 +00:00
Francois Pichet
2056a69cb2
In Microsoft Mode, disable the C++11 strict integral conversion rules for enumerator that were introduced with r148439. Otherwise MSVC headers won't compile in C++ 11 mode.
...
llvm-svn: 148642
2012-01-21 23:26:50 +00:00
Douglas Gregor
60060d6f8f
Treat the Microsoft/Borland keyword "__except" as a context-sensitive
...
keyword, because both libstdc++ and libc++ use "__except" as an
identifier. Fixes <rdar://problem/10322555>.
llvm-svn: 142636
2011-10-21 03:57:52 +00:00
Douglas Gregor
50cefbf212
When we end up having to parse the initializer of a C++ member early
...
in -fms-extensions mode, make sure we actually use that initializer
after having handled the declaration. Fixes PR11150.
llvm-svn: 142195
2011-10-17 17:09:53 +00:00
Francois Pichet
3b4de99158
[microsoft] Move missing typename warning from -fms-extensions to -fms-compatibility. Also allow the missing typename warning at function scope.
...
llvm-svn: 140240
2011-09-21 07:59:49 +00:00
Francois Pichet
b3642c2c7a
Move Microsoft access specifier bug emulation from -fms-extensions to -fm-compatibility.
...
llvm-svn: 140189
2011-09-20 22:08:26 +00:00
Francois Pichet
39cba5343d
Move the "jump bypasses variable initialization" error -> warning downgrade from -fms-extensions to -fms-compatibility.
...
llvm-svn: 140008
2011-09-18 21:48:27 +00:00
Francois Pichet
2f55019bf0
In Microsoft mode, warn if an indirect goto jump over a variable initialization.
...
Also add a test case for the non Microsoft case because such test didn't exist.
llvm-svn: 139971
2011-09-16 23:15:32 +00:00
Francois Pichet
051f5e5cba
In Microsoft mode, downgrade "goto into protected scope" from error to warning if we are jumping over a variable initialization via a goto.
...
This fixes a few errors when parsing MFC code with clang.
llvm-svn: 139595
2011-09-13 10:26:51 +00:00
Francois Pichet
17ed020569
Add support for MSVC __unaligned attribute. Necessary to parse MSVC headers in 64-bit mode (ie: when _M_IA64 or _M_AMD64 is defined)
...
more info: http://msdn.microsoft.com/en-us/library/ms177389.aspx
llvm-svn: 137935
2011-08-18 09:59:55 +00:00
Francois Pichet
e37eebabe7
Microsoft friend acting as a forward declaration; try#2. Now only 2 lines.
...
llvm-svn: 132387
2011-06-01 04:14:20 +00:00
Francois Pichet
a9f436b064
Revert 132332 (Microsoft friend as a forward declaration), John McCall pointed out a better/simpler way to do it.
...
llvm-svn: 132369
2011-05-31 22:36:05 +00:00
Francois Pichet
3fd47df366
For compatibility with MSVC, a friend declaration also act as a forward declaration if the tag name is not already declared. The tag name is declared in the next outermost non record scope.
...
Example:
class A {
friend class B;
B* b;
};
B* global_b;
llvm-svn: 132332
2011-05-31 11:44:00 +00:00
Francois Pichet
a8032e96b5
MSVC doesn't do any validation regarding exception specification.
...
llvm-svn: 131950
2011-05-24 02:11:43 +00:00
Francois Pichet
efb1af9ae8
Emulate a MSVC bug where if during an using declaration name lookup, the declaration found is unaccessible (private) and that declaration was bring into scope via another using declaration whose target declaration is accessible (public) then no error is generated.
...
Example:
class A { public: int f(); };
class B : public A { private: using A::f; };
class C : public B { private: using B::f; };
Here, B::f is private so this should fail in Standard C++, but because B::f refers to A::f which is public MSVC accepts it.
This fixes 1 error when parsing MFC code with clang.
llvm-svn: 131896
2011-05-23 03:43:44 +00:00
Francois Pichet
c2fac71c75
Revert 131347. It asserts if the specialization in within a class template:
...
template<class U>
struct X1 {
template<class T> void f(T*);
template<> void f(int*) { }
};
Won't be so simple. I need to think more about it.
llvm-svn: 131362
2011-05-14 19:17:07 +00:00
Francois Pichet
6744e14d9c
In Microsoft mode, allow template function explicit specialization at class scope.
...
Necessary to parse MFC and MSVC standard lib code.
Example:
struct X {
template<class T> void f(T) { }
template<> void f(int) { }
}
llvm-svn: 131347
2011-05-14 17:46:46 +00:00
Francois Pichet
b796b632a8
In Microsoft mode, allow conversion from pointer to integral type no matter what size the integral type is. Necessary to parse MFC code.
...
Example:
void f(char *ptr) {
char var = (char)ptr;
}
llvm-svn: 131201
2011-05-11 22:13:54 +00:00
Francois Pichet
a7c8da40a8
Fix test.
...
llvm-svn: 131077
2011-05-08 23:15:10 +00:00
Francois Pichet
bc6ebb5b76
Allow implicit conversion from function pointer to void* in Microsoft mode.
...
Necessary to parse MFC code.
llvm-svn: 131076
2011-05-08 22:52:41 +00:00
Francois Pichet
e900b10a29
Downgrade error "static declaration of 'foo' follows non-static declaration" to a warning in Microsoft mode.
...
llvm-svn: 129985
2011-04-22 08:14:00 +00:00
Francois Pichet
48c946e5ef
In Microsoft mode, within class scope, if a CXXScopeSpec's type is equal to the type of one of the base classes then downgrade the missing typename error to a warning. Up to now this is the only case I found where MSVC doesn't require "typename" at class scope. Really strange!
...
This fixes 1 error when parsing the MSVC 2008 header files.
Example:
template<class T> class A {
public:
typedef int TYPE;
};
template<class T> class B : public A<T> {
public:
A<T>::TYPE a; // no typename required because A<T> is a base class.
};
llvm-svn: 129425
2011-04-13 02:38:49 +00:00
Francois Pichet
53fe2bb29e
MSVC accepts that default parameters be redefined for member functions
...
of template class. The new value is ignored.
This fixes 1 error when parsing MSVC 2010 header files with clang.
llvm-svn: 129240
2011-04-10 03:03:52 +00:00
Francois Pichet
117d23c5bc
Add a triple to make the test friendly on no windows platform.
...
llvm-svn: 128459
2011-03-29 11:38:04 +00:00
Francois Pichet
3096d209bf
Accept __declspec(dllimport) for function defined at class scope in Microsoft mode.
...
This fixes a bunch of errors when compiling MSVC header files with the -DDLL flag.
llvm-svn: 128457
2011-03-29 10:39:17 +00:00
Francois Pichet
13b4e68642
Downgrade err_mismatched_exception_spec to a ExtWarning in Microsoft mode. MSVC doesn't do any validation on exception specifications.
...
This remove 1 error when parsing MSVC stl lib with clang.
llvm-svn: 127961
2011-03-19 23:05:18 +00:00
John McCall
8feeb49662
Semantic checking for exception specifications should be triggered by
...
whether C++ exceptions are enabled, not exceptions in general. PR9358.
llvm-svn: 126820
2011-03-02 02:04:40 +00:00
Douglas Gregor
996a735b88
We need a longer long when testing this pathe Microsoft fixed-underlying-type extension for enumeration types
...
llvm-svn: 126250
2011-02-22 21:42:31 +00:00
Douglas Gregor
a1aec29a2d
Enable enumeration types with a fixed underlying type, e.g.,
...
enum X : long { Value = 0x100000000 };
when in Microsoft-extension mode (-fms-extensions). This (now C++0x)
feature has been supported since Microsoft Visual Studio .NET 2003.
llvm-svn: 126243
2011-02-22 20:32:04 +00:00
Francois Pichet
7d92ee3852
Remove a c++ file test I inadvertently added in Sema last week.
...
llvm-svn: 123608
2011-01-17 01:08:01 +00:00
Francois Pichet
a310806ae5
Microsoft enum extensions. 2 things will change on -fms-extensions:
...
1. enum underlying type is int by default.
2. Error "enumerator value is not representable in the underlying type"is a ExtWarning
llvm-svn: 116704
2010-10-18 15:01:13 +00:00
Francois Pichet
488b4a7d94
Add basic support for Microsoft enum forward declaration.
...
Assigning an underlying integral type to an enum forward declaration will come in a next patch.
llvm-svn: 113716
2010-09-12 05:06:55 +00:00
Francois Pichet
4ad4b58639
Allow type definitions inside anonymous struct/union in Microsoft mode.
...
llvm-svn: 113354
2010-09-08 11:32:25 +00:00
Douglas Gregor
eece0eaa85
Transfer calling-convention attributes down to member function pointers.
...
llvm-svn: 112715
2010-09-01 16:29:03 +00:00
Douglas Gregor
f62c5294c1
Emulate (some of) Microsoft's looser semantic checking of exception
...
specifications, from Martin Vejnar!
llvm-svn: 112482
2010-08-30 15:04:51 +00:00
Douglas Gregor
2b1bbecb6b
Predeclare class type_info in Microsoft mode, from Francois Pichet!
...
llvm-svn: 112478
2010-08-30 14:44:26 +00:00