Commit Graph

3376 Commits

Author SHA1 Message Date
Hans Wennborg 5e64528195 MS ABI: Ignore dll attributes on partial template specializations
llvm-svn: 211648
2014-06-24 23:57:13 +00:00
Aaron Ballman f93ef4e450 Allow static_assert inside an anonymous union; fixes PR20021 as well as implements C++ Issue 1940.
llvm-svn: 211606
2014-06-24 16:22:41 +00:00
Alexander Kornienko bf91164f1c Fix "warning: fallthrough annotation does not directly precede switch label" in lambdas.
Summary: This patch fixes http://llvm.org/PR17864 - "warning: fallthrough annotation does not directly precede switch label" in lambdas.

Reviewers: rsmith

Reviewed By: rsmith

Subscribers: rnk, cfe-commits

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

llvm-svn: 211599
2014-06-24 15:28:21 +00:00
David Majnemer 11a54c3465 AST: Address of dllimport functions isn't constant
The address of dllimport functions can be accessed one of two ways:
- Through the IAT which is symbolically referred to with a symbol
  starting with __imp_.
- Via the wrapper-function which ends up calling through the __imp_
  symbol.

The problem with using the wrapper-function is that it's address will
not compare as equal in all translation units.  Specifically, it will
compare unequally with the translation unit which defines the function.

This fixes PR19955.

llvm-svn: 211570
2014-06-24 06:40:51 +00:00
David Majnemer c28a964cba AST: Address of dllimport variables isn't constant
The address of dllimport variables isn't something that can be
meaningfully used in a constexpr context and isn't suitable for
evaluation at load-time.  They require loads from memory to properly
evaluate.

This fixes PR19955.

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

llvm-svn: 211568
2014-06-24 05:59:13 +00:00
Nick Lewycky 9ea8efaf92 Propagate isAddressOfMember into typo correction so that we don't correct &qualified-id into &unqualified-id. Also make sure to set the naming class when we find the qualified-id in a different class than the nested name specifier specified so far. Fixes PR19681!
llvm-svn: 211551
2014-06-23 22:57:51 +00:00
David Majnemer 65a407c2ce Lex: Use the correct types for MS integer suffixes
Something went wrong with r211426, it is an older version of this code
and should not have been committed.  It was reverted with r211434.

Original commit message:
We didn't properly implement support for the sized integer suffixes.
Suffixes like i16 were essentially ignored instead of mapping them to
the appropriately sized integer type.

This fixes PR20008.

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

llvm-svn: 211441
2014-06-21 18:46:07 +00:00
Rafael Espindola d46e4a2303 Revert "Lex: Use the correct types for MS integer suffixes"
This reverts commit r211426.

This broke the arm bots. The crash can be reproduced on X86 by running.
./bin/clang -cc1  -fsyntax-only -verify -fms-extensions ~/llvm/clang/test/Lexer/ms-extensions.c -triple arm-linux

llvm-svn: 211434
2014-06-21 12:39:25 +00:00
David Majnemer 252cbe25cb Lex: Use the correct types for MS integer suffixes
We didn't properly implement support for the sized integer suffixes.
Suffixes like i16 were essentially ignored instead of mapping them to
the appropriately sized integer type.

This fixes PR20008.

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

llvm-svn: 211426
2014-06-21 00:51:59 +00:00
Richard Smith cf519ff519 Fix typo in r211394.
llvm-svn: 211395
2014-06-20 19:58:05 +00:00
Richard Smith 085a64ffc5 [C++1z] Implement N3928: message in static_assert is optional.
llvm-svn: 211394
2014-06-20 19:57:12 +00:00
Richard Smith 955bf016ee [c++1z] Implement N3994: a range-based for loop can declare a variable with super-terse notation
for (x : range) { ... }

which is equivalent to

  for (auto &&x : range) { ... }

llvm-svn: 211267
2014-06-19 11:42:00 +00:00
David Majnemer 5b63fa02b2 Sema: Static redeclaration after extern declarations is a Microsoft Extension
CL permits static redeclarations to follow extern declarations.  The
storage specifier on the latter declaration has no effect.

This fixes PR20034.

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

llvm-svn: 211238
2014-06-18 23:26:25 +00:00
Richard Smith 71b09acb73 Extend AST dump to include 'used' and 'referenced' flags, and put 'invalid' flag in the right place.
llvm-svn: 210872
2014-06-13 02:24:47 +00:00
Reid Kleckner 6713086bca Check the access of operator delete from the destructor context
Previously we would do the access check from the context of
MarkVTableUsed.

