|  | // REQUIRES: sparc-registered-target | 
|  | // RUN: %clang_cc1 -triple sparc-unknown-unknown -emit-llvm %s -o - | FileCheck %s | 
|  | // RUN: %clang_cc1 -triple sparc64-unknown-unknown -emit-llvm %s -o - | FileCheck -check-prefix CHECK-V9 %s | 
|  |  | 
|  | void test_eh_return_data_regno(void) | 
|  | { | 
|  | volatile int res; | 
|  | res = __builtin_eh_return_data_regno(0);  // CHECK,CHECKV9: store volatile i32 24 | 
|  | res = __builtin_eh_return_data_regno(1);  // CHECK,CHECKV9: store volatile i32 25 | 
|  | } | 
|  |  | 
|  | void *test_extract_return_address(void) | 
|  | { | 
|  | // CHECK,CHECKV9: getelementptr i8, ptr %0, i32 8 | 
|  | return __builtin_extract_return_addr(__builtin_return_address(0)); | 
|  | } | 
|  |  | 
|  | struct s { | 
|  | void *p; | 
|  | }; | 
|  |  | 
|  | struct s test_extract_struct_return_address(void) | 
|  | { | 
|  | struct s s; | 
|  | // CHECK:    getelementptr i8, ptr %0, i32 12 | 
|  | // CHECK-V9: getelementptr i8, ptr %0, i32 8 | 
|  | s.p = __builtin_extract_return_addr(__builtin_return_address(0)); | 
|  | return s; | 
|  | } |