File: tst.implicit_decl.d

package info (click to toggle)
dtrace 2.0.5-1
  • links: PTS
  • area: main
  • in suites: sid
  • size: 24,408 kB
  • sloc: ansic: 61,247; sh: 17,997; asm: 1,717; lex: 947; awk: 754; yacc: 695; perl: 37; sed: 17; makefile: 15
file content (85 lines) | stat: -rw-r--r-- 2,104 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*
 * Oracle Linux DTrace.
 * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved.
 * Licensed under the Universal Permissive License v 1.0 as shown at
 * http://oss.oracle.com/licenses/upl.
 */

/*
 * ASSERTION: Verify assignments when structs are implicitly declared.
 *
 * SECTION: Structs and Unions/Structs
 */

#pragma D option quiet

/*
 * Declare some structs, including a struct of structs.
 */

struct coords {
	int x, y;
};
struct particle {
	struct coords position;
	struct coords velocity;
};

/*
 * Declare some global (uppercase) and clause-local (lowercase) variables.
 * The "dummy" variables are declared just so we can test nonzero offsets.
 */
     struct coords   C_DUMMY, C_DECLD;
this struct coords   c_dummy, c_decld;
     struct particle P_DUMMY, P_DECLD;
this struct particle p_dummy, p_decld;

BEGIN {
	/* Initialize the declared variables. */
	      C_DECLD.x          = 11;
	      C_DECLD.y          = 12;
	      P_DECLD.position.x = 13;
	      P_DECLD.position.y = 14;
	      P_DECLD.velocity.x = 15;
	      P_DECLD.velocity.y = 16;
	this->c_decld.x          = 21;
	this->c_decld.y          = 22;
	this->p_decld.position.x = 23;
	this->p_decld.position.y = 24;
	this->p_decld.velocity.x = 25;
	this->p_decld.velocity.y = 26;

	/* These structs are declared implicitly via their first assignments. */

	      C_IMPL1          =       C_DECLD;
	this->c_impl1          = this->c_decld;
	      C_IMPL2          = this->c_impl1;
	this->c_impl2          =       C_IMPL1;

	      P_IMPL1          =       P_DECLD;
	this->p_impl1          = this->p_decld;
	      P_IMPL2          = this->p_impl1;
	this->p_impl2          =       P_IMPL1;

	      P_IMPL2.velocity = this->c_impl2;
	this->p_impl2.velocity =       C_IMPL2;

	/* print results */

	printf("%d %d %d %d %d %d %d %d\n",
	          P_IMPL2.position.x,
	          P_IMPL2.position.y,
	          P_IMPL2.velocity.x,
	          P_IMPL2.velocity.y,
	    this->p_impl2.position.x,
	    this->p_impl2.position.y,
	    this->p_impl2.velocity.x,
	    this->p_impl2.velocity.y);

	exit(0);
}

ERROR
{
	exit(1);
}