| // RUN: %clang_builtins %s %librt -o %t && %run %t | 
 | // REQUIRES: librt_has_addvdi3 | 
 |  | 
 | #include "int_lib.h" | 
 | #include <stdio.h> | 
 |  | 
 | // Returns: a + b | 
 |  | 
 | // Effects: aborts if a + b overflows | 
 |  | 
 | COMPILER_RT_ABI di_int __addvdi3(di_int a, di_int b); | 
 |  | 
 | int test__addvdi3(di_int a, di_int b) | 
 | { | 
 |     di_int x = __addvdi3(a, b); | 
 |     di_int expected = a + b; | 
 |     if (x != expected) | 
 |         printf("error in test__addvdi3(0x%llX, 0x%llX) = %lld, expected %lld\n", | 
 |                 a, b, x, expected); | 
 |     return x != expected; | 
 | } | 
 |  | 
 | int main() | 
 | { | 
 | //     test__addvdi3(0x8000000000000000LL, -1);  // should abort | 
 | //     test__addvdi3(-1, 0x8000000000000000LL);  // should abort | 
 | //     test__addvdi3(1, 0x7FFFFFFFFFFFFFFFLL);  // should abort | 
 | //     test__addvdi3(0x7FFFFFFFFFFFFFFFLL, 1);  // should abort | 
 |  | 
 |     if (test__addvdi3(0x8000000000000000LL, 1)) | 
 |         return 1; | 
 |     if (test__addvdi3(1, 0x8000000000000000LL)) | 
 |         return 1; | 
 |     if (test__addvdi3(0x8000000000000000LL, 0)) | 
 |         return 1; | 
 |     if (test__addvdi3(0, 0x8000000000000000LL)) | 
 |         return 1; | 
 |     if (test__addvdi3(0x7FFFFFFFFFFFFFFLL, -1)) | 
 |         return 1; | 
 |     if (test__addvdi3(-1, 0x7FFFFFFFFFFFFFFLL)) | 
 |         return 1; | 
 |     if (test__addvdi3(0x7FFFFFFFFFFFFFFFLL, 0)) | 
 |         return 1; | 
 |     if (test__addvdi3(0, 0x7FFFFFFFFFFFFFFFLL)) | 
 |         return 1; | 
 |  | 
 |     return 0; | 
 | } |