Commit Graph

882 Commits

Author SHA1 Message Date
Rafael Espindola 51cd00abaf Use private linkage for utf-16 objc strings too.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199709 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-21 02:57:56 +00:00
Rafael Espindola f68203224c Now that r199688 avoids the real issue, use private linkage for objc strings.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199705 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-21 01:50:12 +00:00
Rafael Espindola 68aa3e1054 Give explicit sections for string constants used in NSStrings.
Without them they can be merged with non unnamed_addr constants during LTO.
The resulting constant is not unnamed_addr and goes in a different section,
which causes ld64 to crash.

A testcase that would crash before:

* file1.mm:
void g(id notification) {
  [notification valueForKey:@"name"];
}

* file2.cpp:
extern const char js_name_str[] = "name";

* file3.cpp
extern bool JS_GetProperty(const char *name);
extern const char js_name_str[];
bool js_ReportUncaughtException() { JS_GetProperty(js_name_str); }

run

clang file1.mm  -o file1.o -c -w -emit-llvm
clang file2.cpp -o file2.o -c -w -emit-llvm
clang file3.cpp -o file3.o -c -w

ld -dylib -o XUL file1.o file2.o file3.o -undefined dynamic_lookup.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199688 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-20 20:33:18 +00:00
Rafael Espindola 55c1c8ac79 Simplify further.
Thanks to David Blaikie for the push.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199685 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-20 20:13:11 +00:00
Rafael Espindola 63cb238981 Remove virtual methods that were added in 2009 and still had 1 implementation.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199665 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-20 15:19:43 +00:00
Nico Rieck dfedf3016c Update CodeGen to use DLL storage class for dllimport/dllexport
With the old linkage types removed, set the linkage to external for both
dllimport and dllexport to reflect what's currently supported.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199220 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-14 15:23:53 +00:00
Rafael Espindola 470dad7e65 Remove unused include.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198692 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-07 15:11:31 +00:00
Chandler Carruth 4b9be6e25f Sort all the #include lines with LLVM's utils/sort_includes.py which
encodes the canonical rules for LLVM's style. I noticed this had drifted
quite a bit when cleaning up LLVM, so wanted to clean up Clang as well.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198686 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-07 11:51:46 +00:00
Justin Bogner e0e019f6a2 CodeGen: Initial instrumentation based PGO implementation
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198640 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-06 22:27:43 +00:00
Alp Toker f47bcae03e Tidy up CGCXXABI creation
'create' functions conventionally return a pointer, not a reference.

Also use an OwningPtr to get replace the delete of a reference member.

No functional change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198126 91177308-0d34-0410-b5e6-96231b3b80d8
2013-12-28 21:58:40 +00:00
Aaron Ballman e5e1f35423 Switched code from using hasAttr followed by getAttr to simply call getAttr directly and check the resulting value.
No functional changes intended.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@197652 91177308-0d34-0410-b5e6-96231b3b80d8
2013-12-19 03:09:10 +00:00
Aaron Ballman 97915e5a02 Replacing calls to getAttr with calls to hasAttr for clarity. No functional change intended -- this only replaces Boolean uses of getAttr.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@197648 91177308-0d34-0410-b5e6-96231b3b80d8
2013-12-19 02:39:40 +00:00
Alp Toker 5f391fd433 ASTContext: Refactor implicit record creation
Tidy up built-in record creation to reduce code duplication.

Continuation of r197336.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@197452 91177308-0d34-0410-b5e6-96231b3b80d8
2013-12-17 01:22:38 +00:00
Reid Kleckner 3087515b9b [ms-cxxabi] Fix linkage of dtor thunks for anonymous classes
We were mistakengly giving linkonce_odr linkage instead of internal
linkage to the deleting and complete destructor thunks for classes in
anonymous namespaces.

Fixes PR17273.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@197060 91177308-0d34-0410-b5e6-96231b3b80d8
2013-12-11 19:21:27 +00:00
Rafael Espindola 1befc8f8e0 Save another call to GetAddrOfFunction.
Thread an optional GV down to EmitGlobalFunctionDefinition so that it can
avoid the lookup when we already know the corresponding llvm global value.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@196789 91177308-0d34-0410-b5e6-96231b3b80d8
2013-12-09 16:01:03 +00:00
Rafael Espindola 9c8da1b492 When we decide to output a deferred decl, remember the llvm GlobalValue.
We can reuse it to avoid a DenseMap+StringMap lookup to find if it was already
emitted or not.