Also update this test to C++11, since that is typically used with the MS
C++ ABI.

Fixes PR20005.

llvm-svn: 210850
2014-06-12 22:39:12 +00:00
Fariborz Jahanian 8456406cdf More tests for // rdar://17259812
llvm-svn: 210798
2014-06-12 16:55:43 +00:00
Richard Smith 29d0e6b601 PR19966: don't crash/assert when __underlying_type is applied to an incomplete
enumeration type. I've also filed a LWG issue pointing out that this should be
ill-formed.

llvm-svn: 210723
2014-06-12 00:01:45 +00:00
Richard Smith 3e79a57a6d Add missing "non-constant" diagnostic for a member call on a temporary of
non-literal class type.

llvm-svn: 210696
2014-06-11 19:53:12 +00:00
Kaelyn Takata 68fdd59b31 Move TypoCorrection filtering into the TypoCorrectionConsumer and make it incremental.
The only external/visible functional change that fell out of this
refactoring is that there was one less case where the typo caching
and/or counting didn't work properly. The result is that a test case
had to be moved from typo-correction.cpp to typo-correction-pt2.cpp
to avoid the hard-coded limit on per file/TU typo correction attempts.

llvm-svn: 210669
2014-06-11 18:07:01 +00:00
Richard Smith d88b44d444 PR19996: don't crash if -Wuninitialized sees a c++1y lambda init-capture.
llvm-svn: 210615
2014-06-11 00:31:00 +00:00
Richard Smith f6d7030f0f Related to PR19992: when the GNU alignof-expression extension is applied to an
expression of array-of-unknown-bound type, don't try to complete the array
bound, and return the alignment of the element type rather than 1.

llvm-svn: 210608
2014-06-10 23:34:28 +00:00
Richard Smith c3fbf683e6 PR19992: alignof is permitted on an array of unknown bound.
llvm-svn: 210585
2014-06-10 21:11:26 +00:00
Hans Wennborg 9d06a8d060 Don't inherit dll attributes to deleted methods (PR19988)
We would previously end up with an error when instantiating the
following template:

  template <typename> struct __declspec(dllimport) S {
    void foo() = delete;
  };
  S<int> s;

error: attribute 'dllimport' cannot be applied to a deleted function
llvm-svn: 210550
2014-06-10 17:53:23 +00:00
Nick Lewycky 6fb99b90bc Fix crash declaring global allocation function with zero parameters. Fixes PR19968!
llvm-svn: 210388
2014-06-07 00:43:57 +00:00
Richard Trieu 731b501981 Fix my poor grammar from r210372
llvm-svn: 210387
2014-06-06 23:56:22 +00:00
Richard Trieu f7432755d0 Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings
to detect underfined behavior involving pointers.

llvm-svn: 210372
2014-06-06 21:39:26 +00:00
Hans Wennborg 80fb253fa7 test/SemaCXX/undefined-internal.cpp: Remove target triple.
This test seems to run fine in both MS and Itanium C++ ABI mode these days.

llvm-svn: 210357
2014-06-06 17:51:25 +00:00
Hans Wennborg e9af316423 Downgrade "definition of dllimport static field" error to warning for class templates (PR19902)
This allows us to compile the following kind of code, which occurs in MSVC
headers:

  template <typename> struct S {
    __declspec(dllimport) static int x;
  };
  template <typename T> int S<T>::x;

The definition works similarly to a dllimport inline function definition and
gets available_externally linkage.

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

