]> granicus.if.org Git - clang/log
clang
16 years agoUsing llvm::OwningPtr<> for CurLexer and CurTokenLexer. This makes both the ownershi...
Ted Kremenek [Thu, 13 Nov 2008 17:11:24 +0000 (17:11 +0000)]
Using llvm::OwningPtr<> for CurLexer and CurTokenLexer.  This makes both the ownership semantics of these objects explicit within the Preprocessor and also tightens up the code (explicit deletes not needed).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59249 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoUse PushIncludeMacroStack/PopMacroStack instead of manually pushing/popping from...
Ted Kremenek [Thu, 13 Nov 2008 16:51:03 +0000 (16:51 +0000)]
Use PushIncludeMacroStack/PopMacroStack instead of manually pushing/popping from IncludeMacroStack.  This is both cleaner and makes the include stack transparently extensible.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59248 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoUpdate Xcode project.
Ted Kremenek [Thu, 13 Nov 2008 16:36:43 +0000 (16:36 +0000)]
Update Xcode project.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59247 91177308-0d34-0410-b5e6-96231b3b80d8

16 years ago- Revert r59229 and r59232: AllocRegion should be immutable.
Ted Kremenek [Thu, 13 Nov 2008 15:42:31 +0000 (15:42 +0000)]
- Revert r59229 and r59232: AllocRegion should be immutable.
- Temporarily disabled test Analysis/array-struct.c for region store.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59245 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoProcess array base expression of any type.
Zhongxing Xu [Thu, 13 Nov 2008 09:48:44 +0000 (09:48 +0000)]
Process array base expression of any type.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59240 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoAdd test for unsigned array index.
Zhongxing Xu [Thu, 13 Nov 2008 09:20:05 +0000 (09:20 +0000)]
Add test for unsigned array index.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59239 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoArray index might be unsigned. We have to generate a temporary signed value for
Zhongxing Xu [Thu, 13 Nov 2008 09:15:14 +0000 (09:15 +0000)]
Array index might be unsigned. We have to generate a temporary signed value for
it to be evaluated by APSInt::operators.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59238 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoAdd test for incomplete struct pointer.
Zhongxing Xu [Thu, 13 Nov 2008 08:44:52 +0000 (08:44 +0000)]
Add test for incomplete struct pointer.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59236 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoIncomplete struct pointer can be used as a function argument.
Zhongxing Xu [Thu, 13 Nov 2008 08:41:36 +0000 (08:41 +0000)]
Incomplete struct pointer can be used as a function argument.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59235 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoAdd a test case for alloca().
Zhongxing Xu [Thu, 13 Nov 2008 07:59:15 +0000 (07:59 +0000)]
Add a test case for alloca().

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59233 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoLift the pointer to alloca'ed region to the pointer to its first element.
Zhongxing Xu [Thu, 13 Nov 2008 07:58:20 +0000 (07:58 +0000)]
Lift the pointer to alloca'ed region to the pointer to its first element.
This is required by some operations, e.g., *p = 1; p[0] = 1;.
Also set the AllocaRegion's type during the cast.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59232 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoChange AllocaRegion to subclass TypedRegion. We need to know ElementRegion's
Zhongxing Xu [Thu, 13 Nov 2008 07:30:58 +0000 (07:30 +0000)]
Change AllocaRegion to subclass TypedRegion. We need to know ElementRegion's
type when assigning to it.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59229 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoHook up "BodyBlock", not "Block".
Ted Kremenek [Thu, 13 Nov 2008 07:01:10 +0000 (07:01 +0000)]
Hook up "BodyBlock", not "Block".

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59227 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoCorrectly connect 'continue' and 'break' statements in Objective-C fast enumeration...
Ted Kremenek [Thu, 13 Nov 2008 06:36:45 +0000 (06:36 +0000)]
Correctly connect 'continue' and 'break' statements in Objective-C fast enumeration for blocks to the appropriate basic blocks.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59226 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoGRExprEngine/CFRefCount/GRSimpleVals: We don't do any special handling (yet) of vecto...
Ted Kremenek [Thu, 13 Nov 2008 06:10:40 +0000 (06:10 +0000)]
GRExprEngine/CFRefCount/GRSimpleVals: We don't do any special handling (yet) of vector types.  Add explicit checks that when we process integers that they really are scalars.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59225 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoFix for crash issues with comma operators with a void first operand, and
Eli Friedman [Thu, 13 Nov 2008 06:09:17 +0000 (06:09 +0000)]
Fix for crash issues with comma operators with a void first operand, and
some more bullet-proofing/enhancements for tryEvaluate.  This shouldn't
cause any behavior changes except for handling cases where we were
crashing before and being able to evaluate a few more cases in tryEvaluate.

