/* 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership. The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations
 * under the License.
*/ 

struct s1 {
    long s1_l1;
};

struct s2 {
    long s2_l1, s2_l2;
    s1 s2_s1; // references previously declared struct
};

struct s3 {
    long s3_l1;
    short s3_s1, s3_s2;
    s1 s3_s1, s3_s2, s3_s3; // references and multiply declares previously defined struct
};

struct s4 { 
    long s4_l1; 
    short s4_s1, s4_s2, s4_s3;
    string s4_str1;
}; 

struct s5 {
    string s5_s1, s5_s2, s5_s3;
};

struct s6 {
    long s6_l1, s6_l2[10];
    short s6_s1[7], s6_s2, s6_s3;
    float s6_f1[100], s6_f2[1000];
    double s6_d1[5], s6_d2[50], s6_d3[500];
    long long s6_ll1, s6_ll2[3], s6_ll3;
};
