Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
cbb43664
Commit
cbb43664
authored
Feb 03, 2014
by
Andrey Belevantsev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Actually add the test case from the previous commit.
From-SVN: r207422
parent
861ec4f3
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
339 additions
and
0 deletions
+339
-0
gcc/testsuite/g++.dg/pr57662.C
+339
-0
No files found.
gcc/testsuite/g++.dg/pr57662.C
0 → 100644
View file @
cbb43664
/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
/* { dg-options "-O2 -fselective-scheduling2 -fsel-sched-pipelining" } */
extern
"C"
{
typedef
struct
_IO_FILE
FILE
;
extern
int
putc
(
int
__c
,
FILE
*
__stream
);
extern
int
strcmp
(
__const
char
*
__s1
,
__const
char
*
__s2
)
throw
()
__attribute__
((
__pure__
))
__attribute__
((
__nonnull__
(
1
,
2
)));
}
typedef
union
tree_node
*
tree
;
struct
gcc_options
{
int
x_flag_openmp
;
};
extern
struct
gcc_options
global_options
;
struct
ht_identifier
{
const
unsigned
char
*
str
;
};
enum
cpp_ttype
{
CPP_SEMICOLON
,
CPP_NAME
};
struct
vl_embed
{
};
struct
va_heap
{
};
struct
va_gc
{
typedef
vl_embed
default_layout
;
};
template
<
typename
T
,
typename
A
=
va_heap
,
typename
L
=
typename
A
::
default_layout
>
struct
vec
{
};
enum
tree_code
{
ERROR_MARK
,
IDENTIFIER_NODE
,
OMP_SIMD
,
CILK_SIMD
,
MAX_TREE_CODES
};
struct
tree_identifier
{
struct
ht_identifier
id
;
};
union
tree_node
{
struct
tree_identifier
identifier
;
};
inline
tree
tree_check
(
tree
__t
,
const
char
*
__f
,
int
__l
,
const
char
*
__g
,
tree_code
__c
)
{
}
extern
tree
chainon
(
tree
,
tree
);
extern
vec
<
tree
,
va_gc
>
*
make_tree_vector
(
void
);
typedef
unsigned
long
omp_clause_mask
;
enum
c_omp_clause_split
{
C_OMP_CLAUSE_SPLIT_TARGET
=
0
,
C_OMP_CLAUSE_SPLIT_COUNT
};
typedef
struct
cxx_saved_binding
{
tree
attributes
;
}
cp_decl_specifier_seq
;
typedef
enum
pragma_kind
{
PRAGMA_NONE
=
0
,
PRAGMA_OMP_DECLARE_REDUCTION
,
PRAGMA_OMP_TARGET
}
pragma_kind
;
typedef
enum
pragma_omp_clause
{
PRAGMA_OMP_CLAUSE_NONE
=
0
,
PRAGMA_OMP_CLAUSE_DEVICE
,
PRAGMA_OMP_CLAUSE_IF
,
PRAGMA_OMP_CLAUSE_MAP
}
pragma_omp_clause
;
typedef
struct
cp_token
{
enum
cpp_ttype
type
:
8
;
union
cp_token_value
{
tree
value
;
}
u
;
}
cp_token
;
typedef
struct
cp_token
*
cp_token_position
;
typedef
struct
cp_lexer
{
cp_token_position
next_token
;
bool
debugging_p
;
cp_lexer
*
lexer
;
}
cp_parser
;
static
FILE
*
cp_lexer_debug_stream
;
static
inline
bool
cp_lexer_debugging_p
(
cp_lexer
*
lexer
)
{
return
lexer
->
debugging_p
;
}
static
inline
cp_token
*
cp_lexer_peek_token
(
cp_lexer
*
lexer
)
{
if
(
cp_lexer_debugging_p
(
lexer
))
{
putc
(
'\n'
,
cp_lexer_debug_stream
);
}
return
lexer
->
next_token
;
}
static
inline
bool
cp_lexer_next_token_is
(
cp_lexer
*
lexer
,
enum
cpp_ttype
type
)
{
}
enum
{
CP_PARSER_FLAGS_NONE
=
0x0
,
CP_PARSER_FLAGS_OPTIONAL
=
0x1
,
CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES
=
0x2
,
CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS
=
0x4
,
CP_PARSER_FLAGS_ONLY_TYPE_OR_CONSTEXPR
=
0x8
};
typedef
int
cp_parser_flags
;
extern
tree
cp_parser_type_specifier
(
cp_parser
*
,
cp_parser_flags
,
cp_decl_specifier_seq
*
,
bool
,
int
*
,
bool
*
);
static
void
cp_parser_type_specifier_seq
(
cp_parser
*
,
bool
,
bool
,
cp_decl_specifier_seq
*
);
extern
bool
cp_next_tokens_can_be_attribute_p
(
cp_parser
*
);
extern
tree
cp_parser_attributes_opt
(
cp_parser
*
);
enum
pragma_context
{
pragma_external
,
pragma_member
,
pragma_objc_icode
,
pragma_stmt
,
pragma_compound
};
static
bool
cp_parser_pragma
(
cp_parser
*
,
enum
pragma_context
);
static
bool
cp_parser_translation_unit
(
cp_parser
*
parser
)
{
while
(
true
)
{
cp_token
*
token
;
if
(
token
->
type
==
CPP_SEMICOLON
)
{
cp_parser_pragma
(
parser
,
pragma_external
);
}
}
}
static
tree
cp_parser_type_id_1
(
cp_parser
*
parser
,
bool
is_template_arg
,
bool
is_trailing_return
)
{
cp_decl_specifier_seq
type_specifier_seq
;
cp_parser_type_specifier_seq
(
parser
,
false
,
is_trailing_return
,
&
type_specifier_seq
);
}
static
tree
cp_parser_type_id
(
cp_parser
*
parser
)
{
return
cp_parser_type_id_1
(
parser
,
false
,
false
);
}
static
void
cp_parser_type_specifier_seq
(
cp_parser
*
parser
,
bool
is_declaration
,
bool
is_trailing_return
,
cp_decl_specifier_seq
*
type_specifier_seq
)
{
cp_parser_flags
flags
=
CP_PARSER_FLAGS_OPTIONAL
;
cp_token
*
start_token
=
__null
;
while
(
true
)
{
tree
type_specifier
;
bool
is_cv_qualifier
;
if
(
cp_next_tokens_can_be_attribute_p
(
parser
))
{
type_specifier_seq
->
attributes
=
chainon
(
type_specifier_seq
->
attributes
,
cp_parser_attributes_opt
(
parser
));
continue
;
}
if
(
!
start_token
)
start_token
=
cp_lexer_peek_token
(
parser
->
lexer
);
type_specifier
=
cp_parser_type_specifier
(
parser
,
flags
,
type_specifier_seq
,
false
,
__null
,
&
is_cv_qualifier
);
if
(
!
type_specifier
)
{
break
;
}
if
(
is_declaration
&&
!
is_cv_qualifier
)
flags
|=
CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES
;
}
}
static
bool
cp_parser_omp_for_loop_init
(
cp_parser
*
parser
,
bool
parsing_openmp
,
tree
&
this_pre_body
,
vec
<
tree
,
va_gc
>
*
for_block
,
tree
&
init
,
tree
&
decl
,
tree
&
real_decl
)
{
cp_decl_specifier_seq
type_specifiers
;
cp_parser_type_specifier_seq
(
parser
,
true
,
false
,
&
type_specifiers
);
}
static
tree
cp_parser_omp_for_loop
(
cp_parser
*
parser
,
enum
tree_code
code
,
tree
clauses
,
tree
*
cclauses
)
{
tree
init
,
cond
,
incr
,
body
,
decl
,
pre_body
=
(
tree
)
__null
,
ret
;
tree
real_decl
,
initv
,
condv
,
incrv
,
declv
;
tree
this_pre_body
,
cl
;
int
i
,
collapse
=
1
,
nbraces
=
0
;
vec
<
tree
,
va_gc
>
*
for_block
=
make_tree_vector
();
for
(
i
=
0
;
i
<
collapse
;
i
++
)
{
bool
add_private_clause
=
false
;
add_private_clause
|=
cp_parser_omp_for_loop_init
(
parser
,
code
!=
CILK_SIMD
,
this_pre_body
,
for_block
,
init
,
decl
,
real_decl
);
}
}
static
tree
cp_parser_omp_simd
(
cp_parser
*
parser
,
cp_token
*
pragma_tok
,
char
*
p_name
,
omp_clause_mask
mask
,
tree
*
cclauses
)
{
tree
clauses
,
sb
,
ret
;
ret
=
cp_parser_omp_for_loop
(
parser
,
OMP_SIMD
,
clauses
,
cclauses
);
}
static
tree
cp_parser_omp_distribute
(
cp_parser
*
parser
,
cp_token
*
pragma_tok
,
char
*
p_name
,
omp_clause_mask
mask
,
tree
*
cclauses
)
{
if
(
cp_lexer_next_token_is
(
parser
->
lexer
,
CPP_NAME
))
{
tree
id
=
cp_lexer_peek_token
(
parser
->
lexer
)
->
u
.
value
;
const
char
*
p
=
((
const
char
*
)(
tree_check
((
id
),
"/home/bonzo/develop/trunk/gcc/cp/parser.c"
,
29966
,
__FUNCTION__
,
(
IDENTIFIER_NODE
)))
->
identifier
.
id
.
str
);
bool
simd
=
false
;
bool
parallel
=
false
;
if
(
strcmp
(
p
,
"simd"
)
==
0
)
simd
=
true
;
if
(
parallel
||
simd
)
{
if
(
!
global_options
.
x_flag_openmp
)
{
if
(
simd
)
return
cp_parser_omp_simd
(
parser
,
pragma_tok
,
p_name
,
mask
,
cclauses
);
}
}
}
}
static
tree
cp_parser_omp_teams
(
cp_parser
*
parser
,
cp_token
*
pragma_tok
,
char
*
p_name
,
omp_clause_mask
mask
,
tree
*
cclauses
)
{
if
(
cp_lexer_next_token_is
(
parser
->
lexer
,
CPP_NAME
))
{
tree
id
=
cp_lexer_peek_token
(
parser
->
lexer
)
->
u
.
value
;
const
char
*
p
=
((
const
char
*
)(
tree_check
((
id
),
"/home/bonzo/develop/trunk/gcc/cp/parser.c"
,
30062
,
__FUNCTION__
,
(
IDENTIFIER_NODE
)))
->
identifier
.
id
.
str
);
if
(
strcmp
(
p
,
"distribute"
)
==
0
)
{
if
(
!
global_options
.
x_flag_openmp
)
return
cp_parser_omp_distribute
(
parser
,
pragma_tok
,
p_name
,
mask
,
cclauses
);
}
}
}
static
bool
cp_parser_omp_target
(
cp_parser
*
parser
,
cp_token
*
pragma_tok
,
enum
pragma_context
context
)
{
if
(
context
!=
pragma_stmt
&&
context
!=
pragma_compound
)
{
tree
id
=
cp_lexer_peek_token
(
parser
->
lexer
)
->
u
.
value
;
const
char
*
p
=
((
const
char
*
)(
tree_check
((
id
),
"/home/bonzo/develop/trunk/gcc/cp/parser.c"
,
30201
,
__FUNCTION__
,
(
IDENTIFIER_NODE
)))
->
identifier
.
id
.
str
);
if
(
strcmp
(
p
,
"teams"
)
==
0
)
{
tree
cclauses
[
C_OMP_CLAUSE_SPLIT_COUNT
];
char
p_name
[
sizeof
(
"#pragma omp target teams distribute "
"parallel for simd"
)];
if
(
!
global_options
.
x_flag_openmp
)
return
cp_parser_omp_teams
(
parser
,
pragma_tok
,
p_name
,
((((
omp_clause_mask
)
1
)
<<
PRAGMA_OMP_CLAUSE_DEVICE
)
|
(((
omp_clause_mask
)
1
)
<<
PRAGMA_OMP_CLAUSE_MAP
)
|
(((
omp_clause_mask
)
1
)
<<
PRAGMA_OMP_CLAUSE_IF
)),
cclauses
);
}
}
}
static
void
cp_parser_omp_declare_reduction
(
cp_parser
*
parser
,
cp_token
*
pragma_tok
,
enum
pragma_context
)
{
tree
reduc_id
=
(
tree
)
__null
,
orig_reduc_id
=
(
tree
)
__null
,
type
;
while
(
true
)
{
type
=
cp_parser_type_id
(
parser
);
}
}
static
void
cp_parser_omp_declare
(
cp_parser
*
parser
,
cp_token
*
pragma_tok
,
enum
pragma_context
context
)
{
if
(
cp_lexer_next_token_is
(
parser
->
lexer
,
CPP_NAME
))
{
tree
id
=
cp_lexer_peek_token
(
parser
->
lexer
)
->
u
.
value
;
const
char
*
p
=
((
const
char
*
)(
tree_check
((
id
),
"/home/bonzo/develop/trunk/gcc/cp/parser.c"
,
30883
,
__FUNCTION__
,
(
IDENTIFIER_NODE
)))
->
identifier
.
id
.
str
);
if
(
strcmp
(
p
,
"simd"
)
==
0
)
{
cp_parser_omp_declare_reduction
(
parser
,
pragma_tok
,
context
);
}
}
}
static
cp_parser
*
the_parser
;
static
bool
cp_parser_pragma
(
cp_parser
*
parser
,
enum
pragma_context
context
)
{
cp_token
*
pragma_tok
;
unsigned
int
id
;
switch
(
id
)
{
case
PRAGMA_OMP_DECLARE_REDUCTION
:
cp_parser_omp_declare
(
parser
,
pragma_tok
,
context
);
case
PRAGMA_OMP_TARGET
:
return
cp_parser_omp_target
(
parser
,
pragma_tok
,
context
);
}
}
void
c_parse_file
(
void
)
{
cp_parser_translation_unit
(
the_parser
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment