OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [testsuite/] [g++.dg/] [warn/] [overflow-warn-1.C] - Diff between revs 301 and 338

Only display areas with differences | Details | Blame | View Log

Rev 301 Rev 338
/* Test for diagnostics for constant overflow.  */
/* Test for diagnostics for constant overflow.  */
/* Origin: Joseph Myers  */
/* Origin: Joseph Myers  */
/* { dg-do compile } */
/* { dg-do compile } */
/* { dg-options "" } */
/* { dg-options "" } */
#include 
#include 
enum e {
enum e {
  E0 = INT_MAX,
  E0 = INT_MAX,
  /* Unsigned overflow wraps around.  */
  /* Unsigned overflow wraps around.  */
  E1 = UINT_MAX + 1,
  E1 = UINT_MAX + 1,
  /* Overflow in an unevaluated part of an expression is OK (example
  /* Overflow in an unevaluated part of an expression is OK (example
     in the standard).  */
     in the standard).  */
  E2 = 2 || 1 / 0, /* { dg-bogus "warning: division by zero" "" { xfail *-*-* } 14 } */
  E2 = 2 || 1 / 0, /* { dg-bogus "warning: division by zero" "" { xfail *-*-* } 14 } */
  E3 = 1 / 0, /* { dg-warning "division by zero" } */
  E3 = 1 / 0, /* { dg-warning "division by zero" } */
  /* { dg-error "enumerator value for 'E3' is not an integer constant" "enum error" { target *-*-* } 15 } */
  /* { dg-error "enumerator value for 'E3' is not an integer constant" "enum error" { target *-*-* } 15 } */
  /* But as in DR#031, the 1/0 in an evaluated subexpression means the
  /* But as in DR#031, the 1/0 in an evaluated subexpression means the
     whole expression violates the constraints.  */
     whole expression violates the constraints.  */
  E4 = 0 * (1 / 0), /* { dg-warning "division by zero" } */
  E4 = 0 * (1 / 0), /* { dg-warning "division by zero" } */
  /* { dg-error "enumerator value for 'E4' is not an integer constant" "enum error" { xfail *-*-* } 19 } */
  /* { dg-error "enumerator value for 'E4' is not an integer constant" "enum error" { xfail *-*-* } 19 } */
  E5 = INT_MAX + 1, /* { dg-warning "integer overflow in expression" } */
  E5 = INT_MAX + 1, /* { dg-warning "integer overflow in expression" } */
  /* Again, overflow in evaluated subexpression.  */
  /* Again, overflow in evaluated subexpression.  */
  E6 = 0 * (INT_MAX + 1), /* { dg-warning "integer overflow in expression" } */
  E6 = 0 * (INT_MAX + 1), /* { dg-warning "integer overflow in expression" } */
  /* A cast does not constitute overflow in conversion.  */
  /* A cast does not constitute overflow in conversion.  */
  E7 = (char) INT_MAX
  E7 = (char) INT_MAX
};
};
struct s {
struct s {
  int a;
  int a;
  int : 0 * (1 / 0); /* { dg-warning "division by zero" } */
  int : 0 * (1 / 0); /* { dg-warning "division by zero" } */
  int : 0 * (INT_MAX + 1); /* { dg-warning "integer overflow in expression" } */
  int : 0 * (INT_MAX + 1); /* { dg-warning "integer overflow in expression" } */
};
};
void
void
f (void)
f (void)
{
{
  /* This expression is not required to be a constant expression, so
  /* This expression is not required to be a constant expression, so
     it should just involve undefined behavior at runtime.  */
     it should just involve undefined behavior at runtime.  */
  int c = INT_MAX + 1; /* { dg-warning "integer overflow in expression" } */
  int c = INT_MAX + 1; /* { dg-warning "integer overflow in expression" } */
}
}
/* This expression is neither required to be constant.  */
/* This expression is neither required to be constant.  */
static int sc = INT_MAX + 1; /* { dg-warning "integer overflow in expression" } */
static int sc = INT_MAX + 1; /* { dg-warning "integer overflow in expression" } */
// Test for overflow in null pointer constant.
// Test for overflow in null pointer constant.
void *n = 0;
void *n = 0;
/* The first two of these involve overflow, so are not null pointer
/* The first two of these involve overflow, so are not null pointer
   constants.  The third has the overflow in an unevaluated
   constants.  The third has the overflow in an unevaluated
   subexpression, so is a null pointer constant.  */
   subexpression, so is a null pointer constant.  */
