Commit Graph

22 Commits

Author SHA1 Message Date
Haojian Wu 684e416ef1 [AST][RecoveryExpr] Preserve the AST for invalid conditions.
Adjust an existing diagnostic test, which is an improvement of secondary diagnostic.

Differential Revision: https://reviews.llvm.org/D81163
2020-07-20 14:58:36 +02:00
Richard Smith 70f59b5bbc When diagnosing an ambiguity, only note the candidates that contribute
to the ambiguity, rather than noting all viable candidates.
2019-10-24 14:58:29 -07:00
Charles Davis c7d5c94f78 Support __builtin_ms_va_list.
Summary:
This change adds support for `__builtin_ms_va_list`, a GCC extension for
variadic `ms_abi` functions. The existing `__builtin_va_list` support is
inadequate for this because `va_list` is defined differently in the Win64
ABI vs. the System V/AMD64 ABI.

Depends on D1622.

Reviewers: rsmith, rnk, rjmccall

CC: cfe-commits

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

llvm-svn: 247941
2015-09-17 20:55:33 +00:00
David Majnemer c75d1a1098 Properly diagnose using abstract and incomplete types in va_arg
- Move a test from test/SemaTemplate/instantiate-expr-3.cpp, it did not belong there
- Incomplete and abstract types are considered hard errors

llvm-svn: 132979
2011-06-14 05:17:32 +00:00
David Majnemer 254a5c07e7 Give a diagnostic when using non-POD types in a va_arg
llvm-svn: 132905
2011-06-13 06:37:03 +00:00
John McCall 1ababa63de Continue to instantiate sub-statements in a CompoundStmt as long as
we don't see a DeclStmt (failure to instantiate which generally causes
panic).

llvm-svn: 112282
2010-08-27 19:56:05 +00:00
Douglas Gregor ff73a9e380 When instantiating statements that involve conditions (if, while, do,
for, and switch), be careful to construct the full expressions as soon
as we perform template instantation, so we don't either forget to call
temporary destructors or destroy temporaries at the wrong time. This
is the template-instantiation analogue to r103187, during which I
hadn't realized that the issue would affect the handling of these
constructs differently inside and outside of templates.

Fixes a regression in Boost.Function.

llvm-svn: 103357
2010-05-08 22:20:28 +00:00
Daniel Dunbar 8fbe78f6fc Update tests to use %clang_cc1 instead of 'clang-cc' or 'clang -cc1'.
- This is designed to make it obvious that %clang_cc1 is a "test variable"
   which is substituted. It is '%clang_cc1' instead of '%clang -cc1' because it
   can be useful to redefine what gets run as 'clang -cc1' (for example, to set
   a default target).

llvm-svn: 91446
2009-12-15 20:14:24 +00:00
Douglas Gregor 36fe6901d4 Template instantiation for ExtVectorElementExpr.
llvm-svn: 72299
2009-05-22 23:07:44 +00:00
Douglas Gregor 920e3af495 Fix template instantiation for compound statements so that it properly
passes the "isStmtExpr" flag, to suppress warnings about unused
expressions.

llvm-svn: 72190
2009-05-20 22:57:03 +00:00
Douglas Gregor c902c85b6c Tweak test case so that the expected-error text matches on both i686 and x86-64.
llvm-svn: 72181
2009-05-20 20:30:46 +00:00
Douglas Gregor 895ef6e6f9 Add a va_list/template instantiation test suggested by Eli
llvm-svn: 72178
2009-05-20 18:50:16 +00:00
Douglas Gregor 68f1096212 Add FIXMEs for the remaining C and C++ expression types that still
need template instantiation logic. Remove one FIXME by instantiating
the callee in a non-type-dependent CXXOperatorCallExpr.

llvm-svn: 72145
2009-05-19 23:29:16 +00:00
Douglas Gregor ad3150cd38 Template instantiation for __builtin_va_arg.
llvm-svn: 72144
2009-05-19 23:10:31 +00:00
Douglas Gregor 0df91121ba Template instantiation for __builtin_choose_expr.
llvm-svn: 72143
2009-05-19 22:43:30 +00:00
Douglas Gregor f907cbf634 Ban the use of __builtin_types_compatible_p in C++; g++ doesn't support it,
and it isn't clear exactly what it's supposed to mean. Thanks Eli!

llvm-svn: 72142
2009-05-19 22:28:02 +00:00
Douglas Gregor c25f766065 Template instantiation for __builtin_shufflevector.
llvm-svn: 72139
2009-05-19 22:10:17 +00:00
Douglas Gregor 4b58ca02c5 Template instantiation for __builtin_types_compatible_p.
llvm-svn: 72134
2009-05-19 20:55:31 +00:00
Douglas Gregor 8d7fef3cf2 Template instantiation for GNU statement expressions
llvm-svn: 72129
2009-05-19 20:31:21 +00:00
Douglas Gregor 115652db4a Fix handling of the GNU "t ? : f" extension to the conditional
operator in C++, and verify that template instantiation for the
condition operator does the right thing.

llvm-svn: 72127
2009-05-19 20:13:50 +00:00
Douglas Gregor 3234db1e13 Template instantiation for compound assignment operators.
llvm-svn: 72126
2009-05-19 20:02:01 +00:00
Douglas Gregor 38e7f8bd6d Template instantiation for imaginary literals, because they were next in Expr.h
llvm-svn: 72058
2009-05-18 22:38:38 +00:00