This should settle the minor mess surrounding r59196.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59224 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoObey the FIXMES!
Daniel Dunbar [Thu, 13 Nov 2008 05:29:02 +0000 (05:29 +0000)]
Obey the FIXMES!
 - Resume running the always inliner pass always now that LLVM has
   been improved and functions with debug info can be inlined.
 - Remove unused header.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59223 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoFix uninitialized variable.
Ted Kremenek [Thu, 13 Nov 2008 05:26:15 +0000 (05:26 +0000)]
Fix uninitialized variable.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59222 91177308-0d34-0410-b5e6-96231b3b80d8

16 years ago[LLVM up] Update for raw_fd_ostream change. This fixes a FIXME that
Daniel Dunbar [Thu, 13 Nov 2008 05:09:21 +0000 (05:09 +0000)]
[LLVM up] Update for raw_fd_ostream change. This fixes a FIXME that
the Backend output should be done in binary mode.
 - I'd appreciate it if someone who has a Windows build could verify
   this.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59221 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoGRExprEngine::VisitInitListExpr:
Ted Kremenek [Thu, 13 Nov 2008 05:05:34 +0000 (05:05 +0000)]
GRExprEngine::VisitInitListExpr:
- Don't crash on vector types.
- Handle typedefs.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59220 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoEasy IRgen improvement for bitfields, don't emit x >> 0.
Daniel Dunbar [Thu, 13 Nov 2008 02:20:34 +0000 (02:20 +0000)]
Easy IRgen improvement for bitfields, don't emit x >> 0.
 - Logic such as this quite possibly should be optional builder
   behavior.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59213 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoBackout of r59196, plus a new ICE test. Sorry if this is a
Eli Friedman [Thu, 13 Nov 2008 02:13:11 +0000 (02:13 +0000)]
Backout of r59196, plus a new ICE test.  Sorry if this is a
little rude; I figure it's cleaner to just back this out now so
it doesn't get forgotten or mixed up with other checkins.

The modification to isICE is simply wrong; I've added a test that the
change to isICE breaks.

I'm pretty sure the modification to tryEvaluate is also wrong.
At the very least, there's some serious miscommunication going on here,
as this is going in exactly the opposite direction of r59105.  My
understanding is that tryEvaluate is not supposed to care about side
effects.  That said, a lot of the clients to tryEvaluate are
expecting it to enforce a no-side-effects policy, so we probably need
another method that provides that guarantee.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59212 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoSupply finished flag to EmitBlock for common statements which use
Daniel Dunbar [Thu, 13 Nov 2008 01:54:24 +0000 (01:54 +0000)]
Supply finished flag to EmitBlock for common statements which use
landing pads.
 - Primarily a cleanliness issue instead of a performance issue (this
   eliminates all blocks w/o predecessors on 176.gcc/expr.c), but this
   also allows subsequent code to recognize it is unreachable and
   potentially avoid IRgen.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59211 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoNormalize many BasicBlock names.
Daniel Dunbar [Thu, 13 Nov 2008 01:38:36 +0000 (01:38 +0000)]
Normalize many BasicBlock names.
 - Use dotted notation for blocks related to a particular statement
   type.
 - Use .end for landing pads.

No functionality change in NDEBUG mode. :)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59210 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoRevert to older checker build.
Ted Kremenek [Thu, 13 Nov 2008 01:30:19 +0000 (01:30 +0000)]
Revert to older checker build.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59209 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoAdd IsFinished arg to EmitBlock.
Daniel Dunbar [Thu, 13 Nov 2008 01:24:05 +0000 (01:24 +0000)]
Add IsFinished arg to EmitBlock.
 - Indicates that caller is done with the block and it can be dropped
   if it has no predecessors. Useful for callers who need to make
   landing pads but which may not be reached.

