1*9880d681SAndroid Build Coastguard Worker; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; Check that module flags are structurally correct. 4*9880d681SAndroid Build Coastguard Worker; 5*9880d681SAndroid Build Coastguard Worker; CHECK: incorrect number of operands in module flag 6*9880d681SAndroid Build Coastguard Worker; CHECK: !0 7*9880d681SAndroid Build Coastguard Worker!0 = !{i32 1} 8*9880d681SAndroid Build Coastguard Worker; CHECK: invalid behavior operand in module flag (expected constant integer) 9*9880d681SAndroid Build Coastguard Worker; CHECK: !"foo" 10*9880d681SAndroid Build Coastguard Worker!1 = !{!"foo", !"foo", i32 42} 11*9880d681SAndroid Build Coastguard Worker; CHECK: invalid behavior operand in module flag (unexpected constant) 12*9880d681SAndroid Build Coastguard Worker; CHECK: i32 999 13*9880d681SAndroid Build Coastguard Worker!2 = !{i32 999, !"foo", i32 43} 14*9880d681SAndroid Build Coastguard Worker; CHECK: invalid ID operand in module flag (expected metadata string) 15*9880d681SAndroid Build Coastguard Worker; CHECK: i32 1 16*9880d681SAndroid Build Coastguard Worker!3 = !{i32 1, i32 1, i32 44} 17*9880d681SAndroid Build Coastguard Worker; CHECK: invalid value for 'require' module flag (expected metadata pair) 18*9880d681SAndroid Build Coastguard Worker; CHECK: i32 45 19*9880d681SAndroid Build Coastguard Worker!4 = !{i32 3, !"bla", i32 45} 20*9880d681SAndroid Build Coastguard Worker; CHECK: invalid value for 'require' module flag (expected metadata pair) 21*9880d681SAndroid Build Coastguard Worker; CHECK: ! 22*9880d681SAndroid Build Coastguard Worker!5 = !{i32 3, !"bla", !{i32 46}} 23*9880d681SAndroid Build Coastguard Worker; CHECK: invalid value for 'require' module flag (first value operand should be a string) 24*9880d681SAndroid Build Coastguard Worker; CHECK: i32 47 25*9880d681SAndroid Build Coastguard Worker!6 = !{i32 3, !"bla", !{i32 47, i32 48}} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker; Check that module flags only have unique IDs. 28*9880d681SAndroid Build Coastguard Worker; 29*9880d681SAndroid Build Coastguard Worker; CHECK: module flag identifiers must be unique (or of 'require' type) 30*9880d681SAndroid Build Coastguard Worker!7 = !{i32 1, !"foo", i32 49} 31*9880d681SAndroid Build Coastguard Worker!8 = !{i32 2, !"foo", i32 50} 32*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: module flag identifiers must be unique 33*9880d681SAndroid Build Coastguard Worker!9 = !{i32 2, !"bar", i32 51} 34*9880d681SAndroid Build Coastguard Worker!10 = !{i32 3, !"bar", !{!"bar", i32 51}} 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker; Check that any 'append'-type module flags are valid. 37*9880d681SAndroid Build Coastguard Worker; CHECK: invalid value for 'append'-type module flag (expected a metadata node) 38*9880d681SAndroid Build Coastguard Worker!16 = !{i32 5, !"flag-2", i32 56} 39*9880d681SAndroid Build Coastguard Worker; CHECK: invalid value for 'append'-type module flag (expected a metadata node) 40*9880d681SAndroid Build Coastguard Worker!17 = !{i32 5, !"flag-3", i32 57} 41*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: invalid value for 'append'-type module flag (expected a metadata node) 42*9880d681SAndroid Build Coastguard Worker!18 = !{i32 5, !"flag-4", !{i32 57}} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker; Check that any 'require' module flags are valid. 45*9880d681SAndroid Build Coastguard Worker; CHECK: invalid requirement on flag, flag is not present in module 46*9880d681SAndroid Build Coastguard Worker!11 = !{i32 3, !"bar", !{!"no-such-flag", i32 52}} 47*9880d681SAndroid Build Coastguard Worker; CHECK: invalid requirement on flag, flag does not have the required value 48*9880d681SAndroid Build Coastguard Worker!12 = !{i32 1, !"flag-0", i32 53} 49*9880d681SAndroid Build Coastguard Worker!13 = !{i32 3, !"bar", !{!"flag-0", i32 54}} 50*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: invalid requirement on flag, flag is not present in module 51*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: invalid requirement on flag, flag does not have the required value 52*9880d681SAndroid Build Coastguard Worker!14 = !{i32 1, !"flag-1", i32 55} 53*9880d681SAndroid Build Coastguard Worker!15 = !{i32 3, !"bar", !{!"flag-1", i32 55}} 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Worker!llvm.module.flags = !{ 56*9880d681SAndroid Build Coastguard Worker !0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !10, !11, !12, !13, !14, !15, 57*9880d681SAndroid Build Coastguard Worker !16, !17, !18 } 58