This fixes a 2010 TODO.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@196785 91177308-0d34-0410-b5e6-96231b3b80d8
2013-12-09 14:59:08 +00:00
Rafael Espindola 181bc0d597 Avoid adding some decls to DeferredDeclsToEmit.
Before this patch GetOrCreateLLVMFunction would add a decl to
DeferredDeclsToEmit even when it was being called by the function trying to
emit that decl.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@196753 91177308-0d34-0410-b5e6-96231b3b80d8
2013-12-09 04:29:47 +00:00
Rafael Espindola 16d0594581 GlobalAlias::isDeclaration is always false. Remove dead code.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@196727 91177308-0d34-0410-b5e6-96231b3b80d8
2013-12-08 17:19:18 +00:00
Manman Ren 73985dbb84 Debug Info: Move the constant for Debug Info Version from Dwarf.h to Metadata.h.
Suggested by Eric.
Paired commit with r196144.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@196145 91177308-0d34-0410-b5e6-96231b3b80d8
2013-12-02 20:10:37 +00:00
Manman Ren 5b814d4d70 Expand comments for Debug Info Version.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@196143 91177308-0d34-0410-b5e6-96231b3b80d8
2013-12-02 19:37:35 +00:00
Argyrios Kyrtzidis 9505696041 [CodeGen] If there is a function definition with duplicate mangled name, emit an error instead of asserting.
rdar://15522601 & http://llvm.org/PR18031

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@195556 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-23 18:41:35 +00:00
Manman Ren 520b4454cd Debug Info: add a "Debug Info Version" module flag to output the current debug
info version number.

