File tree Expand file tree Collapse file tree 4 files changed +50
-3
lines changed Expand file tree Collapse file tree 4 files changed +50
-3
lines changed Original file line number Diff line number Diff line change
1
+ 2010-11-16 Jakub Jelinek <
[email protected] >
2
+
3
+ PR c++/46401
4
+ * c-common.c (warning_candidate_p): Don't track non-const calls
5
+ or STRING_CSTs.
6
+
1
7
2010-11-15 Ian Lance Taylor <
[email protected] >
2
8
3
9
* c-lex.c (init_c_lex): Set macro debug callbacks if
Original file line number Diff line number Diff line change @@ -2324,10 +2324,26 @@ warn_for_collisions (struct tlist *list)
2324
2324
static int
2325
2325
warning_candidate_p (tree x )
2326
2326
{
2327
- /* !VOID_TYPE_P (TREE_TYPE (x)) is workaround for cp/tree.c
2327
+ if (DECL_P (x ) && DECL_ARTIFICIAL (x ))
2328
+ return 0 ;
2329
+
2330
+ /* VOID_TYPE_P (TREE_TYPE (x)) is workaround for cp/tree.c
2328
2331
(lvalue_p) crash on TRY/CATCH. */
2329
- return !(DECL_P (x ) && DECL_ARTIFICIAL (x ))
2330
- && TREE_TYPE (x ) && !VOID_TYPE_P (TREE_TYPE (x )) && lvalue_p (x );
2332
+ if (TREE_TYPE (x ) == NULL_TREE || VOID_TYPE_P (TREE_TYPE (x )))
2333
+ return 0 ;
2334
+
2335
+ if (!lvalue_p (x ))
2336
+ return 0 ;
2337
+
2338
+ /* No point to track non-const calls, they will never satisfy
2339
+ operand_equal_p. */
2340
+ if (TREE_CODE (x ) == CALL_EXPR && (call_expr_flags (x ) & ECF_CONST ) == 0 )
2341
+ return 0 ;
2342
+
2343
+ if (TREE_CODE (x ) == STRING_CST )
2344
+ return 0 ;
2345
+
2346
+ return 1 ;
2331
2347
}
2332
2348
2333
2349
/* Return nonzero if X and Y appear to be the same candidate (or NULL) */
Original file line number Diff line number Diff line change
1
+ 2010-11-16 Jakub Jelinek <
[email protected] >
2
+
3
+ PR c++/46401
4
+ * g++.dg/warn/Wsequence-point-3.C: New test.
5
+
1
6
2010-11-16 Kai Tietz <
[email protected] >
2
7
3
8
PR preprocessor/17349
Original file line number Diff line number Diff line change
1
+ // PR c++/46401
2
+ // { dg-do compile }
3
+ // { dg-options "-Wsequence-point" }
4
+
5
+ struct S
6
+ {
7
+ S ( );
8
+ S & operator << (const char * );
9
+ S (const S & );
10
+ };
11
+
12
+ #define N1 (n ) << #n
13
+ #define N2 (n ) N1(n)
14
+ #define N3 (n ) N2(n##0) N2(n##1) N2(n##2) N2(n##3) N2(n##4) \
15
+ N2(n##5) N2(n##6) N2(n##7) N2(n##8) N2(n##9)
16
+ #define N4 (n ) N3(n##0) N3(n##1) N3(n##2) N3(n##3) N3(n##4) \
17
+ N3(n##5) N3(n##6) N3(n##7) N3(n##8) N3(n##9)
18
+ #define N5 (n ) N4(n##0) N4(n##1) N4(n##2) N4(n##3) N4(n##4) \
19
+ N4(n##5) N4(n##6) N4(n##7) N4(n##8) N4(n##9)
20
+ S s = S () N5 (a ) N5 (b );
You can’t perform that action at this time.
0 commit comments