void *p = 0 * (INT_MAX + 1); /* { dg-warning "integer overflow in expression" } */
void *p = 0 * (INT_MAX + 1); /* { dg-warning "integer overflow in expression" } */
/* { dg-error "invalid conversion from 'int' to 'void" "null" { target *-*-* } 51 } */
/* { dg-error "invalid conversion from 'int' to 'void" "null" { target *-*-* } 51 } */
void *q = 0 * (1 / 0); /* { dg-warning "division by zero" } */
void *q = 0 * (1 / 0); /* { dg-warning "division by zero" } */
/* { dg-error "invalid conversion from 'int' to 'void*'" "null" { xfail *-*-* } 53 } */
/* { dg-error "invalid conversion from 'int' to 'void*'" "null" { xfail *-*-* } 53 } */
void *r = (1 ? 0 : INT_MAX+1); /* { dg-bogus "integer overflow in expression" "" { xfail *-*-* } 55 } */
void *r = (1 ? 0 : INT_MAX+1); /* { dg-bogus "integer overflow in expression" "" { xfail *-*-* } 55 } */
void
void
g (int i)
g (int i)
{
{
  switch (i)
  switch (i)
    {
    {
    case 0 * (1/0): /* { dg-warning "division by zero" } */
    case 0 * (1/0): /* { dg-warning "division by zero" } */
      ;
      ;
    case 1 + 0 * (INT_MAX + 1): /* { dg-warning "integer overflow in expression" } */
    case 1 + 0 * (INT_MAX + 1): /* { dg-warning "integer overflow in expression" } */
      ;
      ;
    }
    }
}
}
int
int
h (void)
h (void)
{
{
  return INT_MAX + 1; /* { dg-warning "integer overflow in expression" } */
  return INT_MAX + 1; /* { dg-warning "integer overflow in expression" } */
}
}
int
int
h1 (void)
h1 (void)
{
{
  return INT_MAX + 1 - INT_MAX; /* { dg-warning "integer overflow in expression" } */
  return INT_MAX + 1 - INT_MAX; /* { dg-warning "integer overflow in expression" } */
}
}
void fuc (unsigned char);
void fuc (unsigned char);
void fsc (signed char);
void fsc (signed char);
void
void
h2 (void)
h2 (void)
{
{
  fsc (SCHAR_MAX + 1);
  fsc (SCHAR_MAX + 1);
  fsc (SCHAR_MIN - 1); /* { dg-warning "overflow in implicit constant conversion" } */
  fsc (SCHAR_MIN - 1); /* { dg-warning "overflow in implicit constant conversion" } */
  fsc (UCHAR_MAX);
  fsc (UCHAR_MAX);
  fsc (UCHAR_MAX + 1); /* { dg-warning "overflow in implicit constant conversion" } */
  fsc (UCHAR_MAX + 1); /* { dg-warning "overflow in implicit constant conversion" } */
  fuc (-1);
  fuc (-1);
  fuc (UCHAR_MAX + 1); /* { dg-warning "large integer implicitly truncated to unsigned type" } */
  fuc (UCHAR_MAX + 1); /* { dg-warning "large integer implicitly truncated to unsigned type" } */
  fuc (SCHAR_MIN);
  fuc (SCHAR_MIN);
  fuc (SCHAR_MIN - 1); /* { dg-warning "large integer implicitly truncated to unsigned type" } */
  fuc (SCHAR_MIN - 1); /* { dg-warning "large integer implicitly truncated to unsigned type" } */
  fuc (-UCHAR_MAX); /* { dg-warning "large integer implicitly truncated to unsigned type" } */
  fuc (-UCHAR_MAX); /* { dg-warning "large integer implicitly truncated to unsigned type" } */
}
}
void fui (unsigned int);
void fui (unsigned int);
void fsi (signed int);
void fsi (signed int);
int si;
int si;
unsigned ui;
unsigned ui;
void
void
h2i (int x)
h2i (int x)
{
{
  /* For some reason, we only give certain warnings for implicit
  /* For some reason, we only give certain warnings for implicit
     conversions among values of the same precision with -Wconversion,
     conversions among values of the same precision with -Wconversion,
     while we don't give others at all.  */
     while we don't give others at all.  */
  fsi ((unsigned)INT_MAX + 1);
  fsi ((unsigned)INT_MAX + 1);
  si = (unsigned)INT_MAX + 1;
  si = (unsigned)INT_MAX + 1;
  si = x ? (unsigned)INT_MAX + 1 : 1;
  si = x ? (unsigned)INT_MAX + 1 : 1;
  fsi ((unsigned)INT_MAX + 2);
  fsi ((unsigned)INT_MAX + 2);
  si = (unsigned)INT_MAX + 2;
  si = (unsigned)INT_MAX + 2;
  si = x ? (unsigned)INT_MAX + 2 : 1;
  si = x ? (unsigned)INT_MAX + 2 : 1;
  fsi (UINT_MAX);
  fsi (UINT_MAX);
  si = UINT_MAX;
  si = UINT_MAX;
  fui (-1);
  fui (-1);
  ui = -1;
  ui = -1;
  ui = x ? -1 : 1U;
  ui = x ? -1 : 1U;
  fui (INT_MIN);
  fui (INT_MIN);
  ui = INT_MIN;
  ui = INT_MIN;
  ui = x ? INT_MIN : 1U;
  ui = x ? INT_MIN : 1U;
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.