llvm-svn: 210141
2014-06-04 00:18:41 +00:00
Richard Smith 454a7cdfb3 Implement DR990 and DR1070. Aggregate initialization initializes uninitialized
elements from {}, rather than value-initializing them. This permits calling an
initializer-list constructor or constructing a std::initializer_list object.
(It would also permit initializing a const reference or rvalue reference if
that weren't explicitly prohibited by other rules.)

llvm-svn: 210091
2014-06-03 08:26:00 +00:00
Richard Smith 6c3bbf4271 PR11410: Extend diagnostic to cover all cases of aggregate initialization, not
just the extremely specific case of a trailing array element that couldn't be
initialized because the default constructor for the element type is deleted.

Also reword the diagnostic to better match our other context diagnostics and to
prepare for the implementation of core issue 1070.

llvm-svn: 210083
2014-06-03 07:28:54 +00:00
Alp Toker 7f02e53f5a Revert "Fix the undefined-but-used odr-use marker (DR48)"
Wrong patch got committed (this one isn't ready for prime time).

This reverts commit r209996.

llvm-svn: 209997
2014-06-01 19:13:44 +00:00
Alp Toker 71c53d472f Fix the undefined-but-used odr-use marker (DR48)
We should treat tentative definitions as undefined for the purpose of
ODR-use linkage checking.

This broke somewhere around r149731 when tests were disabled.

Note that test coverage for these diagnostics is generally lacking due to a
separate issue (PR19910: Don't suppress unused/undefined warnings when there
are errors).

llvm-svn: 209996
2014-06-01 18:49:32 +00:00
Faisal Vali 3628cb9cb6 Fix PR18498: Support explicit template arguments with variadic generic lambdas
http://llvm.org/bugs/show_bug.cgi?id=18498

This code was resulting in a crash:

auto L = [](auto ... v) { };
L.operator()<int>(3);

The reason is that the partially-substituted-pack is incorrectly retained within the current-instantiation-scope during template-argument-finalization, and because lambda's are local, there parent instantiation scopes are merged, which leads to the expansion-pattern being retained in the finalized specialization.

This patch ensures that once we have finalized deduction of a parameter-pack, we remove the partially-substituted-pack so that it doesn't cause CheckParameterPacksForExpansion to incorrectly inform the caller that it needs to retain the expansion pattern.


Thanks to Richard Smith for the review!

http://reviews.llvm.org/D2135

llvm-svn: 209992
2014-06-01 16:11:54 +00:00
Hans Wennborg 496524b448 Diagnose dll attribute on member of class that already has a dll attribute
Differential Revision: http://reviews.llvm.org/D3973

llvm-svn: 209954
2014-05-31 02:08:49 +00:00
Hans Wennborg 853ae94660 Start adding support for dllimport/dllexport on classes (PR11170)
This implements the central part of support for dllimport/dllexport on
classes: allowing the attribute on class declarations, inheriting it
to class members, and forcing emission of exported members. It's based
on Nico Rieck's patch from http://reviews.llvm.org/D1099.

This patch doesn't propagate dllexport to bases that are template
specializations, which is an interesting problem. It also doesn't
look at the rules when redeclaring classes with different attributes,
I'd like to do that separately.

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

llvm-svn: 209908
2014-05-30 16:59:42 +00:00
Faisal Vali 47d9ed4e20 Fix 'this' capturing Generic lambdas used within default initializers (PR19876)
http://llvm.org/bugs/show_bug.cgi?id=19876

The following C++1y code results in a crash:

struct X {
  int m = 10;
  int n = [this](auto) { return m; }(20);
};

When implicitly instantiating the generic lambda's call operator specialization body, Sema is unable to determine the current 'this' type when transforming the MemberExpr 'm' - since it looks for the nearest enclosing FunctionDeclDC - which is obviously null.

I considered two ways to fix this:

    1) In InstantiateFunctionDefinition, when the context is saved after the lambda scope info is created, retain the 'this' pointer.
    2) Teach getCurrentThisType() to recognize it is within a generic lambda within an NSDMI/default-initializer and return the appropriate this type.

I chose to implement #2 (though I confess I do not have a compelling reason for choosing it over #1).

Richard Smith accepted the patch:
http://reviews.llvm.org/D3935

Thank you!

llvm-svn: 209874
2014-05-30 04:39:37 +00:00
Nikola Smiljanic e27de09de8 PR11410 - Confusing diagnostic when trailing array element tries to call deleted default constructor
llvm-svn: 209869
2014-05-30 01:28:28 +00:00
Nikola Smiljanic 292b5ce301 PR12214 - Warn on suspicious self-compound-assignments.
llvm-svn: 209867
2014-05-30 00:15:04 +00:00
Nico Rieck 9de0a57687 Sema: Functions with dll attributes cannot be deleted
llvm-svn: 209827
2014-05-29 16:51:19 +00:00
Nico Rieck 078d2f89cd Sema: Check dll attributes on static data members
Redeclarations cannot add a dll attribute and static data members cannot
be defined.

