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