Commit Graph

23877 Commits

Author SHA1 Message Date
Chandler Carruth a94a68a8d2 Don't actually generate code for testing the frontend's target cpu flag,
just verify. This should fix the bots where the x86 backend isn't built
into Clang. Sorry for the breakage.

llvm-svn: 223779
2014-12-09 15:52:55 +00:00
Chandler Carruth 04ca0bba9c Re-work the Clang system for classifying Intel x86 CPUs to use their
basic microarchitecture names, and add support (with tests) for parsing
all of the masic microarchitecture names for CPUs documented to be
accepted by GCC with -march. I didn't go back through the 32-bit-only
old microarchitectures, but this at least brings the recent architecture
names up to speed. This is essentially the follow-up to the LLVM commit
r223769 which did similar cleanups for the LLVM CPUs.

One particular benefit is that you can now use -march=westmere in Clang
and get the LLVM westmere processor which is a different ISA variant (!)
and so quite significant.

Much like with r223769, I would appreciate the Intel folks carefully
thinking about the macros defined, names used, etc for the atom chips
and newest primary x86 chips. The current patterns seem quite strange to
me, especially here in Clang.

Note that I haven't replicated the per-microarchitecture macro defines
provided by GCC. I'm really opposed to source code using these rather
than using ISA feature macros.

llvm-svn: 223776
2014-12-09 14:50:25 +00:00
Duncan P. N. Exon Smith 00a4da73d5 Revert "[modules] Add experimental -fmodule-map-file-home-is-cwd flag to -cc1."
This reverts commit r223753.  It broke the Green Dragon build for a few
hours:

  http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-incremental_build/2259/
  http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-incremental_build/2259/consoleFull#43901905849ba4694-19c4-4d7e-bec5-911270d8a58c

I suspect `clang-tools-extra` just needs a follow-up for an API change,
but I'm not the right one to look into it.

llvm-svn: 223759
2014-12-09 06:35:37 +00:00
Richard Smith 0152e78146 [modules] Add experimental -fmodule-map-file-home-is-cwd flag to -cc1.
For files named by -fmodule-map-file=, and files found by 'extern module'
directives, this flag specifies that we should resolve filenames relative to
the current working directory rather than relative to the directory in which
the module map file resides. This is aimed at fixing path handling, in
particular for relative -I paths, when building modules that represent
components of the current project (rather than libraries installed on the
current system, which the current project has as dependencies, where we'd
typically expect the module map files to be looked up implicitly).