llvm-svn: 209825
2014-05-29 16:50:20 +00:00
Alexander Kornienko 83a4e18f4c Retain isImplicit flag for local variable declarations when instantiating
templates.

Reviewers: rsmith

Reviewed By: rsmith

Subscribers: cfe-commits

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

llvm-svn: 209686
2014-05-27 21:29:22 +00:00
Nico Rieck 68694b53ab Sema: Add dll attribute tests for member functions
llvm-svn: 209598
2014-05-25 10:35:03 +00:00
Nico Rieck 99f12ef44f Sema: Add dll attribute tests for variable templates
llvm-svn: 209597
2014-05-25 10:34:36 +00:00
Nico Rieck ffd8a3364c Sema: Add more tests for dll attributes on inline functions
llvm-svn: 209542
2014-05-23 19:07:49 +00:00
Nico Rieck f84814f9b4 Fix typo
llvm-svn: 209540
2014-05-23 19:07:09 +00:00
Dario Domizioli d179d939a8 [test] Force a triple in the pragma optimize test due to expected mangled names.
No functional change to the compiler.
This should just make the test pass on all buildbots.

llvm-svn: 209515
2014-05-23 13:53:12 +00:00
Dario Domizioli 13a0a38fe0 Implemented support for "pragma clang optimize on/off", based on attribute 'optnone'.
This patch implements support for selectively disabling optimizations on a
range of function definitions through a pragma. The implementation is that
all function definitions in the range are decorated with attribute
'optnone'.

    #pragma clang optimize off
    // All function definitions in here are decorated with 'optnone'.
    #pragma clang optimize on
    // Compilation resumes as normal.

llvm-svn: 209510
2014-05-23 12:13:25 +00:00
Hans Wennborg 5ebffb5555 Don't warn about undefined inline functions if they're dllexport/import
llvm-svn: 209471
2014-05-22 20:45:53 +00:00
Peter Collingbourne 41af7c2fdc Implement the flatten attribute.
This is a GNU attribute that causes calls within the attributed function
to be inlined where possible. It is implemented by giving such calls the
alwaysinline attribute.

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

llvm-svn: 209217
2014-05-20 17:12:51 +00:00
NAKAMURA Takumi 32d832af98 clang/test/SemaCXX/err_init_conversion_failed.cpp: Tweak for i686-msvc.
For targeting i686-msvc, declarations are seen as thiscall like;

  void (template_test::S::*)(const int &) __attribute__((thiscall))
  void (template_test::S::*)(int) __attribute__((thiscall))

It didn't affect x86_64-msvc.

llvm-svn: 209212
2014-05-20 15:44:42 +00:00
Aaron Ballman 981ba24156 None of these attributes require FunctionTemplate to be explicitly listed as part of their subject definition. FunctionTemplateDecls are not what the attribute appertains to in the first place -- it attaches to the underlying FunctionDecl.
The attribute emitter was using FunctionTemplate to map the diagnostic to "functions or methods", but that isn't a particularly clear diagnostic in these cases anyway (since they do not apply to ObjC methods). Updated the attribute emitter to remove custom logic for FunctionTemplateDecl, and updated the test cases for the change in diagnostic wording.

llvm-svn: 209209
2014-05-20 14:10:53 +00:00
Richard Trieu 5fe0a42ae9 Fix diagnostic message for member function pointer mismatches where one of the
classes is a template argument.

llvm-svn: 209190
2014-05-20 04:10:24 +00:00
Richard Trieu ccedd52736 Ignore void returning overloaded functions fom -Wunused-comparison. PR19791.
llvm-svn: 209186
2014-05-20 01:34:43 +00:00
Peter Collingbourne b4728c12e8 Implement the no_split_stack attribute.
This is a GNU attribute that allows split stacks to be turned off on a
per-function basis.

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

llvm-svn: 209167
2014-05-19 22:14:34 +00:00
Richard Smith 6fdeaabda9 Correct incoherent function versus function template partial ordering for conversion operators (the comparison could claim that two conversion operators are both better than each other). Actually implement DR495, rather than passing its test by chance because the declarations happened to be in the "lucky" order.
llvm-svn: 209054
2014-05-17 01:58:45 +00:00
Alp Toker b0869036c1 Tweak diagnostic wording for init list narrowing
The conventional form is '<action> to silence this warning'.

Also call the diagnostic an 'issue' rather than a 'message' because the latter
term is more widely used with reference to message expressions.

