@@ -25,7 +25,6 @@ use libc::{c_uint, c_int, size_t, c_char};
25
25
use libc:: { c_ulonglong, c_void} ;
26
26
27
27
use std:: marker:: PhantomData ;
28
- use std:: ptr:: NonNull ;
29
28
30
29
use super :: RustString ;
31
30
@@ -383,6 +382,7 @@ pub enum ThreadLocalMode {
383
382
}
384
383
385
384
extern { type Opaque ; }
385
+ #[ repr( C ) ]
386
386
struct InvariantOpaque < ' a > {
387
387
_marker : PhantomData < & ' a mut & ' a ( ) > ,
388
388
_opaque : Opaque ,
@@ -397,22 +397,27 @@ extern { pub type Metadata; }
397
397
extern { pub type BasicBlock ; }
398
398
extern { pub type Builder ; }
399
399
extern { pub type MemoryBuffer ; }
400
+ #[ repr( C ) ]
400
401
pub struct PassManager < ' a > ( InvariantOpaque < ' a > ) ;
401
402
extern { pub type PassManagerBuilder ; }
402
403
extern { pub type ObjectFile ; }
404
+ #[ repr( C ) ]
403
405
pub struct SectionIterator < ' a > ( InvariantOpaque < ' a > ) ;
404
406
extern { pub type Pass ; }
405
407
extern { pub type TargetMachine ; }
406
408
extern { pub type Archive ; }
409
+ #[ repr( C ) ]
407
410
pub struct ArchiveIterator < ' a > ( InvariantOpaque < ' a > ) ;
408
- extern { pub type ArchiveChild ; }
409
- pub type ArchiveChildRef = * mut ArchiveChild ;
411
+ # [ repr ( C ) ]
412
+ pub struct ArchiveChild < ' a > ( InvariantOpaque < ' a > ) ;
410
413
extern { pub type Twine ; }
411
414
extern { pub type DiagnosticInfo ; }
412
415
extern { pub type SMDiagnostic ; }
413
416
extern { pub type RustArchiveMember ; }
414
417
pub type RustArchiveMemberRef = * mut RustArchiveMember ;
418
+ #[ repr( C ) ]
415
419
pub struct OperandBundleDef < ' a > ( InvariantOpaque < ' a > ) ;
420
+ #[ repr( C ) ]
416
421
pub struct Linker < ' a > ( InvariantOpaque < ' a > ) ;
417
422
418
423
pub type DiagnosticHandler = unsafe extern "C" fn ( & DiagnosticInfo , * mut c_void ) ;
@@ -474,7 +479,6 @@ pub mod debuginfo {
474
479
475
480
extern { pub type ModuleBuffer ; }
476
481
477
- #[ allow( improper_ctypes) ] // TODO remove this (use for NonNull)
478
482
extern "C" {
479
483
// Create and destroy contexts.
480
484
pub fn LLVMRustContextCreate ( shouldDiscardNames : bool ) -> & ' static mut Context ;
@@ -1403,10 +1407,15 @@ extern "C" {
1403
1407
-> & ' a Value ;
1404
1408
pub fn LLVMRustDIBuilderCreateOpDeref ( ) -> i64 ;
1405
1409
pub fn LLVMRustDIBuilderCreateOpPlusUconst ( ) -> i64 ;
1410
+ }
1406
1411
1412
+ #[ allow( improper_ctypes) ] // FIXME(#52456) needed for RustString.
1413
+ extern "C" {
1407
1414
pub fn LLVMRustWriteTypeToString ( Type : & Type , s : & RustString ) ;
1408
1415
pub fn LLVMRustWriteValueToString ( value_ref : & Value , s : & RustString ) ;
1416
+ }
1409
1417
1418
+ extern "C" {
1410
1419
pub fn LLVMIsAConstantInt ( value_ref : & Value ) -> Option < & Value > ;
1411
1420
pub fn LLVMIsAConstantFP ( value_ref : & Value ) -> Option < & Value > ;
1412
1421
@@ -1471,42 +1480,64 @@ extern "C" {
1471
1480
1472
1481
pub fn LLVMRustOpenArchive ( path : * const c_char ) -> Option < & ' static mut Archive > ;
1473
1482
pub fn LLVMRustArchiveIteratorNew ( AR : & ' a Archive ) -> & ' a mut ArchiveIterator < ' a > ;
1474
- pub fn LLVMRustArchiveIteratorNext ( AIR : & ArchiveIterator ) -> ArchiveChildRef ;
1475
- pub fn LLVMRustArchiveChildName ( ACR : ArchiveChildRef , size : & mut size_t ) -> * const c_char ;
1476
- pub fn LLVMRustArchiveChildData ( ACR : ArchiveChildRef , size : & mut size_t ) -> * const c_char ;
1477
- pub fn LLVMRustArchiveChildFree ( ACR : ArchiveChildRef ) ;
1483
+ pub fn LLVMRustArchiveIteratorNext ( AIR : & ArchiveIterator < ' a > ) -> Option < & ' a mut ArchiveChild < ' a > > ;
1484
+ pub fn LLVMRustArchiveChildName ( ACR : & ArchiveChild , size : & mut size_t ) -> * const c_char ;
1485
+ pub fn LLVMRustArchiveChildData ( ACR : & ArchiveChild , size : & mut size_t ) -> * const c_char ;
1486
+ pub fn LLVMRustArchiveChildFree ( ACR : & ' a mut ArchiveChild < ' a > ) ;
1478
1487
pub fn LLVMRustArchiveIteratorFree ( AIR : & ' a mut ArchiveIterator < ' a > ) ;
1479
1488
pub fn LLVMRustDestroyArchive ( AR : & ' static mut Archive ) ;
1480
1489
1481
1490
pub fn LLVMRustGetSectionName ( SI : & SectionIterator , data : & mut * const c_char ) -> size_t ;
1491
+ }
1482
1492
1493
+ #[ allow( improper_ctypes) ] // FIXME(#52456) needed for RustString.
1494
+ extern "C" {
1483
1495
pub fn LLVMRustWriteTwineToString ( T : & Twine , s : & RustString ) ;
1496
+ }
1484
1497
1498
+ extern "C" {
1485
1499
pub fn LLVMContextSetDiagnosticHandler ( C : & Context ,
1486
1500
Handler : DiagnosticHandler ,
1487
1501
DiagnosticContext : * mut c_void ) ;
1502
+ }
1488
1503
1504
+ #[ allow( improper_ctypes) ] // FIXME(#52456) needed for RustString.
1505
+ extern "C" {
1489
1506
pub fn LLVMRustUnpackOptimizationDiagnostic ( DI : & ' a DiagnosticInfo ,
1490
1507
pass_name_out : & RustString ,
1491
1508
function_out : & mut Option < & ' a Value > ,
1492
1509
loc_line_out : & mut c_uint ,
1493
1510
loc_column_out : & mut c_uint ,
1494
1511
loc_filename_out : & RustString ,
1495
1512
message_out : & RustString ) ;
1513
+ }
1514
+
1515
+ extern "C" {
1496
1516
pub fn LLVMRustUnpackInlineAsmDiagnostic ( DI : & ' a DiagnosticInfo ,
1497
1517
cookie_out : & mut c_uint ,
1498
1518
message_out : & mut Option < & ' a Twine > ,
1499
1519
instruction_out : & mut Option < & ' a Value > ) ;
1520
+ }
1500
1521
1522
+ #[ allow( improper_ctypes) ] // FIXME(#52456) needed for RustString.
1523
+ extern "C" {
1501
1524
pub fn LLVMRustWriteDiagnosticInfoToString ( DI : & DiagnosticInfo , s : & RustString ) ;
1525
+ }
1526
+
1527
+ extern "C" {
1502
1528
pub fn LLVMRustGetDiagInfoKind ( DI : & DiagnosticInfo ) -> DiagnosticKind ;
1503
1529
1504
1530
pub fn LLVMRustSetInlineAsmDiagnosticHandler ( C : & Context ,
1505
1531
H : InlineAsmDiagHandler ,
1506
1532
CX : * mut c_void ) ;
1533
+ }
1507
1534
1535
+ #[ allow( improper_ctypes) ] // FIXME(#52456) needed for RustString.
1536
+ extern "C" {
1508
1537
pub fn LLVMRustWriteSMDiagnosticToString ( d : & SMDiagnostic , s : & RustString ) ;
1538
+ }
1509
1539
1540
+ extern "C" {
1510
1541
pub fn LLVMRustWriteArchive ( Dst : * const c_char ,
1511
1542
NumMembers : size_t ,
1512
1543
Members : * const RustArchiveMemberRef ,
@@ -1515,7 +1546,7 @@ extern "C" {
1515
1546
-> LLVMRustResult ;
1516
1547
pub fn LLVMRustArchiveMemberNew ( Filename : * const c_char ,
1517
1548
Name : * const c_char ,
1518
- Child : Option < NonNull < ArchiveChild > > )
1549
+ Child : Option < & ArchiveChild > )
1519
1550
-> RustArchiveMemberRef ;
1520
1551
pub fn LLVMRustArchiveMemberFree ( Member : RustArchiveMemberRef ) ;
1521
1552
0 commit comments