No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59207 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoUpdate checker build.
Ted Kremenek [Thu, 13 Nov 2008 01:23:50 +0000 (01:23 +0000)]
Update checker build.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59206 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoFor if blocks with no else, name the join block ifend instead of the
Daniel Dunbar [Thu, 13 Nov 2008 00:47:57 +0000 (00:47 +0000)]
For if blocks with no else, name the join block ifend instead of the
more confusing ifelse.

Use dotted names for if blocks (if.then vs ifthen).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59201 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoFix bug where the body block of an ObjCForCollectionStmt would not properly get expan...
Ted Kremenek [Thu, 13 Nov 2008 00:06:59 +0000 (00:06 +0000)]
Fix bug where the body block of an ObjCForCollectionStmt would not properly get expanded as a series of basic blocks.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59197 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoFix bug in constant evaluation exposed by 176.gcc.
Daniel Dunbar [Thu, 13 Nov 2008 00:03:19 +0000 (00:03 +0000)]
Fix bug in constant evaluation exposed by 176.gcc.
 - Evaluation of , operator used bogus assumption that LHS could be
   evaluated as an integral expression even though its type is
   unspecified.

This change is making isICE very permissive of the LHS in non-evaluated
contexts because it is not clear what predicate we would use to reject
code here. The standard didn't offer me any guidance; opinions?

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59196 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoUpdated checker build.
Ted Kremenek [Wed, 12 Nov 2008 23:26:57 +0000 (23:26 +0000)]
Updated checker build.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59195 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoDon't build identifiers for C++ constructors, destructors, or
Douglas Gregor [Wed, 12 Nov 2008 23:21:09 +0000 (23:21 +0000)]
Don't build identifiers for C++ constructors, destructors, or
conversion functions. Instead, we just use a placeholder identifier
for these (e.g., "<constructor>") and override NamedDecl::getName() to
provide a human-readable name.

This is one potential solution to the problem; another solution would
be to replace the use of IdentifierInfo* in NamedDecl with a different
class that deals with identifiers better. I'm also prototyping that to
see how it compares, but this commit is better than what we had
previously.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59193 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoFix compilation on 64-bit targets
Douglas Gregor [Wed, 12 Nov 2008 23:17:06 +0000 (23:17 +0000)]
Fix compilation on 64-bit targets

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59192 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoMove some diagnostic handling to PreprocessorLexer.
Ted Kremenek [Wed, 12 Nov 2008 23:13:54 +0000 (23:13 +0000)]
Move some diagnostic handling to PreprocessorLexer.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59191 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoAdd virtual dtor to PreprocessorLexer.
Ted Kremenek [Wed, 12 Nov 2008 22:48:57 +0000 (22:48 +0000)]
Add virtual dtor to PreprocessorLexer.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59188 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoAdd LexIncludeFilename.
Ted Kremenek [Wed, 12 Nov 2008 22:46:33 +0000 (22:46 +0000)]
Add LexIncludeFilename.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59187 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoRemove Lexer::LexIncludeFilename.
Ted Kremenek [Wed, 12 Nov 2008 22:44:15 +0000 (22:44 +0000)]
Remove Lexer::LexIncludeFilename.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59186 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoMove LexIncludeFilename from Lexer to PreprocessorLexer.
Ted Kremenek [Wed, 12 Nov 2008 22:43:05 +0000 (22:43 +0000)]
Move LexIncludeFilename from Lexer to PreprocessorLexer.
PreprocessorLexer now has a virtual method "IndirectLex" which allows it to call the lex method of its subclasses.  This is not for performance intensive operations.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59185 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoQuick fix for crash in IRgen when we can tryEvaluate a condition to
Daniel Dunbar [Wed, 12 Nov 2008 22:37:10 +0000 (22:37 +0000)]
Quick fix for crash in IRgen when we can tryEvaluate a condition to
something that is not an int.

 - Ignore these cases for now, added FIXME that we should also boolize
   them.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59184 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoUse PushIncludeMacroStack() instead of manually manipulating the include stack.
