- Dec 04, 2013
-
-
David Majnemer authored
We would lose track of the mangling number assigned to the original declaration which would cause us to create manglings that didn't match the Itanium C++ specification. e.g. Two static fields with the same name inside of a function template would receive the same mangling with LLVM fixing up the second field so they wouldn't collide. This would create an incompatibility with other compilers following the Itanium ABI. I've confirmed that the new mangling is identical to the ones generated by icc and gcc. N.B. This was uncovered while working on Microsoft mangler. llvm-svn: 196368
-
NAKAMURA Takumi authored
llvm-svn: 196350
-
- Dec 03, 2013
-
-
Rafael Espindola authored
llvm-svn: 196286
-
Rafael Espindola authored
llvm-svn: 196285
-
Rafael Espindola authored
llvm-svn: 196284
-
Rafael Espindola authored
llvm-svn: 196282
-
Rafael Espindola authored
llvm-svn: 196281
-
Rafael Espindola authored
llvm-svn: 196280
-
Rafael Espindola authored
llvm-svn: 196279
-
Rafael Espindola authored
llvm-svn: 196278
-
Rafael Espindola authored
llvm-svn: 196277
-
Rafael Espindola authored
llvm-svn: 196276
-
Rafael Espindola authored
llvm-svn: 196275
-
- Nov 25, 2013
-
-
David Majnemer authored
It wasn't possible for an anonymous type to show up inside of function arguments. However, decltype (which MSVC added support for in 2010) makes this possible. Further, backrefs to these anonymous types can now be formed. This fixes PR18022. N.B. We do not, and very likely _will not_, support MSVC's bug where subsequent typedefs of anonymous types leak into the linkage name; this is a gross violation of the ABI. A warning should be introduced to inform our users of this particular shortcoming. llvm-svn: 195669
-
- Nov 24, 2013
-
-
Argyrios Kyrtzidis authored
llvm-svn: 195572
-
- Nov 22, 2013
-
-
Joerg Sonnenberger authored
available always-inline functions. This breaks libc++'s locale implementation. Code generation for this case should be fixed, but this is a stop gap fix for clang 3.4. llvm-svn: 195501
-
- Nov 21, 2013
-
-
Hans Wennborg authored
[-cxx-abi microsoft] Emit linkonce_odr definitions for declarations of static data members with inline initializers (PR17689) This makes Clang emit a linkonce_odr definition for 'val' in the code below, to be compatible with MSVC-compiled code: struct Foo { static const int val = 1; }; Differential Revision: http://llvm-reviews.chandlerc.com/D2233 llvm-svn: 195283
-
- Nov 18, 2013
-
-
Hao Liu authored
The functions are like: vst1_s8_x2 ... llvm-svn: 194991
-
- Nov 15, 2013
-
-
Hans Wennborg authored
Instead of storing the vtable offset directly in the function pointer and doing a branch to check for virtualness at each call site, the MS ABI generates a thunk for calling the function at a specific vtable offset, and puts that in the function pointer. This patch adds support for emitting such thunks. However, it doesn't support pointers to virtual member functions that are variadic, have an incomplete aggregate return type or parameter, or are overriding a function in a virtual base class. Differential Revision: http://llvm-reviews.chandlerc.com/D2104 llvm-svn: 194827
-
- Nov 14, 2013
-
-
Warren Hunt authored
This patch tests introduces a proper codegen test in place of the "codegen no longer crashes" test introduced in r193664. The test is also moved from layout to CodeGenCXX. Differential Revision: http://llvm-reviews.chandlerc.com/D2174 llvm-svn: 194739
-
Rafael Espindola authored
This patch disables aliasing (and rauw) of derived dtors to base dtors at -O0. This optimization can have a negative impact on the debug quality. This was a latent bug for some time with local classes, but got noticed when it was generalized and broke gdb's destrprint.exp. llvm-svn: 194618
-
- Nov 12, 2013
-
-
Rafael Espindola authored
The problem was that given template<typename T> struct foo { ~foo() {} }; template class foo<int>; We would produce a alias, creating a comdat with D0 and D1, since the symbols have to be weak. Another TU is not required to have a explicit template instantiation definition or an explict template instantiation declaration and for template<typename T> struct foo { ~foo() {} }; foo<int> a; we would produce a comdat with only one symbol in it. llvm-svn: 194520
-
Rafael Espindola authored
The original decls are created when used. The replacements are created at the end of the TU in reverse order. This makes the original order far better for testing. This is particularly important since the replacement logic could be used even when -mconstructor-aliases is not used, but that would make many tests hard to read. This is a fixed version of r194357 which handles replacing a destructor with another which is an alias to a third one. llvm-svn: 194452
-
- Nov 11, 2013
-
-
Rafael Espindola authored
This is a reduced testcase from a cast to Function failing during bootstrap. llvm-svn: 194430
-
Rafael Espindola authored
The assert this patch deletes was valid only when aliasing D2 to D1, not when looking at a base class. Since the assert was in the path where we had already decided to not produce an alias, just drop it. llvm-svn: 194411
-
Rafael Espindola authored
This reverts commit r194357. Debugging a cast failure during bootstrap. llvm-svn: 194358
-
- Nov 10, 2013
-
-
Rafael Espindola authored
The original decls are created when used. The replacements are created at the end of the TU in reverse order. This makes the original order far better for testing. This is particularly important since the replacement logic could be used even when -mconstructor-aliases is not used, but that would make many tests hard to read. llvm-svn: 194357
-
Rafael Espindola authored
clang-cl adds these, so this makes the tests a bit more realistic. These are the tests where it would make a difference if the windows specific handling were removed. llvm-svn: 194336
-
- Nov 09, 2013
-
-
Rafael Espindola authored
It is not safe to emit alias to undefined (not supported by ELF or COFF), but it is safe to rauw when the alias would have been internal or linkonce_odr. llvm-svn: 194307
-
Rafael Espindola authored
llvm-svn: 194296
-
Nick Lewycky authored
whether we can safely lower a conditional operator to select was insufficient. I've left a large comment in place to explaining the sort of problems that this transform can encounter in clang in the hopes of discouraging others from reimplementing it wrongly again in the future. (The test should also help with that, but it's easy to work around any single test I might add and think that your particular implementation doesn't miscompile any code.) llvm-svn: 194289
-
- Nov 08, 2013
-
-
Rafael Espindola authored
Unlike an alias a rauw is always safe, so we don't need to avoid this optimization when the replacement is not know to be available in every TU. llvm-svn: 194288
-
Reid Kleckner authored
This makes it consistent with -fdump-record-layouts, which was moved to outs() in r186219. My reasoning for going with stdout is that when one of these options is present, the layouts are really a program output, and shouldn't be interleaved with diagnostics, which are on stderr. Reviewers: timurrrr Differential Revision: http://llvm-reviews.chandlerc.com/D2127 llvm-svn: 194279
-
David Majnemer authored
GEP expressions were folded differently from before, change the tests to reflect this. llvm-svn: 194243
-
- Nov 06, 2013
-
-
Rafael Espindola authored
On the microsoft ABI clang is producing one weak_odr and one linkonce_odr destructor, which is reasonable since only one is required. The fix is simply to move the assert past the special case treatment of linkonce_odr. llvm-svn: 194158
-
Timur Iskhodzhanov authored
llvm-svn: 194132
-
- Nov 05, 2013
-
-
Rafael Espindola authored
This is a small optimization on linux, but should help more on windows where msvc only outputs one destructor if there would be two identical ones. llvm-svn: 194095
-
Timur Iskhodzhanov authored
llvm-svn: 194082
-
Richard Smith authored
deallocation function (and the corresponding unsized deallocation function has been declared), emit a weak discardable definition of the function that forwards to the corresponding unsized deallocation. This allows a C++ standard library implementation to provide both a sized and an unsized deallocation function, where the unsized one does not just call the sized one, for instance by putting both in the same object file within an archive. llvm-svn: 194055
-
Rafael Espindola authored
llvm-svn: 194050
-