// Copyright 2019-2021 Free Software Foundation, Inc.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

package main

import "fmt"

type S1 struct {
     m_a int
     m_b int
}

type S2 struct {
     m_struct S1
     m_string string
}

func main () {
  var s1 S2
  var i int

  s1.m_string = "hello world"
  s1.m_struct.m_a = 3
  s1.m_struct.m_b = 7

  i = 0           // Break here.
  fmt.Println ("Got: %d, %d, %d, %s", i, s1.m_struct.m_a,
               s1.m_struct.m_b, s1.m_string)
}