Ted Kremenek [Wed, 12 Nov 2008 22:21:57 +0000 (22:21 +0000)]
Use PushIncludeMacroStack() instead of manually manipulating the include stack.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59181 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoUnbreak last commit.
Ted Kremenek [Wed, 12 Nov 2008 22:19:18 +0000 (22:19 +0000)]
Unbreak last commit.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59180 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoAdd Preprocessor::PushIncludeMacroStack() and Preprocessor::PopIncludeMacroStack...
Ted Kremenek [Wed, 12 Nov 2008 22:10:22 +0000 (22:10 +0000)]
Add Preprocessor::PushIncludeMacroStack() and Preprocessor::PopIncludeMacroStack(), two utility methods for manipulating the Preprocessor stack.  These will be used to remove manually manipulation of IncludeMacroStack from the rest of the Preprocessor implementation.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59179 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoUpdate CFGStmtVisitor to recognize that ObjCForCollectionStmts are special block...
Ted Kremenek [Wed, 12 Nov 2008 21:58:46 +0000 (21:58 +0000)]
Update CFGStmtVisitor to recognize that ObjCForCollectionStmts are special block-level "expressions".

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59176 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoDisable some debug prints.
Daniel Dunbar [Wed, 12 Nov 2008 21:52:46 +0000 (21:52 +0000)]
Disable some debug prints.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59174 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoSlightly improve type hash
Douglas Gregor [Wed, 12 Nov 2008 21:52:20 +0000 (21:52 +0000)]
Slightly improve type hash

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59173 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoAdd skeleton for PTH lexer.
Ted Kremenek [Wed, 12 Nov 2008 21:37:15 +0000 (21:37 +0000)]
Add skeleton for PTH lexer.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59169 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoMove pieces of Lexer that the Preprocessor mutates to a new base class 'PreprocessorL...
Ted Kremenek [Wed, 12 Nov 2008 21:33:59 +0000 (21:33 +0000)]
Move pieces of Lexer that the Preprocessor mutates to a new base class 'PreprocessorLexer'.  This will also be the base class of the new Preprocessed-Token-Header (PTH) lexer.  No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59168 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoFix a FIXME by improving a diagnostic, add a testcase for PR3048
Chris Lattner [Wed, 12 Nov 2008 21:25:45 +0000 (21:25 +0000)]
Fix a FIXME by improving a diagnostic, add a testcase for PR3048

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59167 91177308-0d34-0410-b5e6-96231b3b80d8

16 years ago64-bit test fixes.
Sebastian Redl [Wed, 12 Nov 2008 21:19:11 +0000 (21:19 +0000)]
64-bit test fixes.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59165 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agomake TryFixInvalidVariablyModifiedType a static function.
Chris Lattner [Wed, 12 Nov 2008 21:17:48 +0000 (21:17 +0000)]
make TryFixInvalidVariablyModifiedType a static function.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59163 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoShore up transfer function for ObjCForCollectionStmt.
Ted Kremenek [Wed, 12 Nov 2008 21:12:46 +0000 (21:12 +0000)]
Shore up transfer function for ObjCForCollectionStmt.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59162 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoUse Stmt* instead of Expr* for block-level expression.
Ted Kremenek [Wed, 12 Nov 2008 21:12:18 +0000 (21:12 +0000)]
Use Stmt* instead of Expr* for block-level expression.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59161 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoObjCForCollectionStmts are block-level expressions.
Ted Kremenek [Wed, 12 Nov 2008 21:11:49 +0000 (21:11 +0000)]
ObjCForCollectionStmts are block-level expressions.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59160 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoRestructure code to encourage fallthrough, no functionality change.
Chris Lattner [Wed, 12 Nov 2008 19:48:13 +0000 (19:48 +0000)]
Restructure code to encourage fallthrough, no functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59157 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agofix PR3048. I'm going to do some more work before closing it off and
Chris Lattner [Wed, 12 Nov 2008 19:45:49 +0000 (19:45 +0000)]
fix PR3048.  I'm going to do some more work before closing it off and
adding a testcase.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59156 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoAdd (preliminary) transfer function support for ObjCForCollectionStmt. Still need...
Ted Kremenek [Wed, 12 Nov 2008 19:24:17 +0000 (19:24 +0000)]
Add (preliminary) transfer function support for ObjCForCollectionStmt.  Still need to flesh out some logic.

When processing DeclStmt, use the new interface to StateManager::BindDecl.  Conjuring of symbols is now done in VisitDeclStmt.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59155 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoConjured symbols now bind to Stmt* instead of Expr*.
Ted Kremenek [Wed, 12 Nov 2008 19:22:47 +0000 (19:22 +0000)]
Conjured symbols now bind to Stmt* instead of Expr*.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59154 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoUpdate method names involving GRStateRef. No functionality change.
Ted Kremenek [Wed, 12 Nov 2008 19:22:09 +0000 (19:22 +0000)]
Update method names involving GRStateRef.  No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59153 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoGRStateRef:
Ted Kremenek [Wed, 12 Nov 2008 19:21:30 +0000 (19:21 +0000)]
GRStateRef:
- Rename SetSVal to BindLoc
- Add BindDecl
- Add BindExpr