llvm-svn: 209052
2014-05-17 01:13:18 +00:00
Hans Wennborg b0f2f146bb Allow dllimport/dllexport on inline functions and adjust the linkage.
This is a step towards handling these attributes on classes (PR11170).

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

llvm-svn: 208925
2014-05-15 22:07:49 +00:00
Alp Toker c3f36af8d0 Fix typos
llvm-svn: 208838
2014-05-15 01:35:53 +00:00
Richard Trieu 161132b95b When an overloaded comparison operator returns a reference, do not consider
it for -Wunused-comparion warnings.  This fixes PR19724.

llvm-svn: 208824
2014-05-14 23:22:10 +00:00
John McCall a16fc89206 When we generate a redeclaration for an
elaborated-type-specifier, place it in the correct
context.

llvm-svn: 208799
2014-05-14 18:31:48 +00:00
Richard Smith d6f9e73527 PR19729: Delete a bunch of bogus code in Sema::FindAllocationOverload. This
caused us to perform copy-initialization for the parameters of an allocation
function called by a new-expression multiple times, resulting in us rejecting
allocations that passed non-copyable parameters (and much worse things in
MSVC compat mode, where we potentially called this function multiple times).

llvm-svn: 208724
2014-05-13 19:56:21 +00:00
Aaron Ballman 8063c3b80c Fix the AST printer for attributed statements so that it does not print duplicate attribute introducers. Eg) [[clang::fallthrough]] instead of [[[[clang::fallthrough]]]]
llvm-svn: 208706
2014-05-13 16:12:14 +00:00
Richard Smith a90ee35a8e PR19713: Don't warn on unused static inline functions, even if the 'inline' was
implied by 'constexpr'.

llvm-svn: 208511
2014-05-11 21:25:24 +00:00
Nico Weber 7aeab6022f Follow-up to r208481: Free all default arguments, not just the first one.
Also add test coverage for this case.  Found by Richard Smith!

llvm-svn: 208484
2014-05-11 00:28:16 +00:00
Nico Weber cf596d8fa8 Add test coverage for invalid conversion functions with default args.
This currently leaks memory (PR19689) but wasn't covered by tests, so LSan
couldn't find it.

llvm-svn: 208477
2014-05-10 19:15:24 +00:00
David Blaikie 04e2e665cb Don't emit -Wnon-virtual-dtor on final classes, since it's not a problem there.
The base class is the culprit/risk here - a sealed/final derived class
with virtual functions and a non-virtual dtor can't accidentally be
polymorphically destroyed (if the base class's dtor is protected - which
also suppresses this warning).

llvm-svn: 208449
2014-05-09 22:02:28 +00:00
Alp Toker e265cf1a33 Add support for partial jump scope checking
This lets us diagnose and perform more complete semantic analysis when faced
with errors in the function body or declaration.

By recovering here we provide more consistent diagnostics, particularly during
interactive editing.

llvm-svn: 208394
2014-05-09 08:40:10 +00:00
Karthik Bhat 967c13d3fb Fix PR19169 [Crash on invalid attempting to specialize a template method as a template variable].
A template declaration of a template name can be null in case we have a dependent name or a set of function templates.
Hence use dyn_cast_or_null instead of dyn_cast. Also improve the diagnostic emitted in this case.

llvm-svn: 208313
2014-05-08 13:16:20 +00:00
Manuel Klimek b33bded176 Explicitly keep track of temporaries during the consumed analysis.
This makes the consumed analysis less dependent on the CFG layout and fixes
a bug where we wouldn't warn on an unconsumed value.

llvm-svn: 208300
2014-05-08 11:50:00 +00:00
Richard Smith 80877c228d Add an Extension warning for applying unary * to an operand of type 'void*' in
C++. This seems like a pointless (and indeed harmful) restriction to me, so
I've suggested removing it to -core and disabled this diagnostic by default.

llvm-svn: 208254
2014-05-07 21:53:27 +00:00
Nick Lewycky 0c4833f07e Add testcase for r208062.
llvm-svn: 208138
2014-05-06 22:28:58 +00:00
Reid Kleckner 756199ccea Fix declspec-thread.cpp test with a triple
Not all triples support it.

llvm-svn: 207772
2014-05-01 17:12:20 +00:00
Reid Kleckner 7d6d2705f6 Add support for __declspec(thread) under -fms-extensions
Reviewers: rsmith

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

