1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -function-specialization -force-function-specialization -func-specialization-on-address -S < %s | FileCheck %s 3 4; Check that we don't crash and specialise on a scalar global variable with byval attribute. 5 6; CHECK-NOT: wombat.{{[0-9]+}} 7 8%struct.pluto = type { %struct.spam } 9%struct.quux = type { i16 } 10%struct.spam = type { i16 } 11 12@global.5 = external dso_local global i128 13@global.12 = external global %struct.quux 14 15define internal i16 @wobble(%struct.quux* %arg, i16 %arg1, i128* byval(i128) %arg2, %struct.quux* %arg3) { 16; CHECK-LABEL: @wobble( 17; CHECK-NEXT: bb: 18; CHECK-NEXT: [[TMP34:%.*]] = bitcast i128* [[ARG2:%.*]] to i16* 19; CHECK-NEXT: unreachable 20; 21bb: 22 %tmp34 = bitcast i128* %arg2 to i16* 23 unreachable 24} 25 26define internal i16 @snork() { 27; CHECK-LABEL: @snork( 28; CHECK-NEXT: bb4: 29; CHECK-NEXT: [[TMP35:%.*]] = call i16 @wobble(%struct.quux* undef, i16 2, i128* byval(i128) @global.5, %struct.quux* @global.12) 30; CHECK-NEXT: unreachable 31; 32bb4: 33 %tmp35 = call i16 @wobble(%struct.quux* undef, i16 2, i128* byval(i128) @global.5, %struct.quux* @global.12) 34 unreachable 35} 36 37define i16 @main() { 38; CHECK-LABEL: @main( 39; CHECK-NEXT: bb: 40; CHECK-NEXT: [[TMP:%.*]] = call i16 @snork() 41; CHECK-NEXT: unreachable 42; 43bb: 44 %tmp = call i16 @snork() 45 unreachable 46} 47