1
1
int source ();
2
- void sink (int ); void sink ( const int *); void sink ( int ** ); void indirect_sink (...);
2
+ void sink (... ); void indirect_sink (...);
3
3
4
4
void intraprocedural_with_local_flow () {
5
5
int t2;
@@ -846,4 +846,80 @@ void test_references() {
846
846
int * px = indirect_source ();
847
847
int *& rpx = px;
848
848
indirect_sink ((int *)rpx); // $ ast,ir
849
+ }
850
+
851
+ namespace GlobalArrays {
852
+ void test1 () {
853
+ static const int static_local_array_dynamic[] = { ::source () };
854
+ sink (*static_local_array_dynamic); // $ ir MISSING: ast
855
+ }
856
+
857
+ const int * source (bool );
858
+
859
+ void test2 () {
860
+ static const int * static_local_pointer_dynamic = source (true );
861
+ sink (static_local_pointer_dynamic); // $ ast,ir
862
+ }
863
+
864
+ static const int global_array_dynamic[] = { ::source () };
865
+
866
+ void test3 () {
867
+ sink (*global_array_dynamic); // $ MISSING: ir,ast // Missing in IR because no 'IRFunction' for global_array is generated because the type of global_array_dynamic is "deeply const".
868
+ }
869
+
870
+ const int * source (bool );
871
+
872
+ static const int * global_pointer_dynamic = source(true );
873
+
874
+ void test4 () {
875
+ sink (global_pointer_dynamic); // $ ir MISSING: ast
876
+ }
877
+
878
+ void test5 () {
879
+ static const char static_local_array_static[] = " source" ;
880
+ static const char static_local_array_static_indirect_1[] = " indirect_source(1)" ;
881
+ static const char static_local_array_static_indirect_2[] = " indirect_source(2)" ;
882
+ sink (static_local_array_static); // clean
883
+ sink (static_local_array_static_indirect_1); // $ MISSING: ast,ir
884
+ indirect_sink (static_local_array_static_indirect_1); // clean
885
+ sink (static_local_array_static_indirect_2); // clean
886
+ indirect_sink (static_local_array_static_indirect_2); // $ ir MISSING: ast
887
+ }
888
+
889
+ void test6 () {
890
+ static const char * static_local_pointer_static = " source" ;
891
+ static const char * static_local_pointer_static_indirect_1 = " indirect_source(1)" ;
892
+ static const char * static_local_pointer_static_indirect_2 = " indirect_source(2)" ;
893
+ sink (static_local_pointer_static); // $ ir MISSING: ast
894
+ sink (static_local_pointer_static_indirect_1); // clean
895
+ indirect_sink (static_local_pointer_static_indirect_1); // $ ir MISSING: ast
896
+ sink (static_local_pointer_static_indirect_2); // clean: static_local_pointer_static_indirect_2 does not have 2 indirections
897
+ indirect_sink (static_local_pointer_static_indirect_2); // clean: static_local_pointer_static_indirect_2 does not have 2 indirections
898
+ }
899
+
900
+ static const char global_array_static[] = " source" ;
901
+ static const char global_array_static_indirect_1[] = " indirect_source(1)" ;
902
+ static const char global_array_static_indirect_2[] = " indirect_source(2)" ;
903
+
904
+ void test7 () {
905
+ sink (global_array_static); // clean
906
+ sink (*global_array_static); // clean
907
+ sink (global_array_static_indirect_1); // $ MISSING: ir,ast
908
+ sink (*global_array_static_indirect_1); // clean
909
+ indirect_sink (global_array_static); // clean
910
+ indirect_sink (global_array_static_indirect_1); // clean
911
+ indirect_sink (global_array_static_indirect_2); // $ ir MISSING: ast
912
+ }
913
+
914
+ static const char * global_pointer_static = " source" ;
915
+ static const char * global_pointer_static_indirect_1 = " indirect_source(1)" ;
916
+ static const char * global_pointer_static_indirect_2 = " indirect_source(2)" ;
917
+
918
+ void test8 () {
919
+ sink (global_pointer_static); // $ ir MISSING: ast
920
+ sink (global_pointer_static_indirect_1); // clean
921
+ indirect_sink (global_pointer_static_indirect_1); // $ ir MISSING: ast
922
+ sink (global_pointer_static_indirect_2); // clean: global_pointer_static_indirect_2 does not have 2 indirections
923
+ indirect_sink (global_pointer_static_indirect_2); // clean: global_pointer_static_indirect_2 does not have 2 indirections
924
+ }
849
925
}
0 commit comments