llvm-svn: 223753
2014-12-09 03:20:04 +00:00
David Majnemer 6a2fabcc3f MS ABI: Add another test for PR20017
llvm-svn: 223733
2014-12-09 01:36:45 +00:00
David Blaikie 73ca56942d DebugInfo: Correctly identify the location of C++ member initializer list elements
This particularly helps the fidelity of ASan reports (which can occur
even in these examples - if, for example, one uses placement new over a
buffer of insufficient size - now ASan will correctly identify which
member's initialization went over the end of the buffer).

This doesn't cover all types of members - more coming.

llvm-svn: 223726
2014-12-09 00:32:22 +00:00
Richard Smith 0c6387f759 [modules] If the same .pcm file is imported via two different paths, don't
complain that the contained modules are defined twice.

llvm-svn: 223724
2014-12-09 00:14:36 +00:00
David Majnemer ae394819c8 Revert "Driver: Objective-C should respect -fno-exceptions"
This reverts commit r223455.  It's been succesfully argued that
-fexceptions (at the driver level) is a misnomer and has little to do
with -fobjc-exceptions.

llvm-svn: 223723
2014-12-09 00:12:30 +00:00
Nico Weber 02879eab94 Add a test for MS-ABI this adjustment for virtual calls to member operators.
They too were fixed by r223185, despite the commit message saying otherwise.
Add a test that makes sure they don't regress.

llvm-svn: 223714
2014-12-08 23:25:55 +00:00
Kaelyn Takata a15a6dc78e Handle possible TypoExprs in member initializers.
Includes a new test case since none of the existing tests were hitting
this code path.

llvm-svn: 223705
2014-12-08 22:41:42 +00:00
David Blaikie 0b7fad656b DebugInfo: Ensure the store for an assignment is attributed to the beginning of the assignment expression
llvm-svn: 223699
2014-12-08 21:48:57 +00:00
Justin Bogner 970ac60573 InstrProf: Use LLVM's -instrprof pass for profiling
The logic for lowering profiling counters has been moved to an LLVM
pass. Emit the intrinsics rather than duplicating the whole pass in
clang.

llvm-svn: 223683
2014-12-08 19:04:51 +00:00
NAKAMURA Takumi ead8915459 clang/test/Index/usrs.cpp: Appease targeting msvc.
llvm-svn: 223649
2014-12-08 10:20:33 +00:00
Argyrios Kyrtzidis 1d5e542fb2 [libclang] Encode InjectedClassNameType in the USR.
llvm-svn: 223634
2014-12-08 08:48:43 +00:00
Argyrios Kyrtzidis 80537a4146 [libclang] Encode location info for anonymous embedded tag decls.
Otherwise the USR will conflict with different embedded tag decls.

llvm-svn: 223633
2014-12-08 08:48:37 +00:00
Argyrios Kyrtzidis f66cef7575 [libclang] Use same USR encoding for 'class' as 'struct'.
'class' and 'struct' can be used interchangebly for forward references.
Use the same encoding otherwise we may get into a weird situation where the USR for the same
declaration is different based on whether the definition of the tag reference is visible or not.

llvm-svn: 223632
2014-12-08 08:48:33 +00:00
Argyrios Kyrtzidis 0e387dc330 [libclang] Encode C++11 rvalue reference types in the USR.
llvm-svn: 223631
2014-12-08 08:48:27 +00:00
Argyrios Kyrtzidis f581909b3b [libclang] Encode the C++11 method reference qualifier in the USR.
llvm-svn: 223630
2014-12-08 08:48:21 +00:00
Argyrios Kyrtzidis ca044547d2 [libclang] Reflect in USR generation that 'signed char' and 'unsigned char' can overload a 'char' in C++, by giving them distinct encodings.
llvm-svn: 223629
2014-12-08 08:48:17 +00:00
Argyrios Kyrtzidis d06ce400c2 [libclang] Function templates can be 'overloaded' by return type, so encode the return type in the USR
and handle DependentNameType in order to be able to distinguish them.

llvm-svn: 223628
2014-12-08 08:48:11 +00:00
Richard Smith 6ae60e70c6 Add some file content to avoid test failures on content-addressed file systems.
llvm-svn: 223596
2014-12-06 22:12:07 +00:00
Richard Smith 7ddf5f147f Add test file missed from r223561.
llvm-svn: 223595
2014-12-06 22:11:06 +00:00
Richard Smith 223d3f2e4d [modules] If we import a module, and we've seen a module map that describes the
module, use the path from the module map file in preference to the path from
the .pcm file when resolving relative paths in the .pcm file. This allows
diagnostics (and .d output) to give relative paths if the module was found via
a relative path.

llvm-svn: 223577
2014-12-06 03:21:08 +00:00
Kostya Serebryany 597dcc7a8d No memcpy for copy ctor with -fsanitize-address-field-padding=1
Summary:
When -fsanitize-address-field-padding=1 is present
don't emit memcpy for copy constructor.
Thanks Nico for the extra test case.

Test Plan: regression tests

Reviewers: thakis, rsmith

Reviewed By: rsmith

Subscribers: rsmith, cfe-commits

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

llvm-svn: 223563
2014-12-06 01:23:08 +00:00
Hans Wennborg 76b005398d ASTDumper: print whether a function is constexpr
llvm-svn: 223538
2014-12-05 22:38:57 +00:00
Matt Arsenault b9e9dc5e89 Workaround attribute ordering issue with kernel only attributes
Placing the attribute after the kernel keyword would incorrectly
reject the attribute, so use the smae workaround that other
kernel only attributes use.

Also add a FIXME because there are two different phrasings now
for the same error, althoug amdgpu_num_[sv]gpr uses a consistent one.

llvm-svn: 223490
2014-12-05 18:03:58 +00:00
Aaron Ballman a6f759e423 Modify __has_attribute so that it only looks for GNU-style attributes. Removes the ability to look for generic attributes and keywords via this macro, which has the potential to be a breaking change. However, since there is __has_cpp_attribute and __has_declspec_attribute, and given the limited usefulness of querying a generic attribute name regardless of syntax, this seems like the correct path forward.
llvm-svn: 223468
2014-12-05 15:24:55 +00:00
Aaron Ballman 3c0f9b4a7d Added a new preprocessor macro: __has_declspec_attribute. This can be used as a way to determine whether Clang supports a __declspec spelling for a given attribute, similar to __has_attribute and __has_cpp_attribute.
llvm-svn: 223467
2014-12-05 15:05:29 +00:00
David Majnemer 153c3948f1 Driver: Objective-C should respect -fno-exceptions
Clang attempted to replicate a GCC bug: -fobjc-exceptions forces
-fexceptions to be enabled.  However, this has unintended effects and
other awkard side effects that Clang doesn't "correctly" ape (e.g. it's
impossible to turn off C++ exceptions in ObjC++ mode).