llvm-svn: 207734
2014-05-01 03:16:47 +00:00
Richard Smith 09d5b3a928 Make typo-correction of inheriting constructors work a bit better. Limit
correction to direct base class members, and recover properly after we apply
such a correction.

llvm-svn: 207731
2014-05-01 00:35:04 +00:00
Richard Smith d94f2f16bd When typo-correcting a member using declaration, don't exclude member templates.
llvm-svn: 207681
2014-04-30 18:15:00 +00:00
Richard Smith 21866c3267 When typo-correcting a member using-declaration, only consider members of base classes.
llvm-svn: 207680
2014-04-30 18:03:21 +00:00
Richard Smith 30a615dca8 Fix crash if typo correction corrects a member using-declaration to a
non-member declaration. Patch by Dinesh Dwivedi!

llvm-svn: 207677
2014-04-30 17:40:35 +00:00
Reid Kleckner 121b1a1fa5 -Wunused-parameter: Don't fire on defaulted or deleted functions
Patch by Dinesh Dwivedi!

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

llvm-svn: 207672
2014-04-30 16:31:28 +00:00
Argyrios Kyrtzidis d6eb2b9f4d [SemaCXX] Silence -Wconstant-logical-operand if the operand is a 0/1 from a macro.
Libraries specify enabled/disabled features using macro defs of 0/1, in such cases the -Wconstant-logical-operand
is noise.

rdar://15410291

llvm-svn: 207386
2014-04-28 00:20:16 +00:00
Argyrios Kyrtzidis ea75aad379 [Sema] Adjust Sema::getCurBlock()/getCurLambda() to take into account that we may have
switch CurContext due to class template instantiation.

Fixes crash of the included test case.
rdar://16527205

llvm-svn: 207325
2014-04-26 18:29:13 +00:00
Benjamin Kramer 1adc8c3391 Print detailed vector type information on diagnostics.
We never aka vector types because our attributed syntax for it is less
comprehensible than the typedefs. This leaves the user in the dark when
the typedef isn't named that well.

Example:
  v2s v; v4f w;
  w = v;

The naming in this cases isn't even that bad, but the error we give is
useless without looking up the actual typedefs.
t.c:6:5: error: assigning to 'v4f' from incompatible type 'v2s'

Now:
t.c:6:5: error: assigning to 'v4f' (vector of 4 'float' values) from
    incompatible type 'v2s' (vector of 2 'int' values)

We do this for all diagnostics that print a vector type.

llvm-svn: 207267
2014-04-25 20:41:38 +00:00
Richard Smith 6c6ef822b0 PR19558: don't produce an "unused variable" warning for a variable template partial specialization.
llvm-svn: 207260
2014-04-25 19:21:40 +00:00
Richard Trieu d19d9dd365 Change -Wfloating-point-conversion to -Wfloat-conversion.
llvm-svn: 207037
2014-04-23 21:53:59 +00:00
Richard Smith 06ffb45ce4 PR18746: If a constexpr function has a dependent return type and no return
statements, don't diagnose; the return type might end up being 'void'.

Patch by Rahul Jain! Tiny tweaks by me.

llvm-svn: 206929
2014-04-22 23:14:23 +00:00
Richard Smith e334c01773 Move the C++11 ExtWarn for converting a string literal to 'char*' out of
-Wc++11-compat-deprecated-writable-strings. It's neither a C++11 compatibility
warning nor a deprecated feature, it's just ill-formed.

In passing, add that warning to -Wdeprecated, where it belongs.

llvm-svn: 206833
2014-04-22 01:11:06 +00:00
Richard Trieu 393197a08e Move the warning of implicit cast of a floating point to an integer out of
-Wconversion and into it's own group, -Wfloating-point-conversion.

llvm-svn: 206832
2014-04-22 01:01:05 +00:00
Reid Kleckner 4760683b04 MinGW: Define __stdcall&co when -fms-extensions is disabled
This is for compatibility with GCC.

Reviewers: asl

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

llvm-svn: 206791
2014-04-21 20:58:00 +00:00
Richard Smith 0d963d6c49 Don't emit an ExtWarn on declarations of variable template specializations;
we'll already have issued the relevant diagnostic when we saw the declaration
of the primary template.

