diff options
Diffstat (limited to 'lib/CodeGen')
| -rw-r--r-- | lib/CodeGen/CGBuiltin.cpp | 6 | ||||
| -rw-r--r-- | lib/CodeGen/ObjectFilePCHContainerOperations.cpp | 5 | 
2 files changed, 10 insertions, 1 deletions
diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp index ba54f8342f1b5..35ae114c4f25f 100644 --- a/lib/CodeGen/CGBuiltin.cpp +++ b/lib/CodeGen/CGBuiltin.cpp @@ -915,7 +915,11 @@ EmitCheckedMixedSignMultiply(CodeGenFunction &CGF, const clang::Expr *Op1,        Overflow = CGF.Builder.CreateOr(Overflow, TruncOverflow);      } -    Result = CGF.Builder.CreateTrunc(UnsignedResult, ResTy); +    // Negate the product if it would be negative in infinite precision. +    Result = CGF.Builder.CreateSelect( +        IsNegative, CGF.Builder.CreateNeg(UnsignedResult), UnsignedResult); + +    Result = CGF.Builder.CreateTrunc(Result, ResTy);    }    assert(Overflow && Result && "Missing overflow or result"); diff --git a/lib/CodeGen/ObjectFilePCHContainerOperations.cpp b/lib/CodeGen/ObjectFilePCHContainerOperations.cpp index d0760b9cc2a60..0fe9f5da07c83 100644 --- a/lib/CodeGen/ObjectFilePCHContainerOperations.cpp +++ b/lib/CodeGen/ObjectFilePCHContainerOperations.cpp @@ -229,6 +229,11 @@ public:        Builder->getModuleDebugInfo()->completeRequiredType(RD);    } +  void HandleImplicitImportDecl(ImportDecl *D) override { +    if (!D->getImportedOwningModule()) +      Builder->getModuleDebugInfo()->EmitImportDecl(*D); +  } +    /// Emit a container holding the serialized AST.    void HandleTranslationUnit(ASTContext &Ctx) override {      assert(M && VMContext && Builder);  | 