Instead, -f[no]objc-exceptions and -f[no]cxx-exceptions now have an
identical relationship with -f[no]exceptions.

llvm-svn: 223455
2014-12-05 08:56:55 +00:00
Alexey Bataev 39bd119842 [OPENMP] Test for 'omp barrier' directive
llvm-svn: 223445
2014-12-05 04:10:27 +00:00
Alexey Bataev 8f7c1b0b9d [OPENMP] Codegen for 'omp barrier' directive.
Adds generation of call to "i32 kmpc_cancel_barrier(ident_t *, i32)" libcall for explicitly specified barriers (OMP_IDENT_BARRIER_EXPL flag is added to "flags" field of "ident_t" structure).
Also this patch replaces all calls to "kmpc_barrier" function by calls of "__kmpc_cancel_barrier" function which provides additional functionality for OpenMP 4.0.
Also, library specific enum OpenMPLocationFlags moved to private section of CGOpenMPRuntime class to make it more independent from library implementation.
Differential Revision: http://reviews.llvm.org/D6447

llvm-svn: 223444
2014-12-05 04:09:23 +00:00
Eric Christopher 0e2618857c Have the driver and the target code agree on what the default ABI
is for each machine. Fix up darwin tests that were testing for
aapcs on armv7-ios when the actual ABI is apcs.

Should be no user visible change without -cc1.

llvm-svn: 223429
2014-12-05 01:06:59 +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
Nico Rieck 3e1ee83626 Recognize __unaligned keyword after type specifier
The __unaligned keyword can appear after a struct definition:

  struct foo {...} __unaligned *x;

llvm-svn: 223412
2014-12-04 23:30:25 +00:00
Matt Arsenault 43fae6c855 Add attributes for AMDGPU register limits.
This is a performance hint that can be applied to kernels
to attempt to limit the number of used registers.

llvm-svn: 223384
2014-12-04 20:38:18 +00:00
Faisal Vali 8435a6938d Fix PR21684 - Ellipsis following an 'auto' parameter sans name/ID
should indicate a c++ parameter pack not a c-variadic.

int i = [](auto...) { return 0; }(); // OK now.

llvm-svn: 223357
2014-12-04 12:40:21 +00:00
Alexey Bataev 8d690650e8 [OPENMP] Codegen for 'omp master' directive
Patch adds 2 library functions to OpenMPRuntime class - int32 kmpc_master(ident_t *, int32 gtid) and void kmpc_end_master(ident_t *, int32 gtid);
For 'omp master' directive the next code is generated:

if (__kmpc_master(loc, gtid)) {
    <Associated structured block>;
      __kmpc_end_master(log, gtid);
}

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

llvm-svn: 223342
2014-12-04 07:23:53 +00:00
Sameer Sahasrabuddhe c6093fea03 Always emit kernel arg info for SPIR.
http://llvm.org/bugs/show_bug.cgi?id=21555

Currently, kernel argument metadata is omitted unless the
"-cl-kernel-arg-info" option is specified. But the SPIR 1.2 spec
requires that all metadata except kernel_arg_name should always be
emitted, and kernel_arg_name is only emitted when
"-cl-kernel-arg-info" is specified.

Patch ported by Ryan Burn from the Khronos SPIR generator.
https://github.com/KhronosGroup/SPIR

