11int source ();
2- void sink (int ); void sink ( const int *); void sink ( int ** ); void indirect_sink (...);
2+ void sink (... ); void indirect_sink (...);
33
44void intraprocedural_with_local_flow () {
55 int t2;
@@ -846,4 +846,80 @@ void test_references() {
846846 int * px = indirect_source ();
847847 int *& rpx = px;
848848 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 for some reason.
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+ }
849925}
0 commit comments