CFI: Skip non-passed arguments · rcvalle/rust@f2f0d25 (original) (raw)

`@@ -47,40 +47,42 @@ pub fn foo() where

`

47

47

`let _: Type4 = ::bar;

`

48

48

`}

`

49

49

``

50

``

`-

pub fn foo1(_: Type1) { }

`

``

50

`+

// Force arguments to be passed by using a reference. Otherwise, they may end up PassMode::Ignore

`

``

51

+

``

52

`+

pub fn foo1(_: &Type1) { }

`

51

53

`// CHECK: define{{.}}4foo1{{.}}!type ![[TYPE1:[0-9]+]] !type !{{[0-9]+}} !type !{{[0-9]+}} !type !{{[0-9]+}}

`

52

``

`-

pub fn foo2(_: Type1, _: Type1) { }

`

``

54

`+

pub fn foo2(_: &Type1, _: &Type1) { }

`

53

55

`// CHECK: define{{.}}4foo2{{.}}!type ![[TYPE2:[0-9]+]] !type !{{[0-9]+}} !type !{{[0-9]+}} !type !{{[0-9]+}}

`

54

``

`-

pub fn foo3(_: Type1, _: Type1, _: Type1) { }

`

``

56

`+

pub fn foo3(_: &Type1, _: &Type1, _: &Type1) { }

`

55

57

`// CHECK: define{{.}}4foo3{{.}}!type ![[TYPE3:[0-9]+]] !type !{{[0-9]+}} !type !{{[0-9]+}} !type !{{[0-9]+}}

`

56

``

`-

pub fn foo4(_: Type2) { }

`

``

58

`+

pub fn foo4(_: &Type2) { }

`

57

59

`// CHECK: define{{.}}4foo4{{.}}!type ![[TYPE4:[0-9]+]] !type !{{[0-9]+}} !type !{{[0-9]+}} !type !{{[0-9]+}}

`

58

``

`-

pub fn foo5(_: Type2, _: Type2) { }

`

``

60

`+

pub fn foo5(_: &Type2, _: &Type2) { }

`

59

61

`// CHECK: define{{.}}4foo5{{.}}!type ![[TYPE5:[0-9]+]] !type !{{[0-9]+}} !type !{{[0-9]+}} !type !{{[0-9]+}}

`

60

``

`-

pub fn foo6(_: Type2, _: Type2, _: Type2) { }

`

``

62

`+

pub fn foo6(_: &Type2, _: &Type2, _: &Type2) { }

`

61

63

`// CHECK: define{{.}}4foo6{{.}}!type ![[TYPE6:[0-9]+]] !type !{{[0-9]+}} !type !{{[0-9]+}} !type !{{[0-9]+}}

`

62

``

`-

pub fn foo7(_: Type3) { }

`

``

64

`+

pub fn foo7(_: &Type3) { }

`

63

65

`// CHECK: define{{.}}4foo7{{.}}!type ![[TYPE7:[0-9]+]] !type !{{[0-9]+}} !type !{{[0-9]+}} !type !{{[0-9]+}}

`

64

``

`-

pub fn foo8(_: Type3, _: Type3) { }

`

``

66

`+

pub fn foo8(_: &Type3, _: &Type3) { }

`

65

67

`// CHECK: define{{.}}4foo8{{.}}!type ![[TYPE8:[0-9]+]] !type !{{[0-9]+}} !type !{{[0-9]+}} !type !{{[0-9]+}}

`

66

``

`-

pub fn foo9(_: Type3, _: Type3, _: Type3) { }

`

``

68

`+

pub fn foo9(_: &Type3, _: &Type3, _: &Type3) { }

`

67

69

`// CHECK: define{{.}}4foo9{{.}}!type ![[TYPE9:[0-9]+]] !type !{{[0-9]+}} !type !{{[0-9]+}} !type !{{[0-9]+}}

`

68

``

`-

pub fn foo10(_: Type4) { }

`

``

70

`+

pub fn foo10(_: &Type4) { }

`

69

71

