summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaCast.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* MS ABI: Tweak pointer-to-member mangling/inheritance model selectionDavid Majnemer2014-02-061-0/+4
| | | | | | | | | | | | Properly determine the inheritance model when dealing with nullptr: - If a nullptr template argument is being checked against pointer-to-member parameter, nail down an inheritance model. N.B. We will chose an inheritance model even if we won't ultimately choose the template to instantiate! Cooky, right? - Null pointer-to-datamembers have a virtual base table offset of -1, not zero. Previously, we chose an offset of 0. llvm-svn: 200920
* Revert "Revert r199416, "MS ABI: Improve selection of an inheritance model""David Majnemer2014-01-171-0/+8
| | | | | | | | | | This reverts commit r199475 (which reverted r199416) with fixes for the breakages. We wouldn't lock an inheritance model if we saw a pointer-to-member formed as a result of the address-of operator. llvm-svn: 199482
* Revert r199416, "MS ABI: Improve selection of an inheritance model"NAKAMURA Takumi2014-01-171-8/+0
| | | | | | | | | | | | It broke tests for targeting x86_64-pc-win32: Clang Tools :: clang-modernize/LoopConvert/array.cpp Clang :: CodeGenCXX/2010-05-10-Var-DbgInfo.cpp Clang :: CodeGenCXX/member-call-parens.cpp Clang :: CodeGenCXX/ptr-to-datamember.cpp Clang :: SemaTemplate/instantiate-function-1.cpp llvm-svn: 199475
* MS ABI: Improve selection of an inheritance modelDavid Majnemer2014-01-161-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | The MSVC ABI is rather finicky about the exact representation of it's pointer-to-member representation. The exact position of when and where it will go with one representation versus another appears to be when it desires the pointer-to-member to be complete. To properly implement this in clang, do several things: - Give up on tracking the polymorphic nature of the class. It isn't useful to Sema and is only pertinent when choosing CodeGen-time details like whether the field-offset can be 0 instead of -1. - Insist on locking-in the inheritance model when we ask our pointer-to-member type to be complete. From there, grab the underlying CXXRecordDecl and try to make *that* complete. Once we've done this, we can calculate it's inheritance model and apply it using an attribute. N.B. My first bullet point is a lie. We will eventually care about the specifics of whether or not a CXXRecordDecl is or is not polymorphic because MSVC compatible mangling of such things depends on it. However, I believe we will handle this in a rather different way. llvm-svn: 199416
* Sema: Fix crash during member pointer conversion involving incomplete classesDavid Majnemer2014-01-161-1/+2
| | | | | | | | | | | | | We would attempt to determine the inheritance relationship between classes 'A' and 'B' during static_cast if we tried to convert from 'int A::*' to 'int B::*'. However, the question "does A derive from B" is not meaningful when 'A' isn't defined. Handle this case by requiring that 'A' be defined. This fixes PR18506. llvm-svn: 199374
* [OpenCL] Disallow casts between address spaces.Joey Gouly2014-01-141-0/+15
| | | | llvm-svn: 199208
* ObjectiveC. Allow toll free bridge cast warnings outsideFariborz Jahanian2013-11-211-0/+5
| | | | | | | ARC and in objectiveC/ObjectiveC++ MRR mode as well. // rdar://15454846 llvm-svn: 195288
* Allow dynamic_cast to void* even with -fno-rtti.Eli Friedman2013-09-241-2/+4
| | | | | | PR17346. llvm-svn: 191340
* Fix crash with cast of value-dependent expr.Eli Friedman2013-09-191-2/+5
| | | | | | | | | We don't really need to perform semantic analysis on the dependent expression anyway, so just call the cast dependent. <rdar://problem/15012610> llvm-svn: 190981
* Fix missing source location in CXXTemporaryObjectExpr nodes.Enea Zaffanella2013-09-071-1/+1
| | | | | | | | For clarity, renamed (get/set)ParenRange as (get/set)ParenOrBraceRange in CXXConstructExpr nodes. Added testcase. llvm-svn: 190239
* Properly track l-paren of a CXXFucntionalCastExpr.Eli Friedman2013-08-151-2/+2
| | | | | | | | | | In addition to storing more useful information in the AST, this fixes a semantic check in template instantiation which checks whether the l-paren location is valid. Fixes PR16903. llvm-svn: 188495
* Check dynamic_cast is not used with -fno-rtti, unless it is a noop or can be ↵Arnaud A. de Grandmaison2013-08-011-0/+7
| | | | | | resolved statically. llvm-svn: 187564
* Don't build expressions for invalid casts.Eli Friedman2013-07-261-8/+21
| | | | | | | | | | This matches how we normally perform semantic analysis for other sorts of invalid expressions: it means we don't have to reason about invalid sub-expressions. Fixes PR16680. llvm-svn: 187276
* Use SmallVectorImpl::reverse_iterator instead of SmallVector to avoid ↵Craig Topper2013-07-081-2/+2
| | | | | | specifying the vector size. llvm-svn: 185784
* Don't use unnamed local enums as template arguments.Joerg Sonnenberger2013-06-261-2/+2
| | | | | | Fixes -Werror bootstrap. llvm-svn: 185023
* Remove dead code.Eli Friedman2013-06-201-5/+0
| | | | llvm-svn: 184453
* Silence 'set but not used' warning when building in release mode using gcc.Andy Gibbs2013-06-191-0/+1
| | | | llvm-svn: 184299
* Fix handling of const_cast from prvalue to rvalue reference: such a cast isRichard Smith2013-06-141-11/+46
| | | | | | | only permitted if the source object is of class type, and should materialize a temporary for the reference to bind to. llvm-svn: 184017
* Disallow reinterpret_cast from pointer to bool on WindowsHans Wennborg2013-06-061-2/+4
| | | | | | | | | | | | This became allowed by accident in r131201, but triggers an assert. That patch added an exception to allow conversion from pointers to narrow integral types for MSVC compatibility. However, a pointer can already be converted to bool in a civilized manner; allowing conversion via reinterpret_cast is a bad idea. Fixes PR16222. llvm-svn: 183394
* Split off casts to void* for -Wint-to-pointer-cast to subgroup ↵Ted Kremenek2013-05-291-2/+12
| | | | | | | | | | | | | -Wint-to-void-pointer-cast. This change is motivated from user feedback that some APIs use void* as an opaque "context" object that may not really be a pointer. Such users want an ability to turn off the warning for casts to void* while preserving the warning for other cases. Implements <rdar://problem/14016721>. llvm-svn: 182884
* Grab-bag of bit-field fixes:John McCall2013-05-061-1/+11
| | | | | | | | | | | | | | - References to ObjC bit-field ivars are bit-field lvalues; fixes rdar://13794269, which got me started down this. - Introduce Expr::refersToBitField, switch a couple users to it where semantically important, and comment the difference between this and the existing API. - Discourage Expr::getBitField by making it a bit longer and less general-sounding. - Lock down on const_casts of bit-field gl-values until we hear back from the committee as to whether they're allowed. llvm-svn: 181252
* ArrayRef'ize InitializationSequence constructor and ↵Dmitri Gribenko2013-05-031-2/+2
| | | | | | | | InitializationSequence::Diagnose() Patch by Robert Wilhelm. llvm-svn: 181022
* Provide a fixit to static_cast for reinterpret_casts within a class hierarchy.Jordan Rose2013-03-281-6/+7
| | | | | | | | | The suggestion was already in the text of the note; this just adds the actual fixit and the appropriate test cases. Patch by Alexander Zinenko! llvm-svn: 178274
* Make the -Wreinterpret-base-class logic safe against invalidJohn McCall2013-03-271-6/+15
| | | | | | | declarations at any point. Patch by Alexander Zinenko, and report by Richard Smith. llvm-svn: 178098
* Warn about attempts to reinterpret_cast between two types that areJohn McCall2013-03-221-2/+87
| | | | | | | | hierarchy-related at a possibly nonzero offset. Patch by Alexander Zinenko! llvm-svn: 177698
* objective-C arg: provide fixit support whenFariborz Jahanian2013-02-221-4/+8
| | | | | | | c++'s named cast need be replaced for bridge casting. // rdar://12788838 llvm-svn: 175923
* Diagnose loads of 'half' l-values in OpenCL.John McCall2013-02-121-6/+0
| | | | | | Patch by Joey Gouly! llvm-svn: 174928
* Add a new LangOpt NativeHalfType. This option allows for native half/fp16Joey Gouly2013-01-231-0/+15
| | | | | | | | operations (as opposed to storage only half/fp16). Also add some semantic checks for OpenCL half types. llvm-svn: 173254
* s/CPlusPlus0x/CPlusPlus11/gRichard Smith2013-01-021-2/+2
| | | | llvm-svn: 171367
* objc: DOn't complain if a (SEL) expression is typecastFariborz Jahanian2012-12-131-0/+2
| | | | | | to (SEL). Fixes // rdar://12859590 llvm-svn: 170058
* Sort all of Clang's files under 'lib', and fix up the broken headersChandler Carruth2012-12-041-3/+3
| | | | | | | | | | | | | uncovered. This required manually correcting all of the incorrect main-module headers I could find, and running the new llvm/utils/sort_includes.py script over the files. I also manually added quite a few missing headers that were uncovered by shuffling the order or moving headers up to be main-module-headers. llvm-svn: 169237
* Implement GCC's -Wint-to-pointer-cast.David Blaikie2012-10-161-0/+20
| | | | | | | | | | | | This implementation doesn't warn on anything that GCC doesn't warn on with the exception of templates specializations (GCC doesn't warn, Clang does). The specific skipped cases (boolean, constant expressions, enums) are open for debate/adjustment if anyone wants to demonstrate that GCC is being overly conservative here. The only really obvious false positive I found was in the Clang regression suite's MPI test - apparently MPI uses specific flag values in pointer constants. (eg: #define FOO (void*)~0) llvm-svn: 166039
* Now that ASTMultiPtr is nothing more than a array reference, make it a ↵Benjamin Kramer2012-08-231-2/+1
| | | | | | | | MutableArrayRef. This required changing all get() calls to data() and using the simpler constructors. llvm-svn: 162501
* Rip out remnants of move semantic emulation and smart pointers in Sema.Benjamin Kramer2012-08-231-3/+3
| | | | | | | These were nops for quite a while and only lead to confusion. ASTMultiPtr now behaves like a proper dumb array reference. llvm-svn: 162475
* c: implement gcc's -Wbad-function-cast which warnsFariborz Jahanian2012-08-171-1/+38
| | | | | | | on unsafe cast of a c-function call. This is a C-only option. llvm-svn: 162109
* objective-C: deprecate casts of ObjC's SELFariborz Jahanian2012-08-161-1/+19
| | | | | | | expressions except to void, void * and their qualified versions. // rdar://12107381 llvm-svn: 162036
* Add correct parenthesis range to CXXConstructExprs insideDaniel Jasper2012-07-161-0/+3
| | | | | | CXXFunctionalCastExprs. llvm-svn: 160252
* Fix Sema and IRGen for atomic compound assignment so it has the right ↵Eli Friedman2012-06-161-5/+1
| | | | | | | | semantics when promotions are involved. (As far as I can tell, this only affects some edge cases.) llvm-svn: 158591
* Detecting illegal instantiations of abstract types when using a ↵Aaron Ballman2012-05-071-1/+3
| | | | | | function-style cast. Fixed PR12658. llvm-svn: 156271
* Move Sema::RequireCompleteType() and Sema::RequireCompleteExprType()Douglas Gregor2012-05-041-6/+6
| | | | | | | | | | | off PartialDiagnostic. PartialDiagnostic is rather heavyweight for something that is in the critical path and is rarely used. So, switch over to an abstract-class-based callback mechanism that delays most of the work until a diagnostic is actually produced. Good for ~11k code size reduction in the compiler and 1% speedup in -fsyntax-only on the code in <rdar://problem/11004361>. llvm-svn: 156176
* PR9546, DR1268: A prvalue cannot be reinterpret_cast to an rvalue referenceRichard Smith2012-04-291-4/+3
| | | | | | type. But a glvalue can be reinterpret_cast to either flavor of reference. llvm-svn: 155789
* Unify naming of LangOptions variable/get function across the Clang stack ↵David Blaikie2012-03-111-12/+12
| | | | | | | | | | (Lex to AST). The member variable is always "LangOpts" and the member function is always "getLangOpts". Reviewed by Chris Lattner llvm-svn: 152536
* Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,Ted Kremenek2012-03-061-0/+2
| | | | | | | | | | | | | NSNumber, and boolean literals. This includes both Sema and Codegen support. Included is also support for new Objective-C container subscripting. My apologies for the large patch. It was very difficult to break apart. The patch introduces changes to the driver as well to cause clang to link in additional runtime support when needed to support the new language features. Docs are forthcoming to document the implementation and behavior of these features. llvm-svn: 152137
* ArrayRef'ize various functions in the AST/Parser/Sema.Ahmed Charles2012-02-251-1/+1
| | | | llvm-svn: 151447
* Split reinterpret_casts of member pointers out from CK_BitCast; thisJohn McCall2012-02-151-1/+2
| | | | | | | | | | | | | | | | | | | | | is general goodness because representations of member pointers are not always equivalent across member pointer types on all ABIs (even though this isn't really standard-endorsed). Take advantage of the new information to teach IR-generation how to do these reinterprets in constant initializers. Make sure this works when intermingled with hierarchy conversions (although this is not part of our motivating use case). Doing this in the constant-evaluator would probably have been better, but that would require a *lot* of extra structure in the representation of constant member pointers: you'd really have to track an arbitrary chain of hierarchy conversions and reinterpretations in order to get this right. Ultimately, this seems less complex. I also wasn't quite sure how to extend the constant evaluator to handle foldings that we don't actually want to treat as extended constant expressions. llvm-svn: 150551
* Don't route explicit construction via list-initialization through the ↵Sebastian Redl2012-02-131-13/+15
| | | | | | functional cast code path. It sometimes does the wrong thing, produces horrible error messages, and is just unnecessary. llvm-svn: 150408
* Proper initializer list support for new expressions and type construct ↵Sebastian Redl2012-02-121-23/+26
| | | | | | expressions. Array new still missing. llvm-svn: 150346
* Change the way we store initialization kinds so that all direct inits can ↵Sebastian Redl2012-02-121-5/+10
| | | | | | distinguish between list and parens form. This allows us to correctly diagnose the last test cases from litb. llvm-svn: 150343
* C++ 5.2.10p2 has a note that mentions that, subject to all other restrictions,Chad Rosier2012-02-031-12/+21
| | | | | | | | a cast to the same type is allowed so long as it does not cast away constness. Fix for PR11747. Patch by Aaron Ballman. Reviewed by Eli. llvm-svn: 149664
* Remove unreachable code in Clang. (replace with llvm_unreachable where ↵David Blaikie2012-01-171-3/+0
| | | | | | appropriate or when GCC requires it) llvm-svn: 148292
OpenPOWER on IntegriCloud