re PR c++/13081 (forward template declarations in <complex> let inlining fail)
PR c++/13081 * decl.c (duplicate_decls): Preserve inline-ness when redeclaring a function template. PR c++/12613 * decl.c (reshape_init): Reject GNU colon-style designated initializers in arrays. PR c++/13081 * g++.dg/opt/inline6.C: New test. PR c++/12613 * g++.dg/parse/error9.C: New test. From-SVN: r75192
This commit is contained in:
parent
1896d29d23
commit
c11889cef5
@ -1,5 +1,13 @@
|
|||||||
2003-12-28 Mark Mitchell <mark@codesourcery.com>
|
2003-12-28 Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
|
PR c++/13081
|
||||||
|
* decl.c (duplicate_decls): Preserve inline-ness when redeclaring
|
||||||
|
a function template.
|
||||||
|
|
||||||
|
PR c++/12613
|
||||||
|
* decl.c (reshape_init): Reject GNU colon-style designated
|
||||||
|
initializers in arrays.
|
||||||
|
|
||||||
PR c++/13009
|
PR c++/13009
|
||||||
* call.c (build_special_member_call): Do not assume that we have a
|
* call.c (build_special_member_call): Do not assume that we have a
|
||||||
pointer to the complete object in an assignment operator.
|
pointer to the complete object in an assignment operator.
|
||||||
|
@ -1594,6 +1594,14 @@ duplicate_decls (tree newdecl, tree olddecl)
|
|||||||
= DECL_SOURCE_LOCATION (newdecl);
|
= DECL_SOURCE_LOCATION (newdecl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (DECL_FUNCTION_TEMPLATE_P (newdecl))
|
||||||
|
{
|
||||||
|
DECL_INLINE (DECL_TEMPLATE_RESULT (olddecl))
|
||||||
|
|= DECL_INLINE (DECL_TEMPLATE_RESULT (newdecl));
|
||||||
|
DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (olddecl))
|
||||||
|
|= DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (newdecl));
|
||||||
|
}
|
||||||
|
|
||||||
return olddecl;
|
return olddecl;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4342,7 +4350,17 @@ reshape_init (tree type, tree *initp)
|
|||||||
TREE_CHAIN (element_init) = CONSTRUCTOR_ELTS (new_init);
|
TREE_CHAIN (element_init) = CONSTRUCTOR_ELTS (new_init);
|
||||||
CONSTRUCTOR_ELTS (new_init) = element_init;
|
CONSTRUCTOR_ELTS (new_init) = element_init;
|
||||||
if (TREE_PURPOSE (element_init))
|
if (TREE_PURPOSE (element_init))
|
||||||
index = TREE_PURPOSE (element_init);
|
{
|
||||||
|
tree next_index = TREE_PURPOSE (element_init);
|
||||||
|
if (TREE_CODE (next_index) == IDENTIFIER_NODE)
|
||||||
|
{
|
||||||
|
error ("name `%D' used in a GNU-style designated "
|
||||||
|
"initializer for an array", next_index);
|
||||||
|
TREE_PURPOSE (element_init) = NULL_TREE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
index = next_index;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1,5 +1,11 @@
|
|||||||
2003-12-28 Mark Mitchell <mark@codesourcery.com>
|
2003-12-28 Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
|
PR c++/13081
|
||||||
|
* g++.dg/opt/inline6.C: New test.
|
||||||
|
|
||||||
|
PR c++/12613
|
||||||
|
* g++.dg/parse/error9.C: New test.
|
||||||
|
|
||||||
* gcc.dg/const-elim-1.c: XFAIL on arm-*-*.
|
* gcc.dg/const-elim-1.c: XFAIL on arm-*-*.
|
||||||
|
|
||||||
2003-12-28 Mark Mitchell <mark@codesourcery.com>
|
2003-12-28 Mark Mitchell <mark@codesourcery.com>
|
||||||
|
14
gcc/testsuite/g++.dg/opt/inline6.C
Normal file
14
gcc/testsuite/g++.dg/opt/inline6.C
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// PR c++/13081
|
||||||
|
// { dg-options "-O2" }
|
||||||
|
// { dg-final { scan-assembler-not "foo" } }
|
||||||
|
|
||||||
|
template<typename T> T foo(T);
|
||||||
|
|
||||||
|
template<typename T> inline T foo(T t)
|
||||||
|
{
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
|
void bar (long& l) {
|
||||||
|
l = foo(l);
|
||||||
|
}
|
5
gcc/testsuite/g++.dg/parse/error9.C
Normal file
5
gcc/testsuite/g++.dg/parse/error9.C
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
// PR c++/12613
|
||||||
|
// { dg-options "" }
|
||||||
|
|
||||||
|
enum { FOO = 1, BAR = 2 };
|
||||||
|
int a[] = { FOO: 1, BAR: 2 }; // { dg-error "" }
|
Loading…
x
Reference in New Issue
Block a user