llvm-svn: 223340
2014-12-04 05:30:58 +00:00
Reid Kleckner 2c8d86ca05 Add test for __umulh
llvm-svn: 223319
2014-12-03 23:52:26 +00:00
Kostya Serebryany bed8da2e3b [msan] allow -fsanitize-coverage=N together with -fsanitize=memory, clang part
llvm-svn: 223311
2014-12-03 23:27:45 +00:00
Reid Kleckner bbc0178518 CUDA host device code with two code paths
Summary:
Allow CUDA host device functions with two code paths using __CUDA_ARCH__
to differentiate between code path being compiled.

For example:
  __host__ __device__ void host_device_function(void) {
  #ifdef __CUDA_ARCH__
    device_only_function();
  #else
    host_only_function();
  #endif
  }

Patch by Jacques Pienaar.

Reviewed By: rnk

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

llvm-svn: 223271
2014-12-03 21:53:36 +00:00
Reid Kleckner 8d58513da4 Cast vtable address points to i32 (...)** to enable more globalopt
We currently use i32 (...)** as the type of the vptr field in the LLVM
struct type. LLVM's GlobalOpt prefers any bitcasts to be on the side of
the data being stored rather than on the pointer being stored to.

Reviewers: majnemer

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

llvm-svn: 223267
2014-12-03 21:00:21 +00:00
Richard Smith 1780d82f35 Teach EvaluatedExprVisitor that the condition and unselected branches of a
_Generic expression are unevaluated.

llvm-svn: 223266
2014-12-03 21:00:20 +00:00
Hal Finkel 7c0d61eaaf Preserve LD_LIBRARY_PATH when using the 'env' command
In many Linux environments (and similar), just-built applications won't run
correctly without making use of the current LD_LIBRARY_PATH environmental
variable in order to find dynamic libraries. Propagate it through the 'env'
command (hopefully this works on all platforms).

llvm-svn: 223219
2014-12-03 08:19:17 +00:00
Kaelyn Takata 53ac6a04eb Handle delayed corrections in a couple more error paths in ParsePostfixExpressionSuffix.
llvm-svn: 223209
2014-12-03 05:30:54 +00:00
Peter Collingbourne 6b46e381e6 Update test to check for prologue instead of prefix
llvm-svn: 223191
2014-12-03 02:37:10 +00:00
Nico Weber 736a993828 Add support for has_feature(cxx_alignof) and has_feature(c_alignof).
r142020 added support for has_feature(cxx_alignas). This does the same for
alignof.

llvm-svn: 223186
2014-12-03 01:25:49 +00:00
Nico Weber aad4af6d50 Fix incorrect codegen for devirtualized calls to virtual overloaded operators.
Consider this program:

    struct A {
      virtual void operator-() { printf("base\n"); }
    };
    struct B final : public A {
      virtual void operator-() override { printf("derived\n"); }
    };

    int main() {
      B* b = new B;
      -static_cast<A&>(*b);
    }

Before this patch, clang saw the virtual call to A::operator-(), figured out
that it can be devirtualized, and then just called A::operator-() directly,
without going through the vtable.  Instead, it should've looked up which
operator-() the call devirtualizes to and should've called that.

For regular virtual member calls, clang gets all this right already. So
instead of giving EmitCXXOperatorMemberCallee() all the logic that
EmitCXXMemberCallExpr() already has, cut the latter function into two pieces,
call the second piece EmitCXXMemberOrOperatorMemberCallExpr(), and use it also
to generate code for calls to virtual member operators.

This way, virtual overloaded operators automatically don't get devirtualized
if they have covariant returns (like it was done for regular calls in r218602),
etc.

This also happens to fix (or at least improve) codegen for explicit constructor
calls (`A a; a.A::A()`) in MS mode with -fsanitize-address-field-padding=1.

(This adjustment for virtual operator calls seems still wrong with the MS ABI.)

llvm-svn: 223185
2014-12-03 01:21:41 +00:00
Richard Smith e8efd99b24 PR21706: -Wunsequenced was missing warnings when leaving a sequenced region that contained side effects.
llvm-svn: 223184
2014-12-03 01:05:50 +00:00
Kaelyn Takata 999dd85e16 Ensure typos in the default values of template parameters get diagnosed.
llvm-svn: 223177
2014-12-02 23:32:20 +00:00