Will error out when modules have different version numbers.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@195495 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-22 19:42:45 +00:00
Hans Wennborg 764653b3e3 [-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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@195283 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-21 00:15:56 +00:00
Matt Arsenault 54307dac59 Fix test failures after addrspacecast added.
Bitcasts between address spaces are no longer allowed.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@194765 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-15 02:19:52 +00:00
Joey Gouly 758c4d86bb [OpenCL] Make sure we put string literals in the constant address space.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@194717 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-14 18:26:10 +00:00
Rafael Espindola 081c215cca Keep the old function order in CodeGenModule::applyReplacements.
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.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@194452 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-12 04:53:19 +00:00
Rafael Espindola e7baa02fc3 Revert "Keep the old function order in CodeGenModule::applyReplacements."
This reverts commit r194357.

Debugging a cast failure during bootstrap.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@194358 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-11 00:37:22 +00:00
Rafael Espindola 90f535f3f6 Keep the old function order in CodeGenModule::applyReplacements.
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.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@194357 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-10 19:04:30 +00:00
Benjamin Kramer 471b52aaab Avoid double StringMap lookups. No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@194355 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-10 16:55:11 +00:00
Rafael Espindola 61a0a7519e Produce direct calls instead of alias to linkonce_odr functions.
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.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@194095 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-05 21:37:29 +00:00
Richard Smith 3cebc73895 C++1y sized deallocation: if we have a use, but not a definition, of a sized
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.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@194055 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-05 09:12:18 +00:00
Rafael Espindola d205498c83 New fix for pr17535.
This is a fixed version of r193161. In order to handle

    void foo() __attribute__((alias("bar")));
    void bar() {}
    void zed() __attribute__((alias("foo")));

it is not enough to delay aliases to the end of the TU, we have to do two
passes over them to find if they are defined or not.

This can be implemented by producing alias as we go and just doing the second
pass at the end. This has the advantage that other parts of clang that were
expecting alias to be processed in order don't have to be changed.

This patch also handles cyclic aliases.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@193188 91177308-0d34-0410-b5e6-96231b3b80d8
2013-10-22 19:26:13 +00:00
Rafael Espindola 87017a781f Revert "This patch causes clang to reject alias attributes that point to undefined names. For example, with this patch we now reject"
This reverts commit r193161.

It broke

void foo() __attribute__((alias("bar")));
void bar() {}
void zed() __attribute__((alias("foo")));

Looks like we have to fix pr17639 first :-(

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@193162 91177308-0d34-0410-b5e6-96231b3b80d8
2013-10-22 14:23:09 +00:00
Rafael Espindola e37bf44c80 This patch causes clang to reject alias attributes that point to undefined
names. For example, with this patch we now reject

void f1(void) __attribute__((alias("g1")));

This patch is implemented in CodeGen. It is quiet a bit simpler and more
compatible with gcc than implementing it in Sema. The downside is that the
errors only fire during -emit-llvm.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@193161 91177308-0d34-0410-b5e6-96231b3b80d8
2013-10-22 13:51:06 +00:00
Rafael Espindola bc6509175e Rename some functions for consistency.
Every other function in Redeclarable.h was using Decl instead of Declaration.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@192900 91177308-0d34-0410-b5e6-96231b3b80d8
2013-10-17 15:37:26 +00:00
Rafael Espindola 9686f1234e Emit a .ident saying that clang produced this file.
Patch by Katya Romanova.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@192832 91177308-0d34-0410-b5e6-96231b3b80d8
2013-10-16 19:28:50 +00:00
Manman Ren feba9f2bdc TBAA: use the same format for scalar TBAA and struct-path aware TBAA.
An updated version of r191586 with bug fix.

Struct-path aware TBAA generates tags to specify the access path,
while scalar TBAA only generates tags to scalar types.

We should not generate a TBAA tag with null being the first field. When
a TBAA type node is null, the tag should be null too. Make sure we
don't decorate an instruction with a null TBAA tag.

Added a testing case for the bug reported by Richard with -relaxed-aliasing
and -fsanitizer=thread.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@192145 91177308-0d34-0410-b5e6-96231b3b80d8
2013-10-08 00:08:49 +00:00
Richard Smith 1596e5b368 Revert r191586 and r191695. They cause crashes when building with
-relaxed-aliasing.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191725 91177308-0d34-0410-b5e6-96231b3b80d8
2013-10-01 02:20:23 +00:00
Manman Ren 8a06d8fdef TBAA: use the same format for scalar TBAA and struct-path aware TBAA.
Struct-path aware TBAA generates tags to specify the access path,
while scalar TBAA only generates tags to scalar types.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191586 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-27 23:06:41 +00:00
David Blaikie 0d520f7d2e Do not emit duplicate global initializers for template static data members inside namespaces
A quirk of AST representation leads to class template static data member
definitions being visited twice during Clang IRGen resulting in
duplicate (benign) initializers.

Discovered while investigating a possibly-related debug info bug tickled
by the duplicate emission of these members & their associated debug
info.

With thanks to Richard Smith for help investigating, understanding, and
helping with the fix.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189996 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-04 21:07:37 +00:00
Reid Kleckner dc1ac5ecf0 Emit uuid globals as linkonce_odr
Patch by Nico Rieck!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189860 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-03 21:49:32 +00:00
Robert Wilhelm 344472ebed Use pop_back_val() instead of both back() and pop_back().
No functionality change intended.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189112 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-23 16:11:15 +00:00
David Blaikie 0a1c862914 PR16933: Don't try to codegen things after we've seen errors.
Refactor the underlying code a bit to remove unnecessary calls to
"hasErrorOccurred" & make them consistently at all the entry points to
the IRGen ASTConsumer.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188707 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-19 21:02:26 +00:00
David Majnemer 8effeda3d2 CodeGen: __uuidof should work even with an incomplete _GUID type
Summary:
We would crash in CodeGen::CodeGenModule::EmitUuidofInitializer
because our attempt to enter CodeGen::CodeGenModule::EmitConstantValue
will be foiled: the type of the constant value is incomplete.

Instead, create an unnamed type with the proper layout on all platforms.
Punt the problem of wrongly defined struct _GUID types to the user.
(It's impossible because the TU may never get to see the type and thus
we can't verify that it is suitable.)

This fixes PR16856.

Reviewers: rsmith, rnk, thakis

Reviewed By: rnk

CC: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188481 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-15 19:59:14 +00:00
David Majnemer c80eb46a0f [-cxx-abi microsoft] Mangle __uuidof correctly into template parameters
Summary:
It seems that __uuidof introduces a global extern "C" declaration of
type __s_GUID.  However, our implementation of __uuidof does not provide
such a declaration and thus must open-code the mangling for __uuidof in
template parameters.

This allows us to codegen scoped COM pointers and other such things.

This fixes PR16836.
Depends on D1356.

Reviewers: rnk, cdavis5x, rsmith

Reviewed By: rnk

CC: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188252 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-13 06:32:20 +00:00
Alexey Samsonov 6a4c5dc29e Use new llvm::SpecialCaseList API in CodeGenModule
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188170 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-12 11:48:05 +00:00
David Majnemer c8fe011b7e [-cxx-abi microsoft] Mangle UUIDs correctly, stick them in the proper section
Revert r188055 which reverted r188053. An unrelated change previously snuck in.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188060 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-09 08:35:59 +00:00
David Majnemer 17ffbd0369 Revert "[-cxx-abi microsoft] Mangle UUIDs correctly, stick them in the proper section"
This commit reverts r188053.

It is breaking the build bots.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188055 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-09 05:56:24 +00:00
David Majnemer ea3db97495 [-cxx-abi microsoft] Mangle UUIDs correctly, stick them in the proper section
We mangled them like:
L___uuid_12345678-1234-1234-1234-123456789abc

We should've mangled them like:
__GUID_12345678_1234_1234_1234_123456789abc

Furthermore, they are external symbols.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188053 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-09 05:09:04 +00:00
Larisse Voufo ef4579cda0 Started implementing variable templates. Top level declarations should be fully supported, up to some limitations documented as FIXMEs or TODO. Static data member templates work very partially. Static data member templates of class templates need particular attention...
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@187762 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-06 01:03:05 +00:00