GRState:
- Environment now binds to Stmt* instead of Expr*.  This is needed for processing ObjCForCollectionStmt (essentially the declaration of the the 'element' variable can have an SVal attached to it).
- BindDecl no longer accepts Expr* for the initialization value; use SVal* instead.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59152 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoStoreManager::BindDecl now takes an SVal* for the initialization value instead of...
Ted Kremenek [Wed, 12 Nov 2008 19:18:35 +0000 (19:18 +0000)]
StoreManager::BindDecl now takes an SVal* for the initialization value instead of an Expr* (which can be null).  Lazy symbolication of conjured symbols is now the sole responsibility of GRExprEngine.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59151 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoImplement support for operator overloading using candidate operator
Douglas Gregor [Wed, 12 Nov 2008 17:17:38 +0000 (17:17 +0000)]
Implement support for operator overloading using candidate operator
functions for built-in operators, e.g., the builtin

  bool operator==(int const*, int const*)

can be used for the expression "x1 == x2" given:

  struct X {
    operator int const*();
  } x1, x2;

The scheme for handling these built-in operators is relatively simple:
for each candidate required by the standard, create a special kind of
candidate function for the built-in. If overload resolution picks the
built-in operator, we perform the appropriate conversions on the
arguments and then let the normal built-in operator take care of it.

There may be some optimization opportunity left: if we can reduce the
number of built-in operator overloads we generate, overload resolution
for these cases will go faster. However, one must be careful when
doing this: GCC generates too few operator overloads in our little
test program, and fails to compile it because none of the overloads it
generates match.

Note that we only support operator overload for non-member binary
operators at the moment. The other operators will follow.

