summaryrefslogtreecommitdiffstats
path: root/clang/Sema/Sema.h
Commit message (Collapse)AuthorAgeFilesLines
...
* Rename Sema::isConstantArrayType -> VerifyConstantArrayType. Make sure toChris Lattner2007-06-051-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | check canonical types in a few places. Tighten up VerifyConstantArrayType to diagnose more errors, now that we can evaluate i-c-e's. Add some fixmes about poor diagnostics. We now correctly typecheck this example: void s(void) { typedef int a[(int) +1.0]; static a b; // invalid, static VLA static int c[(int) +1.0]; // invalid, static VLA } void t(void) { typedef int a[(int)1.0]; static a b; // valid, constant size } void u() { static int X[-1]; static int Y[0]; } producing: static-vla.c:3:12: error: variable length array declared outside of any function static a b; // invalid, static VLA ^ static-vla.c:5:14: error: variable length array declared outside of any function static int c[(int) +1.0]; // invalid, static VLA ^ ~~~~~~~~~~ static-vla.c:15:14: error: array size is negative static int X[-1]; ^ ~~ static-vla.c:16:14: warning: zero size arrays are an extension static int Y[0]; ^ ~ llvm-svn: 39587
* Bug #:Steve Naroff2007-06-041-2/+13
| | | | | | | | | | | | | | | | | | | | | | | Submitted by: Reviewed by: Fixed an "impurity" in the typechecking code (to more closely model the C99 spec)... - Added function Sema::DefaultFunctionArrayConversion(). This is called by UsualUnaryConversions(). It is also called from several contexts that don't call for integer promotions (logical negation for expressions, and while/if/do/for conditions in statements). It is also used in UsualAssignmentConversions (which is cleaner than the check I was using before). - Changed the name from UsualUnaryConversion->UsualUnaryConversions. - Added comments to the header. Since several contexts don't call for integer promotions, llvm-svn: 39581
* Bug #:Steve Naroff2007-06-011-2/+2
| | | | | | | | | | Submitted by: Reviewed by: After speaking with Chris, decided not to have GCC "attributes" inherit from Decl. This will enable us to grow the attribute hierarchy over time without effecting Decls. llvm-svn: 39543
* Bug #:Steve Naroff2007-06-011-0/+10
| | | | | | | | | | | | | | | Submitted by: Reviewed by: Implement support for GCC __attribute__. - Implement "TODO" in Parser::ParseAttributes. Changed the return type from void to Parser::DeclTy. Changed all call sites to accept the return value. - Added Action::ParseAttribute and Sema::ParseAttribute to return an appropriate AST node. Added new node AttributeDecl to Decl.h. Still to do...hook up to the Decl... llvm-svn: 39539
* Bug #:Steve Naroff2007-05-291-3/+1
| | | | | | | | | | | | | | | | | Submitted by: Reviewed by: Implement some FIXME's that stand in the way of fully typechecking "for" statements. This involved: - Adding a DeclStmt AST node (with statement visitor). The DeclStmt printer is preliminary. - Added a ParseDeclStmt action, called from Parser::ParseForStatement() and Parser::ParseStatementOrDeclaration(). DID NOT add to Parser::ParseIdentifierStatement()...probably could have, however didn't really understand the context of this rule (will speak with Chris). - Removed ParseExprStmt (and it's clients)...it was vestigial. llvm-svn: 39518
* Bug #:Steve Naroff2007-05-291-0/+1
| | | | | | | | | | | Submitted by: Reviewed by: - Finished Sema::ParseReturnStmt(). Still need to tweak ranges. - Tweaked location for function arguments (they now point at the expression directly, no parens or commas). - Added InvalidOperands helper...was sick of looking at the same 3 lines in ~9 Check functions. - Added a few diags and moved a group of statement diags to the proper comment/category. llvm-svn: 39517
* implement full sema support for the GCC address-of-label extension.Chris Lattner2007-05-281-0/+4
| | | | llvm-svn: 39510
* Change GotoStmt's to have a pointer to the LabelStmt instead of a pointer toChris Lattner2007-05-281-0/+7
| | | | | | | | | | | | | | | | | the label identifier. Handle fwd references etc. This allows us to detect uses of undefined labels and label redefinitions, such as: t.c:2:12: error: redefinition of label 'abc' abc: ; abc: ^ t.c:2:3: error: previous definition is here abc: ; abc: ^ t.c:12:12: error: use of undeclared label 'hijl' goto hijl; ^ llvm-svn: 39509
* add action for null stmt, create ast node.Chris Lattner2007-05-281-0/+1
| | | | llvm-svn: 39506
* Bug #:Steve Naroff2007-05-271-1/+1
| | | | | | | | | | | | | | | | Submitted by: Reviewed by: - Added type checking to Sema::ParseReturnStmt (still under construction). - Improved Expr::isLvalue() and Expr::isModifiableLvalue() to return more info. Used the info in Sema::CheckAssignmentOperands() to produce more descriptive diagnostics. Added FIXME to other clients of isLvalue()/etc. - Added a SourceLocation slot to MemberExpr...changed the implementation of getSourceRange(). - Added getResultType() helper to FunctionDecl. - Changed many Diag calls to use the SourceRange support (now that it's a big hit...we better milk it:-). llvm-svn: 39501
* Bug #:Steve Naroff2007-05-181-11/+23
| | | | | | | | | | | | | | | | | | | | Submitted by: Reviewed by: An important, but truly mind numbing change. Added 6 flavors of Sema::Diag() that take 1 or two SourceRanges. Considered adding 3 flavors (using default args), however this wasn't as clear. Removed 2 flavors of Sema::Diag() that took LexerToken's (they weren't used). Changed all the typechecking routines to pass the appropriate range(s). Hacked the diagnostic machinery and driver to acccommodate the new data. What's left? A FIXME in clang.c to use the ranges. Chris offered to do the honors:-) Which includes taking us to the end of an identifier:-) llvm-svn: 39456
* Bug #:Steve Naroff2007-05-181-2/+1
| | | | | | | | | Submitted by: Reviewed by: More tweaks to error diagnostics (adding types, using the new hooks on expr). Still more to do... llvm-svn: 39455
* Remove the Sema::Diag helper that takes a type. Convert clients to useChris Lattner2007-05-161-1/+0
| | | | | | the version that takes a string. llvm-svn: 39450
* Add helper to emit two strings for a diagnostic.Chris Lattner2007-05-161-4/+6
| | | | llvm-svn: 39448
* Bug #:Steve Naroff2007-05-151-0/+2
| | | | | | | | | | | | Submitted by: Reviewed by: - Unified isConstantExpr/isIntegerConstantExpr by creating a private function named isConstantExpr (that takes a bool to indicate the flavor). isConstantExpr and isIntegerConstantExpr are now inline wrapper/helper functions. - Fixed bug in expression based sizeof (it needed to make sure the type is constant). - Added Sema::CheckConditionalOperands() stub. Will add contraints in my next commit. llvm-svn: 39446
* Bug #:Steve Naroff2007-05-151-0/+2
| | | | | | | | | | | | | Submitted by: Reviewed by: - Completed Expr::isConstantExpr() and Expr::isIntegerConstantExpr(). - Completed Sema::ParseUnaryOp(), it lacked support for sizeof/alignof. - Added Sema::CheckSizeOfAlignOfOperand(), used by ParseUnaryOp/ParseSizeOfAlignOfTypeExpr. - Fixed a couple bugs in CheckRelationalOperands/CheckEqualityOperands (make sure extensions aren't treated as errors). - Changed a bunch of predicates (in BinaryOperator/UnaryOperator) to member functions (the static members weren't being used). - Added UnaryOperator::isIncrementDecrementOp/isSizeOfAlignOfOp. llvm-svn: 39445
* Bug #:Steve Naroff2007-05-131-3/+0
| | | | | | | | | | | Submitted by: Reviewed by: Two bug fixes to CheckIncrementDecrementOperand: - removed "constantOne" usage and simply use Context.IntTy. - fix the last constraint check...the lvalue test needs to be on the expression, not the type! (duh). llvm-svn: 39442
* Bug #:Steve Naroff2007-05-111-2/+3
| | | | | | | | | | | | | | Submitted by: Reviewed by: This check-in should finally "nail" complex pointer assignments (involving qualifiers, etc.). - Replaced pointerTypeQualifiersAlign() with CheckPointerTypesForAssignment() This also simplified UsualAssignmentConversions(). - Fixed Type::pointerTypesAreCompatible() and Type::typesAreCompatible() to closely reflect the spec. They were (unfortunately) compensating for some of the missing logic in the assignment checking code. llvm-svn: 39440
* Bug #:Steve Naroff2007-05-111-2/+5
| | | | | | | | | | | | | | | | Submitted by: Reviewed by: - Enhanced UsualAssignmentConversions() to properly handle type qualifiers on pointers. - Added helper function Sema::pointerTypeQualifiersAlign(). - Noticed several errors improperly named "ext_" (fixed). - Combined structureTypesAreCompatible/unionTypesAreCompatible into tagTypesAreCompatible. - Renamed Type::getCanonicalType() to Type::getCanonicalTypeInternal(). It will never confuse/bite me again:-) - Added a couple extension diagnostics for discarded type qualifiers. llvm-svn: 39439
* Bug #:Steve Naroff2007-05-081-6/+8
| | | | | | | | | | | | | | | | | | | Submitted by: Reviewed by: - Added Sema::isConstantArrayType() and Type::isConstantSizeType(). - Implemented type checking for "variably modified" types (i.e. VLA's). Added checking for file scope variables, static variables, member variables, and typedefs. - Changed Expr::isIntegerConstantExpr() to non-virtual implementation. Fixed bug with sizeof/alignof. Looking at the diff, I may need to add a check to exclude alignof. - Added Expr::isConstantExpr()...non-virtual, like above. - Added typechecking for case statements (found a bug with actions/parsing...). - Added several diagnostics. - Fixed several comments. Started implemented constant expression checking for arrays. llvm-svn: 39437
* Bug #:Steve Naroff2007-05-071-8/+13
| | | | | | | | | | | | | | | | Submitted by: Reviewed by: - Unified CheckSimpleAssignmentOperands/CheckCompoundAssignmentOperands into one function, named CheckAssignmentOperands. One less function to maintain. - Converted the unary check functions (ParseUnaryOp and friends) to have the same API as their binary counterparts. - Implemented CheckIndirectionOperand (was stubbed). While testing, noticed that Expr::isModifiableLvalue was incomplete (fixed and referenced draft). - Added constantOne instance variable to Sema. - Removed CheckArithmeticOperand (the code was so simple that it is now part of ParseUnaryOp). The name wasn't great anyway:-) llvm-svn: 39435
* Bug #:Steve Naroff2007-05-041-20/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Submitted by: Reviewed by: Implemented type checking for compound assignments (*=, /=, etc.). This encouraged me to do a fairly dramatic refactoring of the Check* functions. (since I wanted to reuse the existing work, rather than duplicate the logic). For example, I changed all the Check* functions to return a QualType (instead of returning an Expr). This had a very nice side benefit...there is now only one instantiation point for BinaryOperator()! (A property I've always wanted...separating type checking from AST building is *much* nicer). Another change is to remove "code" from all the Check* functions (this allowed me to remove the weird comment about enums/unsigned:-). Removing the code forced me to add a few functions, however. For example, < ExprResult CheckAdditiveOperands( // C99 6.5.6 < Expr *lex, Expr *rex, SourceLocation OpLoc, unsigned OpCode); > inline QualType CheckAdditionOperands( // C99 6.5.6 > Expr *lex, Expr *rex, SourceLocation OpLoc); > inline QualType CheckSubtractionOperands( // C99 6.5.6 > Expr *lex, Expr *rex, SourceLocation OpLoc); While this isn't as terse, it more closely reflects the differences in the typechecking logic. For example, I disliked having to check the code again in CheckMultiplicativeOperands/CheckAdditiveOperands. Created the following helper functions: - Expr::isNullPointerConstant(). - SemaExpr.cpp: static inline BinaryOperator::Opcode ConvertTokenKindToBinaryOpcode(). This was purely asethetic, since ParseBinOp() is now larger. I didn't feel like looking at 2 huge switch statements. ParseBinOp() now avoids using any of the BinaryOperator predicates (since I switched to a switch statement:-) Only one regret (minor). I couldn't figure out how to avoid having two assign functions, CheckCompoundAssignmentOperands, CheckSimpleAssignmentOperands. Conceptually, the two functions make sense. Unfortunately, their implementation contains a lot of duplication (thought they aren't that be in the first place). llvm-svn: 39433
* Bug #:Steve Naroff2007-05-031-2/+9
| | | | | | | | | | | | | | | Submitted by: Reviewed by: Work on finishing up typechecking for simple assignments (=) and function calls. Here is an overview: - implemented type checking for function calls (in Sema::ParseCallExpr). - refactored UsualAssignmentConversions to return the result of the conversion. This enum will allow all clients to emit different diagnostics based on context. - fixed bug in Expr::isLvalue()...it wasn't handling arrays properly. Also changed the name to isModifiableLvalue, which is consistent with the function on QualType. - Added 6 diagnostics (3 errors, 3 extensions). llvm-svn: 39432
* Bug #:Steve Naroff2007-05-021-0/+4
| | | | | | | | | | | | Submitted by: Reviewed by: Refactored assignment conversion code. - added Sema::UsualAssignmentConversions(). It will service simple assignment, argument passing, initialization, and return. - simplified Sema::CheckAssignmentOperands() using the previous function. llvm-svn: 39429
* Bug #:Steve Naroff2007-04-261-0/+5
| | | | | | | | | | | | | | Submitted by: Reviewed by: Misc. changes driven by getting "carbon.h" to compile... - Added ParseCharacterConstant() hook to Action, Sema, etc. - Added CheckAssignmentOperands() & CheckCommaOperands() to Sema. - Added CharacterLiteral AST node. - Fixed CallExpr instantiation - install the correct type. - Install a bunch of temp types and annotate with FIXME's. llvm-svn: 39416
* Bug #:Steve Naroff2007-04-251-4/+4
| | | | | | | | | | | | | | Submitted by: Reviewed by: A bunch of "small" changes... - Fixed a bug in ConvertFloatingRankToComplexType() that rendered it useless. ASTContext was being copied by default (as the result of declaring the argument incorrectly). Chris gave me the magic potion to disallow this in ASTContext. - Removed a tab:-) - Added some much needed comments to the float/complex promotion madness. - Improved some aesthetics (based on code review w/Chris). llvm-svn: 39414
* Bug #:Steve Naroff2007-04-241-18/+27
| | | | | | | | | | | | | | | | | Submitted by: Reviewed by: Lot's of changes related to type checking binary expressions. - Changed the name/proto of ImplicitConversion. It is now named UsualUnaryConversion - it takes a type and returns a type. This allowed me to remove the explicit node creation for array/function->pointer conversions. - Added function UsualArithmeticConversions(). - Changed all the "Check" functions for binary ops. They use the new "Usual" functions above. - new predicates on Type, isSignedIntegerType()/isUnsignedIntegerType(). - moved getDecl() out of the Sema class. It is now a static helper function in SemaExpr.cpp. It was also renamed getPrimaryDeclaration(). - Added CheckArithmeticOperand() for consistency with the other unary "Check" functions. Should finish up the binary expressions tomorrow...with a small number of "FIXME's" llvm-svn: 39411
* Bug #:Steve Naroff2007-04-201-1/+3
| | | | | | | | | | Submitted by: Reviewed by: Start hacking on binary ops... Important bug fix...was ignoring the return value from ImplicitConversion. This didn't bother the type checking logic, however the AST was malformed. llvm-svn: 39410
* Bug #:Steve Naroff2007-04-191-2/+9
| | | | | | | | | | | | | | Submitted by: Reviewed by: Continue working on type checking for unary operators. Added: - Two 3 private functions to Sema: CheckAddressOfOperand(), CheckIndirectionOperand(), and getDecl(). - Added Expr::isLvalue() - it was needed for CheckAddressOfOperand(). It will also be needed for ++/-- and the assignment operators. - Added a couple diagnostics for invalid lvalues (for & of). llvm-svn: 39408
* Bug #:Steve Naroff2007-04-051-3/+3
| | | | | | | | | | | | Submitted by: Reviewed by: -Changed the name of TypeRef to QualType. Many diffs. -Changed the QualType constructor to require Quals be passed. This makes the code a bit more verbose, however will make the code easier to work on. Given the complexity of types, this should help spot bogosities. -Changed the Expr constructor to require a QualType. Same motivation. llvm-svn: 39395
* Bug #:Steve Naroff2007-04-021-2/+2
| | | | | | | | | | Submitted by: Reviewed by: Avoid including "clang/AST/Expr.h" in Sema.h just to access UnaryOperator::Opcode. While the inclusion wasn't objectionable in terms of layering, it is nice to keep the inclusions as modest as possible. llvm-svn: 39375
* Bug #:Steve Naroff2007-03-301-8/+13
| | | | | | | | | | | | | | Submitted by: Reviewed by: Incorporate feedback from Chris (on the last check-in). - added a shared hook for pre/post ++/-- CheckIncrementDecrementOperand(). - handle invalid arithmetic on incomplete types (void *, struct foo *, where the body isn't in scope). Added a diagnostic for this case. - added some comments and C99 annotations. - Sema.h now includes Expr.h. I'd prefer not to, however it doesn't break any layering. llvm-svn: 39370
* Bug #:Steve Naroff2007-03-301-0/+1
| | | | | | | | | | | | | | | | | | Submitted by: Reviewed by: Implement ++/-- typechecking for pre/post unary expressions. This includes: - added isLvalue, isModifiableLvalue (on TypeRef, Type, and RecordType). - added isRealType, isRealFloatingType, isComplexType. - hacked Diag to take a TypeRef (I was sick of writing the 2 line "setup":-) In addition, this will likely lead to less bugs...I already had written code that was doing a getAsString on "Type" (which is wrong...since it doesn't include any qualifiers). - Changed UnaryOperator to take a TypeRef...pass it the right stuff. - Removed redundant ternary expressions in several predicates. - A couple diagnostics. llvm-svn: 39369
* Bug #:Steve Naroff2007-03-231-2/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | Submitted by: Reviewed by: Type Checking...round 2. This checkin "breaks" parsing carbon.h. I imagine that this will be true for the next week or so. Nevertheless, this round of changes includes the following: - Hacked various Expr classes to pass the appropriate TypeRef. Still have a few more classes to touch. - Implement type checking for ParseArraySubscriptExpr and ParseMemberReferenceExpr. - Added a debug hook to derive the class name for Stmt/Expr nodes. Currently a linear search...could easily optimize if important. - Changed the name of TaggedType->TagType. Now we have TagType and TagDecl (which are easier to remember). - Fixed a bug in StringLiteral conversion I did a couple weeks ago. hadError was not initialized (oops). - changed Sema::Diag to return true. This streamlines the type checking code considerably. - Added many diagnositics. This should be it! llvm-svn: 39361
* Bug #:Steve Naroff2007-03-211-1/+14
| | | | | | | | | | | | | Submitted by: Reviewed by: Implement type checking. First round of changes are: - Added predicates to Type. - Added predicates to BinExpr. - Added Check hooks that model the categories for Binary ops. - Added TypeRef to Expr. Will lazily eval subclasses... - Misc bug fixes/cleanups. llvm-svn: 39360
* Bug #:Steve Naroff2007-03-161-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | Submitted by: Reviewed by: carbon.h looking good! Only 1 warning left...no parse errors! This fixes 3 bugs... - A couple tricky bugs with type canonicalization. Nested typedef's weren't being handled properly. For example, the following didn't work: typdef int __darwin_pid_t; typedef __darwin_pid_t pid_t; int getpgid(pid_t); int getpgid(int); - The storage class wasn't being preserved. As a result, Sema was complaining about the following: extern char *foo; char *foo; - various built-ins weren't registered...resulting in spurious warnings. llvm-svn: 39357
* Bug #:Steve Naroff2007-03-141-15/+16
| | | | | | | | | | | | | | | Submitted by: Reviewed by: This is a "small" checkin. #include_next wasn't working properly on Leopard. This is because the driver has some hard coded paths that don't work on Leopard. The real fix is to derive them, however I don't think we need to solve this now. At this point, anyone working on clang should be able to use Leopard. This fix removed 11 errors processing "carbon.h". The bug that bubbles up to the top is in MergeFunctionDecl(). As part of digging into this part of Sema, I rearranged some methods (and changed the visibility). llvm-svn: 39356
* Bug #:Steve Naroff2007-03-061-2/+4
| | | | | | | | | | | | | | | Submitted by: Reviewed by: More code to parse numeric constants. This checkin includes: - Feedback from Chris. - Support for parsing floating point constants. - Moved the code to "Sema". Changed API in Action. - More/better error diagnostics. At this point, the parsing support should be largely complete. Next step is to work on filling in sensible values (in IntegerLiteral/FloatLiteral). llvm-svn: 39349
* Go back to having the clang driver create ASTContext explicitly, passingSteve Naroff2007-02-281-3/+1
| | | | | | | | | it to Sema/ASTStreamer (separating the lifetime of ASTContext from the lifetime of Sema). One day it might be useful to consider creating a context object implicitly if one isn't provided (using default arguments in Sema's constructor). At this point, adding this convenience isn't necessary. llvm-svn: 39346
* Make Sema's use of the preprocessor explicit (rather than assumeSteve Naroff2007-02-281-3/+5
| | | | | | | | | | | | | | | | the prerocessor will be available via ASTContext). - Removed the public data member "PP" in ASTContext. - Changed ASTContext's contructor to take TargetInfo/IdentifierTable explicitly. - Implicitly create an ASTContext in Sema's constructor. This simplifies the clients job (and makes ASTContext more private). --As a side effect, added a "PrintStats" hook to Sema. To support this level of encapsulation, ASTContext is always dynamically allocated (by Sema). Previously, ASTContext was being allocated on the stack. I don't believe this should be a performance issue (since ASTContext is fairly course grain and tied to the lifetime of Sema currently). llvm-svn: 39345
* Batch search/replace snafu (inadvertantly changed ↵Steve Naroff2007-02-211-3/+3
| | | | | | | | | IntegerConstant->StringLiteral). clang still compiled/linked/ran properly...simply a confusing name regression. From now on I'll make sure I run "cvs diff" before committing any changes! llvm-svn: 39342
* rename IntegerConstant->IntegerLiteralSteve Naroff2007-02-211-2/+2
| | | | | | | rename FloatingConstant->FloatingLiteral rename StringExpr->StringLiteral llvm-svn: 39341
* Removed tabs.Bill Wendling2007-02-131-1/+1
| | | | llvm-svn: 39340
* C++: Added support for bool types.Bill Wendling2007-02-131-0/+4
| | | | llvm-svn: 39338
* Add support for target-independent builtin functions (like __builtin_abs),Chris Lattner2007-01-281-1/+4
| | | | | | | | | | | | | | | | | | whose decl objects are lazily created the first time they are referenced. Builtin functions are described by the clang/AST/Builtins.def file, which makes it easy to add new ones. This is missing two important pieces: 1. Support for the rest of the gcc builtins. 2. Support for target-specific builtins (e.g. __builtin_ia32_emms). Just adding this builtins reduces the number of implicit function definitions by 6, reducing the # diagnostics from 550 to 544 when parsing carbon.h. I need to add all the i386-specific ones to eliminate several hundred more. ugh. llvm-svn: 39327
* make LookupScopedDecl a method instead of a static functionChris Lattner2007-01-281-0/+1
| | | | llvm-svn: 39326
* Refactor conflict handling code, no functionality change.Chris Lattner2007-01-271-3/+7
| | | | llvm-svn: 39322
* Create EnumConstantDecl objects for each enum value, and fill them intoChris Lattner2007-01-251-0/+5
| | | | | | | the EnumDecl when the enum type is complete. This allows us to detect redefinitions of enums. llvm-svn: 39300
* create field decl objects for the members of a struct/union. Diagnose codeChris Lattner2007-01-231-1/+5
| | | | | | | | | | | | | | | like: struct S { struct S {} X; }; with: t.c:2:19: error: nested redefinition of 'struct' struct S { struct S {} X; }; ^ t.c:2:1: error: previous definition is here struct S { struct S {} X; }; ^ llvm-svn: 39292
* simplify structure body parsing code. Reorganize how tags are processed.Chris Lattner2007-01-231-1/+1
| | | | | | | | | | | | | | Diagnose redefintion of tag types, e.g.: t.c:7:8: error: redefinition of 'blah' struct blah {}; ^ t.c:1:8: error: previous definition is here struct blah { ^ 2 diagnostics generated. llvm-svn: 39286
OpenPOWER on IntegriCloud