`// CHECK: define{{.}}5foo10{{.}}!type ![[TYPE10:[0-9]+]] !type !{{[0-9]+}} !type !{{[0-9]+}} !type !{{[0-9]+}}

`

70

``

`-

pub fn foo11(_: Type4, _: Type4) { }

`

``

72

`+

pub fn foo11(_: &Type4, _: &Type4) { }

`

71

73

`// CHECK: define{{.}}5foo11{{.}}!type ![[TYPE11:[0-9]+]] !type !{{[0-9]+}} !type !{{[0-9]+}} !type !{{[0-9]+}}

`

72

``

`-

pub fn foo12(_: Type4, _: Type4, _: Type4) { }

`

``

74

`+

pub fn foo12(_: &Type4, _: &Type4, _: &Type4) { }

`

73

75

`// CHECK: define{{.}}5foo12{{.}}!type ![[TYPE12:[0-9]+]] !type !{{[0-9]+}} !type !{{[0-9]+}} !type !{{[0-9]+}}

`

74

76

``

75

``

`-

// CHECK: ![[TYPE1]] = !{i64 0, !"ZTSFvu{{[0-9]+}}NvNFNvC{{[[:print:]]+}}{{[[:print:]]+}}3foo10{{[{}][{}]}}extern{{[}][}]}}3barE"}

`

76

``

`-

// CHECK: ![[TYPE2]] = !{i64 0, !"ZTSFvu{{[0-9]+}}NvNFNvC{{[[:print:]]+}}{{[[:print:]]+}}3foo10{{[{}][{}]}}extern{{[}][}]}}3barS_E"}

`

77

``

`-

// CHECK: ![[TYPE3]] = !{i64 0, !"ZTSFvu{{[0-9]+}}NvNFNvC{{[[:print:]]+}}{{[[:print:]]+}}3foo10{{[{}][{}]}}extern{{[}][}]}}3barS_S_E"}

`

78

``

`-

// CHECK: ![[TYPE4]] = !{i64 0, !"ZTSFvu{{[0-9]+}}NtNCNvC{{[[:print:]]+}}{{[[:print:]]+}}3foo11{{[{}][{}]}}closure{{[}][}]}}3FooE"}

`

79

``

`-

// CHECK: ![[TYPE5]] = !{i64 0, !"ZTSFvu{{[0-9]+}}NtNCNvC{{[[:print:]]+}}{{[[:print:]]+}}3foo11{{[{}][{}]}}closure{{[}][}]}}3FooS_E"}

`

80

``

`-

// CHECK: ![[TYPE6]] = !{i64 0, !"ZTSFvu{{[0-9]+}}NtNCNvC{{[[:print:]]+}}{{[[:print:]]+}}3foo11{{[{}][{}]}}closure{{[}][}]}}3FooS_S_E"}

`

81

``

`-

// CHECK: ![[TYPE7]] = !{i64 0, !"ZTSFvu{{[0-9]+}}NtNkNvC{{[[:print:]]+}}{{[[:print:]]+}}3foo12{{[{}][{}]}}constant{{[}][}]}}3FooE"}

`

82

``

`-

// CHECK: ![[TYPE8]] = !{i64 0, !"ZTSFvu{{[0-9]+}}NtNkNvC{{[[:print:]]+}}{{[[:print:]]+}}3foo12{{[{}][{}]}}constant{{[}][}]}}3FooS_E"}

`

83

``

`-

// CHECK: ![[TYPE9]] = !{i64 0, !"ZTSFvu{{[0-9]+}}NtNkNvC{{[[:print:]]+}}{{[[:print:]]+}}3foo12{{[{}][{}]}}constant{{[}][}]}}3FooS_S_E"}

`

84

``

`-

// CHECK: ![[TYPE10]] = !{i64 0, !"ZTSFvu{{[0-9]+}}NvNINvC{{[[:print:]]+}}{{[[:print:]]+}}3foo8{{[{}][{}]}}impl{{[}][}]}}3barE"}

`

85

``

`-

// CHECK: ![[TYPE11]] = !{i64 0, !"ZTSFvu{{[0-9]+}}NvNINvC{{[[:print:]]+}}{{[[:print:]]+}}3foo8{{[{}][{}]}}impl{{[}][}]}}3barS_E"}

`