As part of this change, ImplicitCastExpr can now be an lvalue.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59148 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoStart a README.txt of possible optimizations to do in IRgen.
Daniel Dunbar [Wed, 12 Nov 2008 12:31:28 +0000 (12:31 +0000)]
Start a README.txt of possible optimizations to do in IRgen.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59130 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoHandle ?: in EmitBranchOnBoolExpr.
Daniel Dunbar [Wed, 12 Nov 2008 10:30:32 +0000 (10:30 +0000)]
Handle ?: in EmitBranchOnBoolExpr.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59129 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoRename ?: operator blocks to cond.true and cond.false (I don't know
Daniel Dunbar [Wed, 12 Nov 2008 10:13:37 +0000 (10:13 +0000)]
Rename ?: operator blocks to cond.true and cond.false (I don't know
what "cond.?" means, and this avoids quoting).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59128 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoComment/indentation fix.
Daniel Dunbar [Wed, 12 Nov 2008 10:12:14 +0000 (10:12 +0000)]
Comment/indentation fix.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59127 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoSome additions to tryEvaluate I've had sitting around for a while.
Eli Friedman [Wed, 12 Nov 2008 09:44:48 +0000 (09:44 +0000)]
Some additions to tryEvaluate I've had sitting around for a while.
This pushes it a lot closer to being able to deal with most of the stuff
CodeGen's constant expression evaluator knows how to deal with.  This
also fixes PR3003.

The test could possibly use some improvement, but this'll work for now.
Test 6 is inspired by PR3003; the other tests are mostly just designed
to exercise the new code.  The reason for the funny structure of the
tests is that type fixing for arrays inside of structs is the only place
in Sema that calls tryEvaluate, at least for the moment.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59125 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoLower ?: into select when the selected values are cheap and side-effect-free.
Chris Lattner [Wed, 12 Nov 2008 08:55:54 +0000 (08:55 +0000)]
Lower ?: into select when the selected values are cheap and side-effect-free.
This cuts another 200 lines off expr.ll, forming 23 selects.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59124 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoemit better codegen for ||/&&, shrinking expr.ll by another 240 lines.
Chris Lattner [Wed, 12 Nov 2008 08:38:24 +0000 (08:38 +0000)]
emit better codegen for ||/&&, shrinking expr.ll by another 240 lines.
This happens for stuff like this:

x = cond1 || cond2 || cond3 || cond4;

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59123 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agouse ConstantFoldsToSimpleInteger instead of code emission to do
Chris Lattner [Wed, 12 Nov 2008 08:26:50 +0000 (08:26 +0000)]
use ConstantFoldsToSimpleInteger instead of code emission to do
constant folding.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59121 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoIRgen improvements on unreachable code:
Daniel Dunbar [Wed, 12 Nov 2008 08:21:33 +0000 (08:21 +0000)]
IRgen improvements on unreachable code:
 - Split out "simple" statements which can easily handle IR generation
   when there is no insert point. These are generally statements which
   start by emitting a new block or are only containers for other
   statements.

 - This fixes a regression in emitting dummy blocks, notably for case
   statements.

 - This also fixes spurious emission of a number of debug stoppoint
   intrinsic instructions.

Remove unneeded sw.body block, just clear the insertion point.

Lift out CodeGenFunction::EmitStopPoint which calls into the
CGDebugInfo class when generating debug info.

Normalize definitions of Emit{Break,Continue}Stmt and usage of
ErrorUnsupported.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59118 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoHandle Unary ! in EmitBranchOnBoolExpr, so that we can efficiently
Chris Lattner [Wed, 12 Nov 2008 08:13:36 +0000 (08:13 +0000)]
Handle Unary ! in EmitBranchOnBoolExpr, so that we can efficiently
codegen stuff like "if (!(X && Y))"

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59115 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoUse EmitBranchOnBoolExpr in VisitConditionalOperator. This
Chris Lattner [Wed, 12 Nov 2008 08:08:13 +0000 (08:08 +0000)]
Use EmitBranchOnBoolExpr in VisitConditionalOperator.  This
shrinks code yet again by a bit.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59114 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoMove EmitBranchOnBoolExpr and ConstantFoldsToSimpleInteger to
Chris Lattner [Wed, 12 Nov 2008 08:04:58 +0000 (08:04 +0000)]
Move EmitBranchOnBoolExpr and ConstantFoldsToSimpleInteger to
CodeGenFunction.cpp.  Change VisitConditionalOperator to use
constant fold instead of codegen'ing a constant conditional.

Change ForStmt to use EmitBranchOnBoolExpr, this shrinks
expr.c very slightly to 40239 lines.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59113 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agosort files by name.
Chris Lattner [Wed, 12 Nov 2008 07:46:52 +0000 (07:46 +0000)]
sort files by name.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59112 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoMake emission of 'if' conditions much more sophisticated when we
Chris Lattner [Wed, 12 Nov 2008 07:46:33 +0000 (07:46 +0000)]
Make emission of 'if' conditions much more sophisticated when we
have a condition that is an &&/||.  Before we used to compile things like this:

int test() {
  if (x && y) foo(); else bar();
}

into:

%0 = load i32* @x ; <i32> [#uses=1]
%1 = icmp ne i32 %0, 0 ; <i1> [#uses=1]
br i1 %1, label %land_rhs, label %land_cont

land_rhs: ; preds = %entry
%2 = load i32* @y ; <i32> [#uses=1]
%3 = icmp ne i32 %2, 0 ; <i1> [#uses=1]
br label %land_cont

land_cont: ; preds = %land_rhs, %entry
%4 = phi i1 [ false, %entry ], [ %3, %land_rhs ] ; <i1> [#uses=1]
br i1 %4, label %ifthen, label %ifelse

ifthen: ; preds = %land_cont
%call = call i32 (...)* @foo() ; <i32> [#uses=0]
br label %ifend

ifelse: ; preds = %land_cont
%call1 = call i32 (...)* @bar() ; <i32> [#uses=0]
br label %ifend

ifend: ; preds = %ifelse, %ifthen

Now we turn it into the much more svelte code:

        %0 = load i32* @x               ; <i32> [#uses=1]
        %1 = icmp ne i32 %0, 0          ; <i1> [#uses=1]
        br i1 %1, label %land_lhs_true, label %ifelse

land_lhs_true:          ; preds = %entry
        %2 = load i32* @y               ; <i32> [#uses=1]
        %3 = icmp ne i32 %2, 0          ; <i1> [#uses=1]
        br i1 %3, label %ifthen, label %ifelse

ifthen:         ; preds = %land_lhs_true
        %call = call i32 (...)* @foo()          ; <i32> [#uses=0]
        br label %ifend

ifelse:         ; preds = %land_lhs_true, %entry
        %call1 = call i32 (...)* @bar()         ; <i32> [#uses=0]
        br label %ifend

ifend:          ; preds = %ifelse, %ifthen

Note the lack of a phi node.

This shrinks the -O0 .ll file for 176.gcc/expr.c from 43176 to 40267 lines.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59111 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agofix a crash analyzing constants in 176.gcc/expr.c with my next patch. It was
Chris Lattner [Wed, 12 Nov 2008 07:43:42 +0000 (07:43 +0000)]
fix a crash analyzing constants in 176.gcc/expr.c with my next patch. It was
crashing because we errors are ignored in subexpressions that are not evaluated,
but we still evaluate the result of parents.  This would cause an assertion
because the erroneous subexpr didn't have its result value set to the right type.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59110 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoTeach the aggressive constant folder to fold X && 0 -> 0 and X || 1 -> 1
Chris Lattner [Wed, 12 Nov 2008 07:04:29 +0000 (07:04 +0000)]
Teach the aggressive constant folder to fold X && 0 -> 0 and X || 1 -> 1

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59105 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoClean up some code to use isZero instead of calling getZExtValue.
Chris Lattner [Wed, 12 Nov 2008 04:54:14 +0000 (04:54 +0000)]
Clean up some code to use isZero instead of calling getZExtValue.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59103 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoFix testcase for 64-bit systems.
Sebastian Redl [Wed, 12 Nov 2008 00:18:32 +0000 (00:18 +0000)]
Fix testcase for 64-bit systems.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59099 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoUse createBasicBlock here too.
Daniel Dunbar [Wed, 12 Nov 2008 00:02:07 +0000 (00:02 +0000)]
Use createBasicBlock here too.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59095 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoDisable generation of basic block names in NDEBUG mode.
Daniel Dunbar [Wed, 12 Nov 2008 00:01:12 +0000 (00:01 +0000)]
Disable generation of basic block names in NDEBUG mode.

Revert to enabling generation of instruction names when not in NDEBUG
mode.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59094 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoRework IRgen invariant w.r.t. current insert point.
Daniel Dunbar [Tue, 11 Nov 2008 23:11:34 +0000 (23:11 +0000)]
Rework IRgen invariant w.r.t. current insert point.
 - EmitStmt is no longer required to finish with a current insertion
   point defined (i.e. it does not need to make dummy
   blocks). Instead, it can clear the insertion point in the builder
   which indicates that the current insertion point is unreachable.
 - CodeGenFunction provides HaveInsertPoint and EnsureInsertPoint
   which respectively test if there is an insert point and ensure an
   insertion point exists (by making a dummy block).
 - Clearly mark functions in CodeGenFunction which can be called with
   no insertion point defined. Currently this is a limited set, and
   EmitStmt simply EnsureInsertPoint()s before emitting subsequent IR.

Remove EmitDummyBlock, which is no longer needed. Clients who haven't
already cleared the insertion point (typically via EmitBranch) can do
so by hand.

Remove isDummyBlock, which has effectively been renamed to
HaveInsertPoint.

The main thrust of this change is that we no longer have create dummy
blocks just to destroy them a short time later in EmitBlock in the
common case that there is no unreachable code following something like
a goto.

Additionally, this means that we are not using the hokey condition in
isDummyBlock that a block without a name is a dummy block. Guess how
well that works when we never emit block names!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59089 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoChange EmitBranch to always clear the insert point to clarify irgen
Daniel Dunbar [Tue, 11 Nov 2008 22:06:59 +0000 (22:06 +0000)]
Change EmitBranch to always clear the insert point to clarify irgen
invariants.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59085 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoEmit debug region end in unified return block.
Daniel Dunbar [Tue, 11 Nov 2008 20:59:54 +0000 (20:59 +0000)]
Emit debug region end in unified return block.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59081 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoCodegen support for fastcall & stdcall CC.
Anton Korobeynikov [Tue, 11 Nov 2008 20:21:14 +0000 (20:21 +0000)]
Codegen support for fastcall & stdcall CC.
Patch by Ilya Okonsky!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59080 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoFlow-sensitive uninitialized values analysis:
Ted Kremenek [Tue, 11 Nov 2008 19:41:42 +0000 (19:41 +0000)]
Flow-sensitive uninitialized values analysis:
- Added support for ObjCForCollectionStmt
- Fixed bug where expression values would be always set to uninitialized when loops were involved

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59076 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoAccesses to a collection within a fast enumeration 'for' statement constitute a ...
Ted Kremenek [Tue, 11 Nov 2008 19:40:47 +0000 (19:40 +0000)]
Accesses to a collection within a fast enumeration 'for' statement constitute a 'use'.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59075 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoAdd fine-grain methods for control which bits are set/reset in ExprDeclBitVector.
Ted Kremenek [Tue, 11 Nov 2008 19:39:47 +0000 (19:39 +0000)]
Add fine-grain methods for control which bits are set/reset in ExprDeclBitVector.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59073 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoTry to not emit the dead side of ?: if the condition is a constant.
Chris Lattner [Tue, 11 Nov 2008 18:56:45 +0000 (18:56 +0000)]
Try to not emit the dead side of ?: if the condition is a constant.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59061 91177308-0d34-0410-b5e6-96231b3b80d8

16 years ago"a patch telling cmake to install clang headers in the target
Chris Lattner [Tue, 11 Nov 2008 18:39:10 +0000 (18:39 +0000)]
"a patch telling cmake to install clang headers in the target
install directory"

Patch by Lukasz Janyst!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59059 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoIntroduce a single AST node SizeOfAlignOfExpr for all sizeof and alignof expressions...
Sebastian Redl [Tue, 11 Nov 2008 17:56:53 +0000 (17:56 +0000)]
Introduce a single AST node SizeOfAlignOfExpr for all sizeof and alignof expressions, both of values and types.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59057 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoAdd transfer function support for ObjCForCollectionStmt to LiveVariables.
Ted Kremenek [Tue, 11 Nov 2008 17:42:10 +0000 (17:42 +0000)]
Add transfer function support for ObjCForCollectionStmt to LiveVariables.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59053 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoAdd CFG support for Objective-C 2.0 fast enumeration 'for' statement:
Ted Kremenek [Tue, 11 Nov 2008 17:10:00 +0000 (17:10 +0000)]
Add CFG support for Objective-C 2.0 fast enumeration 'for' statement:

http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Articles/chapter_7_section_2.html#//apple_ref/doc/uid/TP30001163-CH18-SW3

Need to modify GRExprEngine, LiveVariables, and UninitializedValues to understand this construct.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59049 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoImplement C++ 'typeid' parsing and sema.
Sebastian Redl [Tue, 11 Nov 2008 11:37:55 +0000 (11:37 +0000)]
Implement C++ 'typeid' parsing and sema.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59042 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoAdd CodeGenFunction::EmitBranch.
Daniel Dunbar [Tue, 11 Nov 2008 09:41:28 +0000 (09:41 +0000)]
Add CodeGenFunction::EmitBranch.
 - Emits an unconditional branch, with extra logic to avoid generating
   spurious branches out of dummy blocks.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59037 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoFix cmake build, patch from Jjgod Jiang.
Daniel Dunbar [Tue, 11 Nov 2008 08:29:24 +0000 (08:29 +0000)]
Fix cmake build, patch from Jjgod Jiang.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59036 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoshort circuit && and || when possible. This substantially reduces
Chris Lattner [Tue, 11 Nov 2008 07:41:27 +0000 (07:41 +0000)]
short circuit && and || when possible.  This substantially reduces
the size of the -O0 output on some cases.  For example, on expr.c from
176.gcc, it shrinks the .ll file from 43164 to 42835 lines, and removed
references to two external symbols.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59034 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoMake codegen smart enough to not emit the dead side of an if whose
Chris Lattner [Tue, 11 Nov 2008 07:24:28 +0000 (07:24 +0000)]
Make codegen smart enough to not emit the dead side of an if whose
condition is a constant.  This shrinks -O0 codegen by quite a bit
on some cases.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59033 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agoimplement debug info for typeof()
Chris Lattner [Tue, 11 Nov 2008 07:01:36 +0000 (07:01 +0000)]
implement debug info for typeof()

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59032 91177308-0d34-0410-b5e6-96231b3b80d8

16 years agomerge some testcases together.
Chris Lattner [Tue, 11 Nov 2008 06:42:53 +0000 (06:42 +0000)]
merge some testcases together.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59031 91177308-0d34-0410-b5e6-96231b3b80d8