Skip to content

Commit 8531217

Browse files
authored
Robustify AMREX_ASSUME (#5254)
The issue is the implementation based on if-else is not a single statement. So code like below does not work. ``` if (foo) AMREX_ASSUME(bar); else std::cout << "else\n"; ``` The new implementation based on do-while(0) fixes this issue.
1 parent 50ff9f2 commit 8531217

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

Src/Base/AMReX_Extension.H

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,8 @@
238238
# elif defined(_MSC_VER)
239239
# define AMREX_ASSUME(ASSUMPTION) __assume(ASSUMPTION)
240240
# elif defined(__GNUC__)
241-
# define AMREX_ASSUME(ASSUMPTION) if (ASSUMPTION) {} else { __builtin_unreachable(); }
241+
# define AMREX_ASSUME(ASSUMPTION) \
242+
do { if (!(ASSUMPTION)) { __builtin_unreachable(); } } while (0)
242243
# else
243244
# define AMREX_ASSUME(ASSUMPTION)
244245
# endif

0 commit comments

Comments
 (0)