llvm-svn: 206441
2014-04-17 02:56:49 +00:00
Ted Kremenek 6f375e5604 -Wunreachable-code: refine recognition of unreachable "sigil" to cope with implicit casts in C++.
Fixes <rdar://problem/16631033>.

llvm-svn: 206360
2014-04-16 07:26:09 +00:00
Richard Trieu beffb833dc Make -Wabsolute-value C++-aware.
Warn on std::abs() with unsigned argument.
Suggest std::abs as replacement for the C absolute value functions.
Suggest C++ headers if the specific std::abs overload is not found.

llvm-svn: 206340
2014-04-15 23:47:53 +00:00
Nikola Smiljanic 1b4b6bac3b PR19178 __is_constructible returns true for abstract types.
llvm-svn: 206273
2014-04-15 11:30:15 +00:00
Serge Pavlov 6a7ffbed8a Improve error recovery around colon.
Parse of nested name spacifier is modified so that it properly recovers
if colon is mistyped as double colon in case statement.
This patch fixes PR15133.

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

llvm-svn: 206135
2014-04-13 16:52:03 +00:00
Logan Chien af24ad940d Fix diagnostics for C-style cast to function type.
If the C-style type cast is applied to the overloaded
function and the destination type is function type,
then Clang will crash with assertion failure.  For example,

    void foo(int);
    void foo(int, int);
    void bar() {
        typedef void (ft)(int);
        ft p = (ft)foo;
    }

In this case, the overloaded function foo will be cast to
a function type, which should be considered as an error.
But, unfortunately, since the function resolution is using
canonical type, the matched function will be returned, and
result in SEGV.

This patch fixes this issue by removing the assertion and
add some error diagnostics as the one in static_cast.

llvm-svn: 206133
2014-04-13 16:08:24 +00:00
David Majnemer 81c55b6255 [-fms-extensions] Add tests for __FUNCDNAME__
__FUNCDNAME__ was introduced way back in r194181 but I forgot to add
these tests.

llvm-svn: 206125
2014-04-13 02:29:55 +00:00
Richard Smith 83e78f5c3c Fix handling of redeclaration lookup for using declarations, where the prior
declaration is not visible. Previously we didn't find hidden friend names in
this redeclaration lookup, because we forgot to treat it as a redeclaration
lookup. Conversely, we did find some local extern names, but those don't
actually conflict with a namespace-scope using declaration, because the only
conflicts we can get are scope conflicts, not conflicts due to the entities
being members of the same namespace.

llvm-svn: 206011
2014-04-11 01:03:38 +00:00
Richard Trieu f935b562b9 Add a new subgroup to -Wtautological-compare, -Wtautological-overlap-compare,
which warns on compound conditionals that always evaluate to the same value.
For instance, (x > 5 && x < 3) will always be false since no value for x can
satisfy both conditions.

This patch also changes the CFG to use these tautological values for better
branch analysis.  The test for -Wunreachable-code shows how this change catches
additional dead code.

Patch by Anders Rönnholm.

llvm-svn: 205665
2014-04-05 05:17:01 +00:00
Kaelyn Takata fb271f0cab Try harder about not suggesting methods as corrections when they
obviously won't work. Specifically, don't suggest methods (static or
not) from unrelated classes when the expression is a method call
through a specific object.

llvm-svn: 205653
2014-04-04 22:16:30 +00:00
Richard Trieu 0f09774f17 Extend -Wtautological-constant-out-of-range-compare to handle boolean values
better.  This warning will now trigger on the following conditionals:

bool b;
int i;

if (b > 1) {}  // always false
if (0 <= (i > 5)) {} // always true
if (-1 > b) {} // always false

Patch by Per Viberg.

llvm-svn: 205608
2014-04-04 04:13:47 +00:00
Richard Smith c392617cff PR19305: Don't issue -Wunused-variable warnings on variable templates. It's not
meaningful to odr-use the VarDecl inside a variable template. (Separately, it'd
be nice to track referenced-ness for templates, and warn on unused ones, but
that's really a distinct issue...)

Move a test that generates and tests a warning-suppressing error out to its own
test file, so it doesn't have weird effects on the other tests in the same file.

llvm-svn: 205448
2014-04-02 18:28:36 +00:00
David Blaikie bdb34beae0 Some more anonymous namespace diagnostics to switch to ()
llvm-svn: 205400
2014-04-02 06:18:49 +00:00