86

``

`-

// CHECK: ![[TYPE12]] = !{i64 0, !"ZTSFvu{{[0-9]+}}NvNINvC{{[[:print:]]+}}{{[[:print:]]+}}3foo8{{[{}][{}]}}impl{{[}][}]}}3barS_S_E"}

`

``

77

`+

// CHECK: ![[TYPE1]] = !{i64 0, !"ZTSFvu3refIu{{[0-9]+}}NvNFNvC{{[[:print:]]+}}{{[[:print:]]+}}3foo10{{[{}][{}]}}extern{{[}][}]}}3barEE"}

`

``

78

`+

// CHECK: ![[TYPE2]] = !{i64 0, !"ZTSFvu3refIu{{[0-9]+}}NvNFNvC{{[[:print:]]+}}{{[[:print:]]+}}3foo10{{[{}][{}]}}extern{{[}][}]}}3barES0_E"}

`

``

79

`+

// CHECK: ![[TYPE3]] = !{i64 0, !"ZTSFvu3refIu{{[0-9]+}}NvNFNvC{{[[:print:]]+}}{{[[:print:]]+}}3foo10{{[{}][{}]}}extern{{[}][}]}}3barES0_S0_E"}

`

``

80

`+

// CHECK: ![[TYPE4]] = !{i64 0, !"ZTSFvu3refIu{{[0-9]+}}NtNCNvC{{[[:print:]]+}}{{[[:print:]]+}}3foo11{{[{}][{}]}}closure{{[}][}]}}3FooEE"}

`

``

81

`+

// CHECK: ![[TYPE5]] = !{i64 0, !"ZTSFvu3refIu{{[0-9]+}}NtNCNvC{{[[:print:]]+}}{{[[:print:]]+}}3foo11{{[{}][{}]}}closure{{[}][}]}}3FooES0_E"}

`

``

82

`+

// CHECK: ![[TYPE6]] = !{i64 0, !"ZTSFvu3refIu{{[0-9]+}}NtNCNvC{{[[:print:]]+}}{{[[:print:]]+}}3foo11{{[{}][{}]}}closure{{[}][}]}}3FooES0_S0_E"}

`

``

83

`+

// CHECK: ![[TYPE7]] = !{i64 0, !"ZTSFvu3refIu{{[0-9]+}}NtNkNvC{{[[:print:]]+}}{{[[:print:]]+}}3foo12{{[{}][{}]}}constant{{[}][}]}}3FooEE"}

`

``

84

`+

// CHECK: ![[TYPE8]] = !{i64 0, !"ZTSFvu3refIu{{[0-9]+}}NtNkNvC{{[[:print:]]+}}{{[[:print:]]+}}3foo12{{[{}][{}]}}constant{{[}][}]}}3FooES0_E"}

`

``

85

`+

// CHECK: ![[TYPE9]] = !{i64 0, !"ZTSFvu3refIu{{[0-9]+}}NtNkNvC{{[[:print:]]+}}{{[[:print:]]+}}3foo12{{[{}][{}]}}constant{{[}][}]}}3FooES0_S0_E"}

`

``

86

`+

// CHECK: ![[TYPE10]] = !{i64 0, !"ZTSFvu3refIu{{[0-9]+}}NvNINvC{{[[:print:]]+}}{{[[:print:]]+}}3foo8{{[{}][{}]}}impl{{[}][}]}}3barEE"}

`

``

87

`+

// CHECK: ![[TYPE11]] = !{i64 0, !"ZTSFvu3refIu{{[0-9]+}}NvNINvC{{[[:print:]]+}}{{[[:print:]]+}}3foo8{{[{}][{}]}}impl{{[}][}]}}3barES0_E"}

`

``

88

`+

// CHECK: ![[TYPE12]] = !{i64 0, !"ZTSFvu3refIu{{[0-9]+}}NvNINvC{{[[:print:]]+}}{{[[:print:]]+}}3foo8{{[{}][{}]}}impl{{[}][}]}}3barES0_S0_E"}

`